智能合约与以太坊虚拟机

什么是智能合约

现实生活中经常遇到这样的场景:买家与卖家要进行一笔交易,为了保证交易的顺利进行,双方签订了一份合约,合约中声明双方各自的身份、权利和义务(买家付钱、卖家交货的时间节点和方式等),一式两份,各自保存。这样,当交易出现纠纷时,合约将成为寻求法律援助的依据,法律成为确保合约执行的强制力保障。

虽然合约为交易的顺利进行提供了一些保障,但是这样的合约也存在很多不足之处,一旦交易中发生了纠纷,比如卖家拖延发货或者买家拒绝付款,即使在法律的援助下解决了纠纷,交易的效率也会大大降低。甚至在一些情况下,合约将会失去约束效力,比如合约中存在歧义或者合约丢失等。

那么有没有一种更有效的方式保证交易的进行呢?假设我们有一个绝对可信和公正的交易代理人,卖家将商品交给代理人,买家与代理人进行一手交钱一手交货的当面交易。如果买家拒绝购买,卖家可以从代理人手中取回商品;买家也不会存在付钱后拿不到商品的风险。

智能合约就可以充当这样一个代理人。简单地说,智能合约就是区块链上一个包含合约代码和存储空间的虚拟账户,结构如图4-1所示。

图4-1 智能合约

智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。

在以太坊平台上,智能合约的代码运行在以太坊虚拟机EVM中,EVM是一个图灵完备的虚拟机,是以太坊协议的核心。

在以太坊的点对点(P2P)网络中,每个全节点上都包含有一个以太坊虚拟机,当节点需要打包或验证区块时,便将交易相关的可执行代码送入EVM中执行,执行的结果更新了以太坊账户的状态,并被记录在区块链上。

以太坊网络中的每个节点都需要在各自的EVM中执行代码,这就导致了两个问题。一是这样会产生这样大量的平行化计算,每个节点都必须执行代码以验证区块中的结果状态。这虽然牺牲了一定的计算效率,但保证了分布式网络中更高的安全性。二是EVM的执行结果必须有严格的确定性,所有节点必须得到同样的运行结果。这就对智能合约以及EVM造成了一定的局限性,智能合约目前仍无法实现一些可能带来不确定结果的简单操作,如生成随机数、调用操作系统API等,因为这些操作会因时间、系统等执行环境的差异而产生不同的结果,进而使以太坊节点无法对区块中的账户状态达成共识。

回到前面提到的交易场景,我们只需要编写一个能够完成图4-2所示功能的智能合约,就可以得到一个绝对公正的代理人。

图4-2 交易流程

从存储上说,该合约记录了商品的信息,以及所有的交易记录,从功能上讲,该合约包含下面三个功能。

(1)补货功能,卖家将商品交给代理人。卖家调用该功能将商品保存在智能合约中。这里的商品可以是商品记录(比如商品编号),也可以是某些数字商品。

(2)交易功能,代理人与买家进行交易。买家向智能合约发送约定数目的货币,智能合约保存交易记录作为交易凭证,并将商品交付给买家。

(3)提款功能,卖家从代理人处得到买家支付的货币。卖家调用该功能,智能合约将货币发送给卖家。

因为智能合约的行为是由代码控制的,而且代码是可以被网络中所有参与共识的结点所见,所以可以保证智能合约是值得信任,并能够完全按照预设的规则工作。我们只需要确保实现各种功能的代码逻辑是正确和完善的。比如交易功能需要判断买家是否支付了足够多的代币,提款功能需要判断调用者是否是卖家等。

交易功能包含了买方付款和商品交付的两个流程,智能合约的代码执行机制可以保证这两个流程要么全部完成、要么一个都没有完成。这就类似于上面例子中提到的代理人与买家之间“一手交钱一手交货”的当面交易。

因为智能合约以规定的方式在网络中每个节点独立地执行,所有的执行记录和数据都被保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改的、不会丢失的交易凭证。

从本节中可以看出,比起传统合约,区块链智能合约在很多方面具有优势。

(1) 智能合约的条款是由代码确定的。由于代码逻辑的明确性,比起自然语言,更加不容易产生歧义。

(2) 智能合约存储和部署在区块链网络中,而网络中的节点相互独立,都拥有同一份副本,因此合约内容几乎不可能被篡改。同时区块链中也保存了合约的执行记录,可以作为永久的交易凭证。

(3) 合约的创建和执行都依赖于区块链协议,所以合约执行的强制力可以保证。

以太坊和智能合约本身只是一个工具,其具体实现的功能和特性是由企业和开发者所决定的。理论上讲,任意计算复杂度的金融交互过程均可以由智能合约安全、自动地完成。除了金融方面的应用,以太坊平台还可以在如财产登记、投票、智能交通、物联网等任何需要信任、安全和性能兼顾的环境中进行部署和使用。在后面的章节中,我们还会介绍具有竞拍、投票等功能的智能合约。

下一章我们将介绍智能合约的操作与存储方式

感谢机械工业出版社华章分社的投稿,本文来自于华章出版的著作《区块链安全技术指南》。

作者简介

闫莺(博士)

微软亚洲研究院主管研究员,区块链领域负责人,微软Coco区块链平台中国负责人

郑凯(博士)

电子科技大学教授,博士生导师,澳大利亚昆士兰大学计算机科学博士

郭众鑫

微软亚洲研究院研发工程师,微软Coco区块链平台核心开发者

矩阵财经出品

转载请注明:矩阵财经(矩阵数字经济智库)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706G06ZHG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券