基于比特币网络的核心思想,以太坊项目提出了许多创新的技术概念,包括智能合约、基于账户的交易、以太币和燃料等。
智能合约
智能合约(Smart Contract)是以太坊中最为重要的一个概念,即以计算机程序的方式来缔结和运行各种合约。最早在上世纪 90 年代,Nick Szabo 等人就提出过类似的概念,但一直依赖因为缺乏可靠执行智能合约的环境,而被作为一种理论设计。区块链技术的出现,恰好补充了这一缺陷。
以太坊支持通过图灵完备的高级语言(包括 Solidity、Serpent、Viper)等来开发智能合约。智能合约作为运行在以太坊虚拟机(Ethereum Virual Machine,EVM)中的应用,可以接受来自外部的交易请求和事件,通过触发运行提前编写好的代码逻辑,进一步生成新的交易和事件,可以进一步调用其它智能合约。
智能合约的执行结果可能对以太坊网络上的账本状态进行更新。这些修改由于经过了以太坊网络中的共识,一旦确认后无法被伪造和篡改。
账户
在之前章节中,笔者介绍过比特币在设计中并没有账户(Account)的概念,而是采用了 UTXO 模型记录整个系统的状态。任何人都可以通过交易历史来推算出用户的余额信息。而以太坊则采用了不同的做法,直接用账户来记录系统状态。每个账户存储余额信息、智能合约代码和内部数据存储等。以太坊支持在不同的账户之间转移数据,以实现更为复杂的逻辑。
具体来看,以太坊账户分为两种类型:合约账户(Contracts Accounts)和外部账户(Externally Owned Accounts,或 EOA)。
- 合约账户:存储执行的智能合约代码,只能被外部账户来调用激活;
- 外部账户:以太币拥有者账户,对应到某公钥。账户包括 nonce、balance、storageRoot、codeHash 等字段,由个人来控制。
当合约账户被调用时,存储其中的智能合约会在矿工处的虚拟机中自动执行,并消耗一定的燃料。燃料通过外部账户中的以太币进行购买。
交易
交易(Transaction),在以太坊中是指从一个账户到另一个账户的消息数据。消息数据可以是以太币或者合约执行参数。
以太坊采用交易作为执行操作的最小单位。每个交易包括如下字段:
- to:目标账户地址。
- value:可以指定转移的以太币数量。
- nonce:交易相关的字串,用于防止交易被重放。
- gasPrice:执行交易需要消耗的 Gas 价格。
- gasLimit:交易消耗的最大 Gas 值。
- data: 交易附带字节码信息,可用于创建/调用智能合约。
- signature:基于椭圆曲线加密的签名信息,包括R,S,V 三个字段。。
类似比特币网络,在发送交易时,用户需要缴纳一定的交易费用,通过以太币方式进行支付和消耗。目前,以太坊网络可以支持超过比特币网络的交易速率(可以达到每秒几十笔)。
以太币
以太币(Ether)是以太坊网络中的货币。
以太币主要用于购买燃料,支付给矿工,以维护以太坊网络运行智能合约的费用。以太币最小单位是 wei,一个以太币等于 10^18 个 wei。
以太币同样可以通过挖矿来生成。成功生成新区块的以太坊矿工可以获得 2 个以太币的奖励,以及包含在区块内的燃料费用和发现叔块(Uncle block)获得的奖励。用户也可以通过交易市场来直接购买以太币。
目前每年大约可以通过挖矿生成超过一千万个以太币,单个以太币的市场价格目前超过 300 美金。
燃料
燃料(Gas),控制某次交易执行指令的上限。每执行一条合约指令会消耗固定的燃料。当某个交易还未执行结束,而燃料消耗完时,合约执行终止并回滚状态。
Gas 可以跟以太币进行兑换。需要注意的是,以太币的价格是波动的,但运行某段智能合约的燃料费用可以是固定的,通过设定 Gas 价格等进行调节。
下一节:以太坊项目的基本设计与比特币网络类似。为了支持更复杂的智能合约,以太坊在不少地方进行了改进,包括交易模型、共识、对攻击的防护和可扩展性等。