区块链安全入门与实战
上QQ阅读APP看书,第一时间看更新

1.3.2 以太坊

随着比特币被越来越广泛地应用在国际汇款中,其他为金融、云计算、信息传递和分布式管理所专门设计的去中心化应用(DApp)也在研发中,以太坊提供了一个平台来创建这些去中心化应用。

以太坊(Ethereum)是一个开源的有智能合约的公共区块链平台,通过其专用加密货币以太币(Ether,简称ETH,代码中常用写法为ether)来提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。

以太坊用户端也称为etherbrowser,可以用来构建传递信息的点对点网络,在普遍用编程语言构建的区块链中,允许人们把区块链技术应用到任何他们想开发的应用中。因为以太坊是基于区块链技术的,所以在这个平台上可以开发出完全可信赖的透明的金融应用。线上密码安全系统可以用来管理资产和合约。社交网络和信息传递应用允许用户掌控自己的数据,用于交易未充分利用的资源,比如CPU(Central Processing Unit,中央处理器)时间和硬盘空间,还可以应用到线上投票和分布式治理。而最让人期待的以太坊应用可能还在开发中。

预测一种创新型的平台将能用于做什么并不容易,通过提供一种全球通用的可编程的区块链,可以把它打包成任何人都可以使用的用户端,人们希望以太坊项目对金融、点对点贸易、分布式处理等发挥积极作用。

以上为以太坊创始人V神对以太坊区块链系统的阐述。下面我们将从以太坊的产生、特点、账户、交易与消息以及比特币和以太坊的区别等方面来详细介绍以太坊。

1.以太坊的产生

2013~2014年,程序员Vitalik Buterin受比特币启发后,首次提出了“以太坊”的概念,大意为“下一代加密货币与去中心化应用平台”;2014年,通过ICO众筹开始得以发展;2015年,以太坊区块链正式上线,最终发展为世界第二大数字货币平台。

2.以太坊的特点

以太坊区块链第一大的特点是支持高级语言编程,也就是智能合约,可以编程实现丰富的应用场景。第二大特点是以太坊每15秒出一个块,有更短的区块确认时间。第三大特点是以太币没有总量限制,初始发行量为7200万枚,每年增产1800万枚。

以太坊区块链系统是区块链和智能合约的完美结合,它不仅拥有区块链的特性(数据公开透明、不可更改、可溯源、去中心化等),而且是一个可编程的区块链。以太坊程序智能合约允许任何人创建和调用,其运行环境是以太坊虚拟机(EVM)。

以太坊虚拟机是以太坊智能合约的运行环境,它是一个被沙箱封装起来,可以说是完全隔离的运行环境,智能合约之间的相互调用也是非常有限的。每个参与到以太坊协议中的节点都会在各自的计算机上运行软件,这些都被称为以太坊虚拟机,由于区块链的数据是公开透明的,并且每个节点的信息都同步,所以只要智能合约部署成功,就可以在任何节点上的以太坊虚拟机上运行。

3.以太坊账户、交易与消息

以太坊账户分为两种类型:

·外部账户(EOA):由私钥控制,不关联任何代码。

·合约账户:由存储在账户中的代码控制,并且一个合约账户只能被一个外部账户操作。

对于这两种账户类型的交易,如果是外部账户A给外部账户B发送消息,就只是价值转移,或者说是转账操作;如果是外部账户A发送消息给合约账户,就可以进行创建或者调用合约等其他操作。

交易是从一个账户发送给另一个账户的消息。这里有两种情况:如果交易的目标账户存在代码,那么就会执行目标账户的代码;如果目标账户为0,则会创建一个新的合约。

以太坊中的交易是指从外部账户发出含有消息的签名数据包。交易包含以下几个部分:

·交易序列号(nonce):是账号的一个交易计数器,这个字段能够防止重放攻击。

·接收方地址(receipt):可以是一个用户账户,也可以是合约。

·价值(value):交易发送的以太币数量(以太坊中的最小单位用wei表示,单位换算为1 Ether=1018wei)。

·数据(data):如果你的交易接收方是一个合约,那么该合约就可以读取数据。

·gasPrice:每个Gas的价格用Gwei来表示,单位换算为1 Gwei=109 wei。

·gasLimit:交易可使用的最大Gas数量限制。

以太坊交易的状态转换图如图1.1所示。

图 1.1

以太坊的状态转换函数为APPLY(S,TX)->S',作用如下:

·检查交易的格式是否正确,签名是否有效,nonce是否与发送者账户的nonce匹配,如果不匹配,则返回错误。

·计算交易费用,公式为fee=GAS×GASPRICE,并从签名中确定发送者的地址。从发送者的账户中减去交易费用,增加发送者的nonce。如果账户余额不足,则返回错误。

·设定初值GAS,并根据交易中的字节数减去一定量的“燃料”(Gas)。

·从发送者的账户转移货币价值到接收者账户。如果接收者账户不存在,就会创建一个新账户。如果接收者账户是一个合约,就会运行合约的代码,直到代码运行结束或者燃料用完。

·如果因为发送者账户没有足够的钱或者代码执行耗尽燃料而导致价值转移失败,则恢复原来的状态,但是还是需要支付交易费用,交易费用归入矿工账户。

4.比特币和以太坊的区别

比特币和以太坊的区别大致如表1.2所示。

表 1.2