1.2.2 智能合约的定义、原理与应用场景

比特币的交易是可以编程的,但是比特币脚本有很多限制,能够编写的程序也有限,而以太坊则更加完备(在计算机科学术语中,称它为是图灵完备的),可以像使用任何高级语言一样来编写几乎可以做任何事情的程序(智能合约)。智能合约是代码和数据(状态)的集合,可以理解为在区块链上可以自动执行的(由事件驱动的)、以代码形式编写的合同(特殊的交易)。

智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等。虽然目前除数字货币之外,真正落地的智能合约应用还不多,但相信未来1~3年,各种应用会遍地开花。

“智能合约”这个词其实并不陌生,从其被提出大概已经有几十年的历史。笼统来说,智能合约就是一套以数字形式定义的承诺,合约参与方按规定执行合约上承诺的协议。比如我们常见的自动售货机本质上就可以理解为一个智能合约,通过数字方式来控制合约。智能合约具有动态性和主动执行的属性。

智能合约是指建立一套个人、机构以及财产之间的关系,是一种达成一致性认识的协定。像抵押、产权划分这些操作都可以做成一种智能合约模型来约束人的行为。以我们常见的购买虚拟商品为例,当买家已经购买并完成付款,那么自动售货机制就自动发货。由此可见,只要参与者达成协定,智能合约给予参与方的权利和义务就可以像一台计算机一样自动执行。

从技术层面来说,智能合约的执行机制就像计算机语言的if…then条件判断语句,某一个事件发生了,那么随之而来另一件事就会自动发生;反之,要发生某件事的条件哪怕有一个达不到,这件事也不会发生。在某种意义上智能合约本身也是一个系统参与者,可以对接收到的信息进行回应,也可以接收和存储一些有用信息。

要实现智能合约,首先需要使用计算机语言编写合同中的条款,然后将编写的程序部署到区块链上去执行。从计算机用户的角度来看,智能合约可以限定为更容易理解的智能合约代码。智能合约最早的形式是比特币中的扩展脚本,由于比特币设计之初并没有考虑智能合约,因此这种扩展脚本受到诸多限制,后来以太坊平台设计了合约编程语言Solidity,提供了执行合约的虚拟机,进一步提升了智能合约的表述能力。而Fabric的智能合约直接采用Java、Go这些传统编程语言编写,功能和权限更加强大。由于区块链智能合约在商业上的应用面临法律效力问题,因此现有智能合约一般会在代码中存储一份相应的法律合同文本文件,以应对法律风险。目前,除了法律合同,智能合约已经应用到了更多的场景中,如数字化交易所、供应链、物流等。

1. 智能合约的定义

随着区块链技术的应用和发展,区块链几大关键技术正在快速演进,如共识算法、智能合约、跨链事务、隐私保护等,与用户最相关的是能为用户带来价值的、运行在区块链之上的智能合约。智能合约可以看作一个跨学科的复合名词,合约取自法律上的合同概念,智能指的是能自动执行的计算机程序,智能合约就是能像计算机程序一样自动执行的法律合同。

2. 智能合约的原理

智能合约的实现需要底层协议的支持,这个协议需要考虑诸多因素,具体的执行过程也是基于上文提到的脚本执行过程。以比特币脚本为例,可以在脚本语言中嵌入已经达成一致协定的合约语言来进行智能资产的管理,同时来约束参与方的行为。

基于区块链的智能合约需要同时具有事务处理和保存机制,事务处理无须多言,这是智能合约的根本,保存机制可以让智能合约的执行过程有迹可查。类似于一个完备的状态机,状态机的每个状态以及对于特定事件的响应都保存在区块链中。当一个特定时间的触发条件都满足时,该合约就会自动执行。作为一个事务处理模块,本身不会产生额外的智能合约,也不会对其合约语言进行修改,目的只是让一组复杂的、带有触发条件的、达成一致协定的多种事务自动触发执行,其流程可以简单概括为以下几步。

(1)共识:多方用户或机构共同参与完成一个协定。

(2)上链:上述合约以区块链的形式存入区块链并随全网传播。

(3)执行:合约在区块链上执行并记录。

从比特币到以太坊,区块链架构的演变如图1-8所示。

图1-8 从比特币到以太坊,区块链架构的演变

3. 智能合约的应用场景

从智能合约的定义以及原理来看,生活中能使用智能合约的案例太多,房租租赁、彩票发行、购买保险、遗嘱的设立等都可以采用智能合约的形式来发布。比如房屋租赁的智能合约,只有当租赁者以某种形式签订了租房合同并且提交了房租,智能合约系统就将入住的一些条件提供给租赁者,比如钥匙之类的。当然,这些实现的前提需要通过互联网工具的辅助。设立遗嘱的过程也类似,立遗嘱者事先设定好遗产分配机制,只要达到条件,遗嘱上的事项就自动执行,这样可以免去很多不必要的纠纷。

诚然,智能合约在具体的实施中还依然存在一些问题和挑战,如安全性问题和意外性问题。安全性问题不仅仅是指智能合约的安全问题,同样也是指整个区块链体系的安全问题,因为智能合约的执行需要借助区块链的执行,而区块链的不可逆特性会在一定程度上影响智能合约的执行,比如一个误操作的损失需要用户自己承担。意外性问题指的是智能合约就是一个状态机系统,而一个复杂的状态机,其触发条件以及人们可以想到的那些事务可能会有缺陷,正如计算机程序语言的bug一样,这些都是在事情发生后才可以去解决的,而这种意外的发生也很难完全避免。