时间: 2024-03-04 03:32:32 | 作者: 数控系统
未来社会是数字社会,如何把实体社会中我们正常的生活的模式、信用、法律甚至文化等依存关系转移到虚拟世界中,是
我们可以试想未来汽车交易的一个场景:关于汽车贷款。如果贷款者届时不还款,那么,一个合约程序将会自动收回发动汽车的数字钥匙。毫无疑问,汽车经销商会发现,这种自动合约的用途是很着迷的。这个例子是密码学家尼克·萨博(Nick Szabo)1994年提出的。他首次提出了“智能合约(Smart Contract, SC)”[1]的概念。相对于复杂的、涉及用户、汽车经销商和银行的贷款行为(手续),智能合约能自动执行合约条款的计算机程序。他创造性地提出“智能合约就是执行合约条款的可计算交易协议”,简单的一个例子就是类似图1的自动售货机。机器通过物理的密封系统自行控制财产,可以编程自动执行“合约”条款。
尼克·萨博指出,计算机代码能代替机械设备,进行更复杂的数字财产交易。未来的某一天,这些程序甚至有可能取代处理某些特定金融交易的律师和银行,即“智能财产能够最终靠将智能合约内置到物理实体的方式,被创造出来”。随后在2002年,尼克·萨博设计出了一种叫“比特黄金”(bit gold)的数字货币机制[2]。他认为,智能合约能支持电子数据交换(EDI)、证券期权等合成型资产(synthetic assets)的交易。例如,房屋出租商发现,智能合约的这种用途很着迷:一个房屋的门锁能够连接到物联网上,能够最终靠执行智能合约被打开。当一位客户进行了一笔租房交易后,达成的智能合约将自动为该客户打开房门,并进行自动资金转移。客户只需要用存储在智能手机中的钥匙就能进入房屋。智能合约还是实现分布式自治组织(Decentralized Autonomous Organization, DAO)[3]的关键技术之一。DAO是指一个拥有少数成员或者股东的虚拟实体,依靠自治组织的共识来决定开支以及修改代码等事宜,这就能够最终靠智能合约把成员之间的合约变成自动执行的代码来强制执行。
虽然智能合约仍然处于初始阶段,但是其对挖掘未来数字社会的潜力显而易见,因为它把人与法律协议,以及与网络虚拟世界之间复杂的关系程序化了。也许有一天,我们会与律师和银行说再见,而合约模板的编制、审核则会变成律师新的工作重点。
智能合约的意义在于,它不仅可能颠覆现有的商业模式,更重要的是它也能够完善现有的商业模式,并且大幅度减少第三方中介的费用。
智能合约有许多非形式化的定义。尼克·萨博给出了一个简短的概念,即“智能合约利用协议和用户接口来促进合约的执行”;马克·米勒(Mark S. Miller)认为,智能合约就是用程序代码编写的合约,它的条款由程序来执行[4];以太坊(Ethereum)认为,智能合约就是基于区块链的、可直接控制数字资产的程序[5]。其他两个有价值的定义如下:
1.智能合约是运行在可复制、共享账本上的计算机程序,能处理信息,接收、储存和发送价值。
2.智能合约是一段代码,被部署在分享的、复制的账本上,可以维持自己的状态,控制自己的资产,对接收到的外界信息或者资产进行回应。
总的来说,一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在其上执行这些承诺的协议。图2所示的是智能合约的概念模式[6],智能合约的代码被部署在分享的、复制的账本上,它可以维持自己的状态、控制自己的资产(状态、资产与代码一样,被存储在账本上),还能够对所接收的外界信息进行回应。
特征1:一致性,智能合约需要与合约文本保持一致,并且不与现有法律发生冲突。每个合约在发布之前,需要由技术人员和专业律师来保证合约的一致性。
特征2:可定制,智能合约应当是可定制的,复杂的合约能够最终靠组合简单的合约而得到。
特征3:可观察性,合约本身与其执行过程都应该是可观察的,以支持监管和可信。
特征5:自强制性,智能合约可以在不依靠法律强制力的情况下预防和惩罚违约行为。
特征6:接入控制,只允许与合约相关的人查看关于合约的信息。只有当发生冲突时,才打开第三方接口,允许第三方查证。
萨博提出的智能合约理论几乎与互联网同时出现,但应用实践却一直严重地落后于理论,没找到将这个理念转变为现实的清晰路径。其根本原因是智能合约的实现存在以下两方面问题:一是智能合约怎么来实现控制实物资产,并保证有效地执行合约。售货机通过将商品保存在其内部以控制财产所有权,可是计算机程序很难控制现实世界的现金、股份等资产;二是计算机很难保证执行这些条款,以获得合约方的信任。合约方需要可靠的解释和执行代码的计算机,无法亲自检查有问题的计算机,也无法直接观察与验证其他合约方的执行动作,只有让第三方审核各方合约执行的记录。而区块链技术的出现解决了这样一些问题,从而触发了智能合约的应用。
区块链为完全数字化资产的记录和转移奠定了基础,通过完全数字化的资产,使得计算机代码能控制资产。在区块链上,控制资产就是控制资产对应的密钥,而不是任何实物。期权合约能控制合约相关的资产,而不需要代管机构。区块链使计算系统成为受信任系统,它已经不局限于数据库的功能,同时还是可以执行代码和记录资产所有权的分布式计算机。“智能期权”可以被上传和存储在区块链中,并根据指令执行,一旦区块链记录了合约代码,合约方就能确定合约不会被更改。因此智能合约又作为区块链上的一种链上代码(chaincode)被广泛接受,如当前有代表性的开源系统以太坊[7]和超级账本(Hyperledger)[8]等。在以太坊中,智能合约是存储在区块链上的脚本,通过区块链节点以分布式的形式执行,相当于商业交易、监督管理过程中法律、法规的执行者。智能合约可以以按序、安全、可验证的方式实施特定的流程。
区块链为智能合约的实现提供了一个平台,而智能合约使得区块链的应用更广泛和灵活。目前,实现智能合约的区块链系统正在成为热点,如开源项目以太坊、码律(Codius)[9]和超级账本等,它们都有可编程的合约语言和可执行的基础设施来实现智能合约。区块链为合约提供存储代码和状态的地方,再把执行合约的基本环境与一致性算法融合在一起,就构成了最基本的基于区块链的智能合约系统。把合约写成代码,合约的执行就是根据规定好的合约条款对合约方的合约信息(状态、行为)进行判别,并根据执行的结果采取对应的动作,保证了合约的强制性;区块链对合约代码与状态的存储保证了合约存储的可靠性与可观察性;把执行合约的基本环境与一致性算法融合在一起,合约状态的改变不是由单点决定的,而是由多个节点一起决定的,保证了合约执行的可验证性与可信性,从而能够省去第三方监管的费用。
例如,在以太坊中,合约建立过程是先用以太坊给出的合约语言(如Solidity、Serpent、LLL和Mutan等)编写合约代码,然后编译成以太坊虚拟机(Ethereum Virtual Machine, EVM)代码,把以太坊虚拟机代码放入交易中,发送到网络中。区块链的各个节点验证并处理交易后,就会新开一个用于管理合约的账户,把以太坊虚拟机代码存在合约账户的存储空间,等需要执行的时候再取出执行。Solidity、Serpent、LLL和Mutan等都是用于描述合约的语言,用户都能够根据个人喜好来选择。以太坊提供了一个带有图灵完备编程语言的区块链平台,提供了智能合约的基本功能,其合约的建立过程如图3所示[10]。
表1给出了用Serpent语言[11]编写的一个描述银行基本功能的智能合约代码来说明其应用。这是一个自动执行的智能合约,一共有四个功能:查询账户余额、存钱、取钱、转账。
合约的建立与执行过程如下:先把表1中的合约代码编译成以太坊虚拟机代码,然后在区块链上建立合约账户,用于存储合约和管理与合约相关的数据。当需要查看余额的时候,发消息给合约账户调用balance();当需要转账的时候,调用transfer(),合约账户会自动将客户的钱减去转账数额,给对方的钱增加相应的数额;当需要存钱的时候,调用deposit(),合约账户会自动增加客户的钱数;当需要取款的时候,调用withdraw()。
应该说,目前区块链上的智能合约在技术上还处于早期阶段,是不成熟、不安全和不智能的,更没形成理论体系,还不能大规模满足应用的需求。比如2016年6月17日发生的The DAO攻击事件,由于The DAO智能合约自身的漏洞,导致6000万美元从账号中流失[12]。尽管已经存在一些合约管理系统,如Selectica[13]、Novatus[14]和Apttus[15]等,但这些系统都只是起到管理合约的作用,不能强制执行合约条款。下面提出一些需要研究的问题,抛砖引玉。
智能合约不智能:目前基本是固定的合约模板,智能合约由谁来编写,谁来检验、测试和认证,动态修改都是全新的模式,与人工智能技术结合是研究趋势。
合法性问题:智能合约具有与“真正”合约一样的法律上的约束力吗?如果智能合约的结果违背法律,或者法庭发现它与合约法冲突,该怎么样才能解决?计算法律学的研究将从技术层面和法律层面突破。CommonAccord项目[16]采用基于智能合约的方法,在法律文档与代码自动生成方面提出了新的思路。
合约的可信问题:软件质量上的问题很突出,软件陷阱会导致明显地有利于合约的某一方,该怎样对合约进行查验和修复?如何验证合约的逻辑正确性并杜绝漏洞?形式化方法是目前软件可信性验证的重要手段。要避免类似的由于代码本身有漏洞而给黑客制造攻击机会的情况。
外部信息问题:如果智能合约从外部源检索获取一些信息,且信息源是区块链以外的,那么就不能够确保每个节点都会接收到相同的信息。一旦共识被打破,整个区块链系统都会瘫痪。
智能合约执行问题:存在多个合约需要一段时间触发的情况,待触发事件由谁来管理与发送?如果多个合约同时执行,会带来复杂的访问控制、同步并发以及一致性问题。
合约安全性问题:合约密码学、证据和信息安全将始终是重要的研究方向。越来越复杂的合约程序会不会消耗计算节点大量的计算能力(如形成无限循环),该怎么样避免这类情况的发生?
性能问题:把合约状态的一致性过程与区块链的一致性过程结合起来,有一定的概率会增加区块的制作时间,比如以太坊中区块的构造时间就包含了区块中交易的处理时间,并因此减慢了建块速度,该怎么样加快合约的执行效率?
业务模型问题:如何以正确的方式为不同的真实业务现象建立模型?如何大量建立软件工程中的业务建模工具是支持用户应用的关键。
智能合约的本质是算法合同(algorithmic contract),即当事人同意依据一定的计算机算法来确定合同的内容、订立合同和履行合同的行为。智能合约作为“代码即合约”,是一种特殊的软件。由于合约代码常常蕴含着法律关系和利益交易,因此智能合约又比一般的软件具有更复杂的关联,并且在可信方面有更高的要求。展望未来,智能合约将是需要大规模生产和应用的服务软件。
我们认为,大规模生产和应用智能合约软件,需要三个方面的技术融合:一是传统软件工程的理论方法。二是需要合约的复合精确验证方法,合约是交易双方或多方的约定,合约需要参与方的共同认定,并要求与法律文本保持一致性,需要保证其代码和执行的不可更改和可信性。形式化方法(formal method)能成为对合约进行确定性验证的一种技术,通过形式化语言,把合约中的概念、判断、推理转化成智能合约模型,可以消除自然语言的歧义性、不通用性,进而采用形式化工具对智能合约建模、分析和验证,进行一致性测试,最后自动生成验证过的合约代码。此外,描述合约交易实体之间复杂的耦合作用,体现价值的变化和转移也是很有意义的,可采用数学方法分析对系统稳定性和可达集进行计算分析,指导智能合约的自动代码生成。三是智能合约作为特殊证据性代码需要法律层面的规制,计算法律(computational law)研究怎么样使用计算机技术以电子媒介的方式来实现对法律、法规、合同、章程等法律文件的表达和自动执行,保障通过计算机代码所设定的规则与现实世界中的法定规则保持一致,并可当作法律认可的证据链。为此,我们提出了智能合约工程(Smart Contract Engineering, SCE)的概念和方法。智能合约工程是融合软件工程、复合验证方法和计算法律的智能合约系统化、规模化的开发过程,其体系架构如图4所示。
为了指导智能合约的编写与执行,我们参考文献[17~20]中提出的商业合约架构(business contract architecture),并结合区块链的特点,设计出一个具有实用价值的智能合约执行模型(SC execution model),如图5所示。
1.协商者,在合约建立阶段,在各合约方之间充当着交换合约的角色,并把签名后的合约发布到区块链上;在后期,根据合约方的需求,发布合约的补丁到区块链中。
2.验证者,使用形式化的方法来确保合约的正确性、安全性、可靠性与一致性。
3.区块链,用于存储所有与合约相关的、安全的分布式数据库,规范化所存储的信息后,可充当解决矛盾冲突的证据。
5.合约执行器,用于执行存储在区块链上的代码,它充当了两个角色的作用:观察者,根据事先定义好的合约事件,判断合约方的执行动作,若发生了违约行为,则通知制裁者;制裁者对违约行为进行处理。
7.自由制裁者,相当于提供第三方接口,第三方通过记录在区块链的证据进行裁判。
我们将此模型应用于众筹领域,成功实现了一个应用。合约的存储、触发和执行过程如图6所示。首先,集资者和平台管理员在律师的辅助下填写合约模板,包括生成合约代码,根据自身的需求能借助形式化工具检验代码的正确性、安全性与一致性。集资者与平台管理员对确认无误的代码签名后上传到区块链上存储。用户首先在众筹平台上匹配想要投资的项目,不同的项目回报方式不一样。用户选中项目后,通过平台提供的资金通道对账户充值,对购买请求(包括购买项目的ID、还款日期等)签名后发送到区块链中。如果购买请求被存储在区块链中,则说明用户购买成功,同时用户账户中的资金也会减少,合约账户的资金增加,若资金不足,则拒绝该请求;若集资失败,合约账户的资金会被退回到用户账户;若集资成功,集资者能提取已经集资的钱,同时执行还款计划,对合约账户进行还款。合约账户每天定时被触发还款,扫描需要还款的内容,减少自身的资金,增加对应用户的资金。当合约账户资金不足以执行还款计划的时候,发送警告给集资者与平台管理者,逾期严重的触发违约合约。
智能合约和区块链技术的融合正成为未来数字社会的重要基础设施,是下一代互联网——价值互联网的核心,涉及软件工程、人工智能、计算法律学、数学和形式化方法等交叉融合的综合技术运用。尽管目前还存在很多问题,但我们应该用一种发展的眼光去看待这样一些问题,唯一的检验标准就是实践。■
本文研究受国家自然基金“可扩展私有区块链关键技术探讨研究”(项目编号:61672075)和教育部-中国移动基金“基于区块链的虚拟币系统技术探讨研究和原型系统开发”(项目编号:MCM20160203)的支持。