二、以太坊介绍

首先我们要知道我们为什么要学习以太坊,主要有以下四个原因:

  • 以太坊是区块链2.0的代表,学习以太坊能了解到区块链技术的所有知识
  • 引入了智能合约,拓宽了区块链的应用场景
  • 对开发者友好、对用户友好,容易编写出简单的区块链应用,学习趣味性高
  • Solidity 语法与 Javascript、Go 等语言接近,易上手

2.1、以太坊简介

区块链技术常常被认为是自互联网诞生以来最具颠覆性的技术,然而,自比特币诞生后一直没有很好的区块链应用开发平台。想要在比特币基础上开发区块链应用是非常复杂繁琐的,因为比特币仅仅是一个加密数字货币系统,无法用来实现更广阔的业务需求。以太坊是目前使用最广泛的支持完备应用开发的共有区块链系统。

和比特币不同,比特币只适合加密数字货币场景,不具备图灵完备性,也缺乏保存实时状态的账户概念,以及存在 PoW 机制带来的效率和资源浪费的问题,而以太坊作为区块链2.0的代表,目标是扩展智能合约和建立一个去中心化应用平台,具有图灵完备的特性、更高效的共识机制、支持智能合约等多种应用场景,使得开发者能够很方便地在以太坊上开发出基于区块链的应用。

2.1.1、以太坊的发展

2014年, Vitalik Buterin 发表了文章《以太坊:一个下一代智能合约和去中心化应用平台》。同年,Buterin 在迈阿密比特币会议中宣布启动以太坊项目,并提出了多项创新性的区块链技术。2015年,以太坊CCO Stephan Tual 在官方博客上宣布以太坊系统诞生,主网上线。

以太坊发展至今经历了“前沿”(Frontier)、“家园”(Homestead)以及现在所处的“大都会”(Metropolis)三个阶段。第四阶段“宁静”(Serenity)将作为以太坊的最后一个阶段,目前尚未有计划发布日期。

2.1.2、以太坊的特点

以太坊团队和外界对以太坊的描述都是“世界计算机”,这代表它是一个开源的、全球的去中心化计算架构。它执行称为智能合约的程序,并使用区块链来同步和存储系统状态,以及使用名为以太币的加密数字货币来计量和约束执行操作的资源成本。同时,以太坊提供了一系列的接口,使得开发者能够通过以太坊来开发去中心化 Web 应用DApps。

2.1.3、智能合约

相比比特币,以太坊最大的特点就是引入了智能合约。智能合约本质上就是一段编写好的程序,可以在特定的条件下被触发并执行特定的操作。由于区块链具有不可逆和不可篡改的特点,因此智能合约与区块链结合后,就成了一份“强制执行”的合约。

以太坊能够作为一个去中心化应用平台和”世界计算机”,其核心就是智能合约。智能合约的引入,使得开发者能够实现许多(理论上是任何)业务逻辑。如果说比特币是通过区块链技术开发的特定计算器,那么引入了智能合约的以太坊就是基于区块链技术的通用计算机。可以简单的理解成:比特币的交易系统就是一份写死的智能合约,而以太坊则将智能合约的开发权限交给开发者。

以太坊提供了对智能合约的全面支持,包括编写智能合约编程语言 Solidity 和运行智能合约的以太坊虚拟机(Ethereum Virtual Machine,EVM)。

2.1.4、幽灵协议

幽灵合约的英文是“Greedy Heaviest Observed Subtree" (GHOST) protocol,在介绍幽灵协议之前,先介绍以太坊中的叔区块、叔块奖励和叔块引用奖励这三个概念。

假设目前以太坊区块链中的区块高度(区块链上的区块个数)为6,现在产生了一笔新的交易,矿工A先将该笔交易打包成了区块 Block 7,在矿工A将 Block 7 广播到其他节点的这段时间里,矿工B和矿工C又分别产生了 Block 8 和 Block 9。Block 7、Block 8、Block 9 都指向 Block 6,即 Block 6 是他们的父区块。由于 Block 7 是最先产生的,因此 Block 7 被认为是有效区块,Block 8 和 Block 9 就是叔区块(作废区块)。

现在链上的区块高度为7,在这基础上又产生了新的交易,并被打包成了 Block 10。在以太坊中,Block 10 除了可以引用它的父区块 Block 7 外,还可以引用叔区块 Block 8 和 Block 9。并且,Block 8 和 Block 9 的矿工会因此获得一笔奖励,称为叔块奖励,Block 10 的矿工除了基础奖励之外,由于引用了叔区块,还会获得一笔额外的叔块引用奖励。

幽灵协议是以太坊的一大创新。由于在比特币中的出块时间被设计为10分钟,而以太坊为了提高出块速度,将出块时间设计为12秒(实际14~15秒左右),这样的高速出块意味着高速确认,高速确认会带来区块的高作废率和低安全性。因为区块需要花一定的时间才能广播至全网,如果矿工 A 挖出了一个区块,而矿工 B 碰巧在 A 的区块扩散至 B 之前挖出了另一个区块,矿工 B 的区块就会作废并且没有对区块链的网络安全做出贡献。此外,这样的高速确认还会带来中心化的问题:如果 A 拥有全网 30% 的算力而 B 拥有 10% 的算力,那么 A 将会在 70% 的时间内都在产生作废区块,而 B 在 90% 的时间内都在产生作废区块,这样,B 永远追不上 A,后果是 A 通过其算力份额拥有对挖矿过程实际上的控制权,出现了算力垄断,弱化了去中心化。

幽灵协议正是为了解决上述问题而引入的,协议的主要内容如下:

  1. 计算最长链时,不仅包括当前区块的父区块和祖区块,还包括祖先块的作废的后代区块(叔区块),将它们综合考虑来计算哪一个区块拥有支持其的最大工作量证明。这解决了网络安全性的问题

  2. 以太坊付给以“叔区块”身份为新块确认作出贡献的废区块87.5%的奖励(叔块奖励),把它们纳入计算的“侄子区块”将获得奖励的12.5%(叔块引用奖励)。这就使得即使产生作废区块的矿工也能够参与区块链网络贡献并获得奖励,解决了中心化倾向的问题

  3. 叔区块最深可以被其父母的第二代至第七代后辈区块引用。这样做是为了:

  • 降低引用叔区块的计算复杂性

  • 过多的叔块引用奖励会剥夺矿工在主链上挖矿的激励,使得矿工有转向公开攻击者链上挖矿的倾向(即公开攻击者可能会恶意产生大量作废区块,无限引用将会诱使矿工转移到攻击者的链上,从而抛弃合法的主链)

  • 计算表明带有激励的五层幽灵协议即使在出块时间为15s的情况下也实现了了95%以上的效率,而拥有25%算力的矿工从中心化得到的益处小于3%

2.1.5、以太坊的组成部分

在以太坊中,包括了 P2P 网络、共识机制、交易、状态机、客户端这几个组成部分。

  • P2P 网络:在以太坊主网上运行,可通过TCP端口30303访问,并运行称为 ÐΞVp2p 的协议。

  • 共识机制:以太坊目前使用名为 Ethash 的 POW 算法,计划在将来会过渡到称为 Casper 的 POS 算法。

  • 交易:以太坊中的交易本质上是网络消息,包括发送者、接收者、值和数据载荷(payload)。

  • 状态机:以太坊的状态转移由以太坊虚拟机(Ethereum Virtual Machine,EVM)处理,EVM 能够将智能合约编译成机器码并执行。

  • 客户端:用于用户和以太坊进行交互操作的软件实现,最突出的是 Go-Ethereum(Geth) 和 Parity。

2.1.6、以太坊中的概念

  • 账户:以太坊中的账户类似于银行账户、应用账户,每个账户有一个20字节的地址。账户又分为普通账户(又叫外部账户,External OwnedAccount,EOA)和合约账户(Contract)。普通账户是由以太坊使用者创建的账户,包含地址、余额和随机数;合约账户是创建智能合约时建立的账户,包含存储空间和合约代码
  • 状态:状态是由账户和两个账户之间价值的转移以及信息的状态转换构成的
  • 地址:地址是一个账户 ECDSA 公钥的 Keccak 散列最右边的160位,通过地址可以在以太坊上接收或发送交易。在 Etherscan
    上,可以通过地址来查询一个账户的信息
  • 交易:以太坊中的交易不仅包括发送和接收以太币,还包括向合约账户发送交易来调用合约代码、向空用户发送交易来生成以交易信息为代码块的合约账户
  • Gas:Gas是以太坊中的一种机制,用于执行智能合约或交易操作的虚拟燃料。由于以太坊是图灵完备的,为了避免开发者无意或恶意编写出死循环等浪费资源或滥用资源的情况,以太坊中的每一笔交易都需支付一定的 Gas (燃料费),即需支付一定的以太币作为 Gas。Gas 的金额通常是由交易的发起者指定并支付的
  • 挖矿:和比特币类似,以太坊同样通过挖矿来产生区块。在以太坊目前的 PoW机制下,每当一笔交易发出并广播,就会吸引矿工来将该交易打包成区块。每产生一个区块都会有一笔固定奖励给矿工,目前的固定奖励是3个以太。同时,区块中所有操作所需的 Gas 也会作为奖励给矿工。与比特币不同的是,以太坊中产生叔块的矿工可能会获得叔块奖励,引用叔块的矿工会获得叔块引用奖励
  • DApp(去中心化应用):通过智能合约,开发者能够设计想要的逻辑,相当于是网站的后端。而 DApp则相当于是一个完整的网站(前端+后端),因此 DApp = 智能合约 + Web 前端。以太坊提供了一个名为 web3.js 的Javascript 库,通过 web3.js 可以实现 Web 与以太坊区块链的交互和与智能合约的交互,方便开发者创建 DApp

2.2、以太坊基础

2.2.1、以太坊中的货币

以太坊中的货币称为 以太币,单位为以太(Ether),也称 ETH 或符号 Ξ。以太可以被分割为更小的单位,最小的单位是 wei,1 以太 = 10^18 wei。以太币各单位的名称及之间的关系如下表:

2.2.2、以太坊钱包

以太坊钱包是用于创建和广播交易的应用程序,常用的钱包有

  • MetaMask,一款基于浏览器扩展的钱包,可以很方便地添加到 Chrome, FireFox 等支持扩展的浏览器中

  • Jaxx,一款跨平台、多币种的钱包

  • MyEtherWallet(MEW),一款基于 Web 的钱包,可以在任何浏览器中运行 Emerald

  • Wallet,一款被设计来用于以太坊经典区块链的钱包,但也与其他以太坊区块链兼容

MetaMask 基础

以 Chrome 为例,访问 Google 网上应用商店,搜索 MetaMask 并添加至 Chrome

添加完成后 Chrome 会自动打开初始化页面

初次使用创建钱包

为钱包设置密码

创建密码后,MetaMask 会生成一串密语,密语是12个随机的英文单词,用于防止密码忘记。密语可以直接当成密码使用,因此需要妥善保管

注册完毕后就可以在 Chrome 地址栏右边的扩展程序栏点击

区块链基础学习(二)相关推荐

  1. 区块链基础学习(一)

    一.区块链简介 1.1.区块链与区块链技术 区块链是将记录(区块)通过密码学串联并加密的链式数据结构.而区块链技术,是通过P2P网络和区块链来实现数据存储的去中心化.不可逆和不可篡改.比特币正是构建在 ...

  2. 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建

    ‍原文链接:区块链基础语言(二)--Go语言开发环境搭建 一.操作系统位数的查询方法‍ 在安装前首先要了解个人的电脑系统位数是32位还是64位. 1.1Windows系统查询方法 右击"计算 ...

  3. AIADATA 独家深度解密:百度XuperChain开源区块链基础平台

    AIADATA 独家深度解密:百度XuperChain开源区块链基础平台 百度超级链Xuperchain正式宣布开源.根据官网显示,链内并行技术.可插拔共识机制.一体化智能合约等四大技术支撑开源,让区 ...

  4. 视频教程-区块链基础:共识算法-区块链

    区块链基础:共识算法 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭物联网设备.手游东方 ...

  5. 如何使用区块链币收款地址找合约地址?_区块链技术学习指引

    本文原文链接 本文为博客文章索引,小白必看.有新文章时会更新本文,建议大家加入收藏夹中,如果你觉得本站不错,欢迎你转发给朋友. 引言 给迷失在如何学习区块链技术的同学一个指引,区块链技术是随比特币诞生 ...

  6. 信息安全技术之11区块链基础测试卷

    信息安全技术之11区块链基础测试卷 一.单选题 二.判断题 叮嘟!这里是小啊呜的学习课程资料整理.好记性不如烂笔头,今天也是努力进步的一天.一起加油进阶吧! 一.单选题 1.[此题归属第11讲]以下哪 ...

  7. 【问链财经-区块链基础知识系列】 第二十七课 区块链与分布式账本的异同

    编者按:在加密货币和区块链领域,有一个业内人士常挂在嘴边的新术语:分布式账本技术(简称DLT).但具有讽刺意味的是,恰恰是比特币和各种区块链试图颠覆的实体们,例如银行,政府和大公司,对分布式账本技术情 ...

  8. 私钥经过哈希计算可以产生公钥_「区块链基础概念100」:公钥和私钥 | 027

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 投资区块链,猛戳:火星财经App下载 来源:学习区块链 原文标题:「区块链基础概 ...

  9. 区块链需要学习哪些东西_区块链主要学习哪些知识?

    原标题:区块链主要学习哪些知识? 就业市场分析公司Buring Glass发布的数据显示,2017年区块链行业就业岗位发布数量同比增长115%,而根据Indeed.com统计结果,这一数字则达到了惊人 ...

最新文章

  1. SQL优化常用方法24
  2. SPOJ 27020 GST Calculator
  3. 多云战略:企业如何精益求精?
  4. 将JAR依赖项添加到Eclipse插件Maven Tycho构建
  5. 037-PHP如何返回闭包函数实例
  6. 设计一个具有大纯时延时间的一阶惯性环节的计算机控制系统,具有一阶纯滞后环节设计.doc...
  7. linux中c语言生日快乐_生日快乐,Linux:27岁
  8. php如何检查对象的类型,如何在PHP中检查对象的特定类型
  9. mysql备份到制定目录_写一个脚本定时自动备份mysql到指定目录
  10. 迅捷路由器FW325R的无线桥接
  11. 解决PL/SQL查询结果乱码的问题
  12. linux安装启动svn
  13. 成功的10000小时定律
  14. 推荐一个MD学习交流微信公众号
  15. webview里面的页面不能往下下拉(下拉卡死)解决
  16. 立场开源 | 电动锡膏挤出器
  17. python坐标转化极坐标方程公式_数学 球坐标(Spherical) - 闪电教程JSRUN
  18. 2023最新网络安全书单推荐——助你从零基础入门到成为网络安全工程师到进阶首席安全官
  19. 黑马程序员——构造器和方法
  20. RadosClient OSDC

热门文章

  1. vue 导入excel解析_VUE中导入excel文件
  2. CSS中z-index
  3. Idea中Spring整合MyBatis框架中配置文件中对象注入问题解决方案
  4. 201671010114 2016-2017-2 《Java程序设计》学习总结
  5. 【转】通用sqlserver分页存储过程
  6. 程序员进阶之算法练习(一)
  7. CreateFeatureClass COM异常
  8. wx.getBLEDeviceCharacteristics 微信小程序蓝牙 微信小程序热敏打印机
  9. Flutter ClipPath 自定义CustomClipper 玩转不一样的背景图案
  10. Android打包编译shrinkResources true报错解决方案