区块链 — 以太坊简介

一、为什么要学习以太坊

  • 庞大的开发者社区,目前最大的区块链开发平台
  • 相对成熟,有代表性,资料众多
  • 以应用入手,学习曲线不那么陡峭
  • 与 JavaScript 结合紧密,方便开发人员上手

二、开发涉及的工具

  • MetaMask:浏览器插件钱包
  • Remix:基于浏览器的 Solidity 在线编译器
  • Geth:以太坊客户端(go 语言)
  • web3.js:以太坊 JavaScript API 库
  • Ganache:以太坊客户端(测试环境私链)
  • Truffle:以太坊开发框架

三、以太坊的特点

以太坊是「世界计算机」,这代表它是一个开源的、全球分布的计算基础设施,其执行称为「智能合约」的程序。

以太坊本质是一个基于交易的状态机,使用区块链来同步和存储系统状态以及名为「以太币」的加密货币,以计量和约束执行资源成本。

四、以太坊的组成部分

  • P2P 网络
  • 交易(Transaction)
  • 以太坊虚拟机(EVM):以太坊状态转换由以太坊虚拟机处理
  • 数据库(Blockchain):以太坊的区块链作为数据库本地存储在每个节点上,包含序列化后的交易和系统状态
  • 客户端:由几种可互相操作的客户端软件实现,例如 Geth

五、以太坊中的重要概念

账户(Account)

包含地址、余额和随机数,以及可选的存储和代码的对象:

  • 普通账户(EOA):存储和代码均为空
  • 合约账户(Contract):包含存储和代码

地址(Address)

代表一个 EOA 或合约,可以在区块链上接收或发送交易。

交易(Transaction)

可以发送以太币和信息。

  • 向合约发送的交易可以调用合约代码,并以信息数据为函数参数。
  • 向空用户发送信息,可以自动生成以信息为代码块的合约账户。

gas

以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核计算机制来衡量gas的消耗量并限制计算资源的消耗。

六、以太坊的货币

以太坊的货币单位称为以太(ether),也可以表示为 ETH。

发行规则

挖矿前,2014 年为众筹发行 7200 万以太币。

挖矿产出:

  • 区块奖励(block reward)

每产生一个新区块就会有一笔固定的奖励给矿工,初始是5个以太币,现在是3个。

  • 叔块奖励(uncle reward)

有些区块被挖得稍晚一些,因此不能作为主区块链的组成部分。比特币称这类区块为「孤块」,并且完全舍弃它们。但是,以太币称他们为「叔块」,并且在之后的区块中,可以引用他们。如果叔块在之后的区块链中作为叔块被引用,每个叔块会为挖矿者产出区块奖励的7/8。

  • 叔块引用奖励(uncle referencing reward)

矿工每应用一个叔块,可以得到区块奖励的1/32作为奖励(最多引用两个叔块)。

幽灵协议

以上这一套基于 POW 的奖励机制,被称为以太坊的「幽灵协议」。

以太坊出块时间:设计为12秒,实际为14~15秒(比特币12.6s能够覆盖到全网95%的节点)。快速确认会带来区块的高作废率,由此链的安全性也会降低。

“幽灵”协议:Greedy Heaviest Observed SubTree,“GHOST”。计算工作量证明时,不仅包括当前区块的祖区块、父区块,还要包括祖先块的作废的后台区块(叔块),将它们进行综合考虑。目前的协议要求下探到第七层,也就是说,废区块智能以叔区块的身份被其父母的第二代至第七代后辈区块引用,而不能是更远关系的后辈区块。以太坊付给以“叔区块”身份为新块确认作出贡献的废区块7/8的奖励,把他们纳入计算的“侄子区块”将获得区块奖励的1/32。

七、去中心化应用

基于以太坊可以创建智能合约来构建「去中心化应用(DApp)」,以太坊的构想是成为 DApps 编程开发的平台。DApp 至少由区块链上的智能合约和Web前端用户界面组成。

八、代币(Token)

代币也称作通证,本意为“令牌”,代表有所有权的资产、货币、权限等在区块链上的抽象。

  • 可替代性通证(fungible token):基于区块链技术发行的,互相可以替代的,可以接近无限拆分的 token。
  • 非同质通证(non-fungible token):基于区块链技术发行的,唯一的,不可替代的,大多数情况下不可拆分的 token,例如加密猫。