1.3 以太坊与智能合约

作为全世界第二大数字货币,以太坊(Ethereum)借鉴了比特币区块链的技术,在后者基础上进行了应用范围的扩展。如果说比特币是利用区块链技术的专用计算器,那么以太坊的目标,就是想成为利用区块链技术的通用计算机,超越记账功能,应用到各个场景。

以太坊打造了一个运行智能合约的平台(Platform for Smart Contract),该平台支持图灵完备的应用,按照智能合约约定的逻辑自动执行,支持Golang、C++、Python 等多种语言实现的客户端。与比特币相比,以太坊最大的不同点是:它可以支持更加强大的脚本语言(用技术语言讲,就是图灵完备的脚本语言),允许开发者在上面开发任意应用,实现任意智能合约,这也是以太坊最强大之处。简单粗暴地讲,以太坊=区块链+智能合约。

在本书中除了第2章,我们并不想太过深入地探讨技术原理,所以在这里也是点到即止。如果有兴趣,读者除了可以在第2章中略微深入了解一下以太坊之外,还可以从文末列出的参考资源中了解更多信息。

什么是智能合约

最早提出“智能合约(Smart Contract)”一词的人,有据可查的是计算机科学家尼克·萨博(Nick Szabo)。在其网站主页上,他将智能合约定义为:

A smart contract is a computerized transaction protocol that executes the terms of a contract.

智能合约就是能够执行合约条款的计算机化的交易协议。其出发点就是要在互联网和电子商务中,让陌生人之间实现类似于法律合同效用的商业行为。

不过尼克·萨博关于智能合约的工作理论迟迟没有实现,一个重要原因是因为缺乏能够支持可编程合约的数字系统和技术。智能合约看上去就是一段可用计算机执行的程序,满足条件后准确自动地执行。但传统技术即使通过软件限制、性能优化等方法,也无法同时实现区块链的两大特性,即:一是数据无法删除和修改,只能新增,保证历史的可追溯性,同时作恶的成本将很高,因为其作恶行为将被永远记录下来;二是去中心化,避免中心化因素的影响。

如果说比特币引领了区块链技术,那么以太坊则让智能合约复活。而且智能合约程序不止是一个可以自动执行的计算机程序,它自己就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以信任的人,它可以临时保管资产,而且总是按照事先约定的规则执行操作。

下面这个示意图就是一个智能合约模型(见图1-5):一段代码(智能合约)被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产,对接收到的外界信息或者资产进行回应。

图1-5 智能合约模型

例如,一个人可能有一个存储合约,形式为“A每天最多可以提现X个币,B每天最多提现Y个,A和B一起可以随意提取,A可以停掉B的提现权”。对这种合约符合逻辑的扩展就是去中心化组织(DA O)自治地管理组织的资产,并用智能合约的方式来编码,用程序实现这些组织的规则。以太坊的目标就是提供一个带有内置的成熟的图灵完备语言的区块链,用这种语言可以创建合约对任意状态转换功能进行编码,用户只要用代码来实现逻辑,就能够创建设想的系统。

因此有人说,如果说区块链 1.0是以比特币为代表的,解决了货币和支付手段的去中心化问题,那么区块链 2.0就是更宏观地对整个市场去中心化,利用区块链技术来转换许多不同的数字资产而不仅仅是比特币,通过转换来创建不同资产的价值。区块链技术的去中心化记账功能可以被用来创建、确认、转移各种不同类型的资产及合约,未来几乎所有类型的金融交易都可以被改造成在区块链上进行,包括股票、私募股权、众筹、债券和其他类型的金融衍生品如期货、期权等。

以太坊的诞生

相对于2009年上线的比特币,以太坊要年轻许多。

20 1 3年年底,比特币社区开发团队中有一些开发者开始探讨将比特币网络中的核心技术,主要是区块链技术,拓展到更多应用场景的可能性。以太坊的早期发明者Vitalik Buterin提出,应该设计出能运行任意形式(图灵完备)的应用程序,而不仅仅是比特币中受限制的简单脚本。

但该设计思想并未得到比特币社区的支持,后来作为以太坊白皮书发布,即《以太坊:下一代智能合约和去中心化应用平台》。在该设想中,以太坊区块链底层也是一个类似比特币网络的P2P平台,智能合约运行在网络中的以太坊虚拟机里,网络自身是公开可接入的,任何人都可以接入并参与网络中数据的维护,提供运行以太坊虚拟机的资源。

跟比特币项目相比,以太坊区块链的技术特点主要包括:

· 支持图灵完备的智能合约,设计了编程语言Solidity和虚拟机EVM。

· 选用了内存需求较高的哈希函数,避免出现强算力矿机、矿池攻击。

· 采用叔块(Uncle Block)激励机制,降低矿池的优势,并减少区块产生的间隔(从10分钟降低到15秒左右)。

· 采用账户系统和世界状态,而不是UTXO(Unspent Transaction Outputs,即未花费的交易输出),可以支持更复杂的逻辑。

· 通过Gas限制代码执行指令数,避免循环执行攻击。

· 支持Po W(工作量证明)共识算法,并计划支持效率更高的Po S(权益证明)算法。

此外,以太坊开发团队还计划通过分片(Sharding)方式来解决网络的可扩展性问题,这些技术特点解决了比特币网络在运行中被人诟病的一些问题,使得以太坊网络具备更大的应用潜力。

2014年 2月,更多开发者(包括Gavin Wood、Jeffrey Wilcke等)加入以太坊项目,并计划在社区开始以众筹形式募集资金,开发一个运行智能合约的信任平台。201 4年7月,以太币预售,经过42天,总共筹集到价值超过180 0万美元的比特币。随后以太坊基金会在瑞士成立,负责对募集到的资金进行管理和运营,并且组建研发团队以开源社区形式进行平台的开发。

2015年 7月底,以太坊第一阶段Frontier正式发布,标志着以太坊区块链网络正式上线。这一阶段采用类似比特币网络的Po W共识机制,参与的节点以矿工挖矿的形式维护网络,支持上传智能合约。Frontier版本实现了计划的基本功能,在运行中测试出了一些安全上的漏洞,这一阶段的使用者以开发者居多。

2016年 3月,第二阶段Homestead开始运行(区块数1,150,000个),主要改善了安全性,同时开始提供图形界面客户端,提升了易用性,更多用户加入进来。2016年6月,The DA O基于以太坊平台进行众筹,受到攻击,造成价值超过5000万美元的以太币被冻结,社区最后通过硬分叉(hard fork)解决。

2017年 3月,以太坊成立以太坊企业级联盟(Enterprise EthereumAlliance,EEA),联盟成员主要为摩根大通、微软、芝加哥大学和部分创业企业等。2017年11月,又暴露多个签名钱包存在漏洞,造成价值2.8亿美元的以太币被冻结。

目前,以太坊网络支持了接近比特币网络的交易量,成为最受关注的公有链项目,也让在以太坊上使用的以太币成为全世界排名第二的数字货币。后面按照计划,以太坊将发布第三阶段Metropolis和第四阶段Serenity,主要特性包括支持Po S(股权证明)的共识机制,以降低原先Po W机制造成的能耗;以及支持图形界面的钱包,以提升易用性。包括The DAO在内,以太坊网络已经经历了数次大的硬分叉,而每次硬分叉后的版本对之前的版本并不兼容。

以太坊与图灵完备

根据维基百科,图灵完备的释义是,在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它就是图灵完备的。这个词源于引入“图灵机”概念的数学家艾伦·图灵,虽然图灵机会受到存储能力的物理限制,但图灵完备性通常是指“具有无限存储能力的通用物理机器或编程语言”。

也就是说,“图灵完备”意味着这门语言可以做到能够用图灵机做到的所有事情,可以解决所有的可计算问题,它带来了强大的处理能力。图灵完备的数字货币更加智能,例如以太坊,就是想以图灵完备的编程语言,帮助以太坊进行智能合约的部署。

其实我们对于图灵完备这一条不敢苟同。如果一条公链的目的是实现所有的功能,那么它最终可能什么都做不好。