深入理解以太坊
上QQ阅读APP看书,第一时间看更新

1.3 以太坊核心技术

1.3.1 智能合约

以太坊是可编程的区块链。它并不是给用户一系列预先设定好的操作(例如比特币交易),而是允许用户按照自己的意愿创建复杂的操作。这样一来,它就可以作为通用去中心化区块链平台。20世纪90年代,Nick Szabo首次提出智能合约的理念。由于缺少可信的执行环境,智能合约并没有被应用到实际产业中。自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境。以太坊首先看到了区块链和智能合约的契合,并致力于成为智能合约的最佳运行平台。

从技术方面来看,以太坊利用图灵完备的虚拟机(EVM)实现对任意复杂代码逻辑(即智能合约)的解析。开发者能够使用类似JavaScript(Solidity)或Python(Serpent)的语法创建出可以在以太坊虚拟机上运行的应用。结合点对点网络,每个以太坊节点都运行着虚拟机并执行相同的指令。因此,人们有时也形象地称以太坊为“世界电脑”。这个贯穿整个以太坊网络的大规模并行运算并没有使运算更高效,而是使在以太坊上的运算比在传统“电脑”上更慢更昂贵。然而,这种架构可以带给以太坊极强的容错性,保证区块链上的数据一致、不可篡改。

从应用方面来看,智能合约是一种用计算机语言取代法律语言去记录条款的合约。如果区块链是一个数据库,智能合约就是能够使区块链技术应用到现实当中的应用层。传统意义上的合同一般与执行合同内容的计算机代码没有直接联系。纸质合同在大多数情况下是被存档的,而软件会执行用计算机代码形式编写的合同条款。智能合约的潜在好处包括:降低合约签订、执行和监管方面的成本;相比其他合约,智能合约可以极大地降低人力成本。

图1-2就是一个智能合约模型:一段代码被部署在分布式共享账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。

图1-2 智能合约模型示意

1.3.2 PoS

以太坊另一个重要核心技术就是共识算法的改进。比特币在区块生成过程中使用了工作量证明(Proof of Work)共识机制,一个符合要求的区块哈希由N个前导零构成,零的个数取决于网络的难度值。要得到合理的区块哈希需要经过大量枚举计算,计算时间取决于机器的哈希运算速度。在股权证明(Proof of Stake)共识中,验证人轮流提议新块并对下一个块投票,每个验证人的投票权重取决于其持币量的大小(即股权)。验证人为区块链网络提供出块服务,网络也会给验证人返回奖励,而且这种奖励也实现了对攻击者的经济制约。

PoS的明确优点包括安全性、降低集权风险和提高能源效率。PoS可以灵活地、明确地设计对拜占庭行为(即不遵循协议)进行的惩罚。这使得协议设计者能够对网络中各种行为的不对称风险和收益回报情况进行更多的控制。提高安全性的另一个方面是增加网络攻击的成本,因此具有明确惩罚(可能在比PoW更严重的级别上)的能力可以增加网络的安全性(意即经济安全)。在PoS权益证明的情况下,一美元就是一美元。这样的好处是,你不能通过汇集在一起,使得一美元值得更多。你也不能开发或购买专用集成电路(ASIC),从而在技术上占有优势。所以,PoS不同于PoW挖矿收入的累计分配方式,采用了比例分配(成熟的去中心化的身份管理服务使得按比例分配收益成为可能)。

以太坊要实现的PoS机制被命名为Capser(名字源于20世纪90年代的一部电影《鬼马小精灵》),它实际上是由以太坊团队正在积极研究的两个主要项目组成,即Casper FFG和Casper CBC。虽然是独立的两套实现,但它们有着一样的目标:将以太坊的工作量证明转到PoS权益证明。

友好的终结工具Casper FFG又名“Vitalik's Casper”,是一种混合PoW / PoS的共识机制,它是以太坊首个通向PoS权益证明的候选方法。更具体地说,FFG在工作量证明(如以太坊的ethash PoW链)的基础上,实施了权益证明。简单地说,区块链将用熟悉的ethash PoW算法增加区块,但是每50块有一个PoS “检查点”,通过网络验证人来评估区块的最终有效性。

Casper CBC又称“Vlad's Casper”,与传统协议设计的方式不同:①协议在开始阶段是部分确定的;②其余部分协议以证明能够满足所需/必需属性的方式得到(通常协议被完全定义,然后被测试以满足所述属性)。在这种情况下,得出完整协议的一种方法是实现所预计的安全性(一个理想的对手),或者提出合理的错误估计,或者列举潜在的未来错误估计。更具体地说,Vlad的工作侧重于设计协议,扩展单个节点对安全性估计的局限视角,以实现共识安全性。

退后一步,FFG更侧重于通过多步骤过渡为以太网络引入PoS。通过以一步一步迭代的方式实现,逐步增加PoS在网络中的作用。相比之下,CBC着重于通过建设得出安全证明的正式方法。尽管令人困惑,但解决这个问题的不同方法创造了两个不同的工程。Casper的最终形式可能来自对FFG和CBC的互相学习。