摘要随着以比特币为代表的区块链技术的蓬勃发展,区块链技术已经开始逐步超越可编程货币时代而进入智能合约时代.智能合约(smartcontract)是一种由事件驱动的、具有状态的代码合约和算法合同,随着区块链技术的深入发展而受到广泛关注和研究.智能合约利用协议和用户接口完成合约过程的所有步骤,允许用户在区块链上实现个性化的代码逻辑.基于区块链的智能合约技术具有去中心化、自治化、可观察、可验证、可信息共享等特点,可以有效构建可编程金融和可编程社会,广泛应用于数字支付、金融资产处置、多重签名合约、云计算、物联网、共享经济等多个领域.首先阐述了智能合约技术的基本概念、全生命周期、基本分类、基本架构、关键技术、发展现状以及智能合约的主要技术平台;然后探讨了智能合约技术的应用场景以及发展中所存在的问题;最后,基于智能合约的理论知识,搭建了以太坊实验环境并开发了一个众筹智能合约系统,旨在为基于区块链的智能合约技术的研究与发展提供参考与借鉴.
关键词智能合约;区块链;以太坊;分布式应用;形式化方法;众筹合约
区块链是比特币的基础支撑技术,随着近年来比特币的快速发展与普及,引起了多方的广泛关注.2016年1月,英国政府发布区块链专题研究报告[1];同年12月,中国政府将区块链技术列入《“十三五”国家信息化规划》[2],旨在加强新技术的基础研发和前沿布局.区块链被认为是继大型机、个人电脑、互联网、移动社交网络之后的第五次颠覆式创新,是人类信用进化史上继血亲信用、贵金属信用、央行纸币信用后的第4个里程碑[3].
区块链技术的应用发展有3个阶段:1)区块链1.0,即可编程货币,如比特币;2)区块链2.0,即可编程金融[3],其中智能合约是其代表性应用;3)区块链3.0,即可编程社会,如去中心化应用(decentralizedapplication)、去中心化自组织(decentralizedauto-nomousorganization)[4-5].目前,区块链已经开始超越区块链1.0时代,进入到区块链1.5时代,并向可编程金融,即智能合约时代过渡.
2016年以来,以以太坊(Ethereum)[6]为代表的智能合约技术成为各界关注的热点,引起了政府部门、金融机构、科技企业的广泛关注.2016年12月,首届智能合约专题研讨会在微软纽约市总部举行,分析与探讨了智能合约的应用场景.2017年2月,欧洲议会在《区块链如何改变我们的生活》[7]报告中指出,智能合约技术是最具潜力的区块链应用;同月,企业以太坊联盟(EnterpriseEthereumAlliance)成立,致力于将以太坊开发成企业级区块链,其成员既有摩根大通、荷兰银行等大型金融机构,也有微软、Intel等科技企业.
“智能合约”(smartcontract)的概念产生于1995年,由密码学家Szabo[8]首次提出,他指出“智能合约通过使用协议和用户接口来促进合约的执行”.从本质上讲,智能合约是由事件驱动的、具备状态的、部署于可共享的分布式数据库上的计算机程序,现存智能合约的工作原理类似于其他计算机程序的If-Then语句[9].智能合约只是以这种方式与真实世界的资产进行交互.当一个预先设定的条件被触发时,智能合约执行相应的合同条款.
推荐阅读:区块链技术论文容易成功发表吗
区块链是目前很受欢迎的一项技术,它本质上是一个共享数据库,应用于各个行业。随着对区块边技术的研究不断深入,区块链技术方面的论文也越来越多。那区块链技术论文怎么发表?容易成功发表吗?本文我们一起来看看。
Szabo指出,计算机在某一天可以代替人力、机械设备等进行更加复杂的数字资产交易.未来的某一天,这些自动执行的程序可能取代某些处理特定金融交易的专家或机构.智能合约的发展虽然处于初级阶段,但其潜能显而易见,它将合约参与者、合约协议以及参与者与协议之间的复杂关系程序化了.目前基于区块链的智能合约技术的发展呈现出技术产业创新驱动的态势,但在学术方面的研究相对滞后,截至2017年7月,以万方知识服务平台为中文数据源,以EIVillage为英文数据源的检索显示,目前标题包含“智能合约/smartcontract”且与区块链技术相关的学术论文仅有中文9篇和英文27篇.
本文的内容有6方面:1)简要介绍了智能合约的底层技术基础———区块链技术,概述了智能合约的定义、全生命周期、优点及分类;2)凝练总结了智能合约的基本架构、关键技术;3)简要介绍了智能合约的主要技术平台;4)阐述了智能合约的发展现状与应用场景;5)概要总结了智能合约现存的问题并搭建了以太坊实验环境,开发了一个众筹智能合约系统;6)总结与展望..
1智能合约背景知识
1.1区块链技术简介
区块链技术起源于2008年,由一位化名为“中本聪”(SatoshiNakamoto)的学者提出,其在文献中所描述的区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构,并以密码学方式保证的不篡改和不可伪造的去中心化共享总账(decentralizedsharedledger)[10].比特币是最早的区块链应用场景,其本质是由基于区块链技术的分布式网络利用密码学算法生成的数字加密货币.数字加密货币领域一直面临着两大难题:双重支付问题和拜占庭将军问题(Byzantinegeneralsproblem)[11].而区块链技术的出现,为解决这两大难题提供了有效的途径.双重支付问题是指用“同一笔钱”在两次或多次交易中完成支付.拜占庭将军问题是指在缺少可信任中心节点的情况下,分布式系统如何达成共识和建立互信的问题[12].区块链技术,在不需要第三方信用机构的前提下,通过分布式数据库、数字加密技术和独特的共识算法解决了去中心化系统的双重支付问题,实现了一个无需信任单个节点的去中心化的可信任系统.区块链的共识算法的理论基础是拜占庭容错(Byzantinefaulttolerant,BFT).常见的共识算法有工作量证明(proofofwork,PoW)[13]、权益证明(proofofstake,PoS)[14]、授权权益证明(delegatedproofofstake,DPoS)[15]、实用拜占庭容错(practicalByzantinefaulttolerance,PBFT)[16]、授权拜占庭容错(delegatedByzantinefaulttolerance,DBFT)[17]等.
狭义的区块链是去中心化系统中各节点共享的数据账本,区块结构如图1所示,每个区块分为区块头和区块体两部分,涉及链式结构、Hash算法、Merkle树和时间戳等技术要素[18].
区块链技术的本质是它在网络空间建立了一种分布式的一致性标准,对所有的数字事件在分布式数据库上创建确切的无法篡改的记录并且使得区块链中的所有参与方都能确切、可信地了解所发生的数字事件.
区块链技术出现后,其去中心化、去信任、规则透明、集体维护、不可篡改等特性,恰好为智能合约提供了安全可靠的记录载体和执行环境.首先,区块链技术采用纯数学的方法,在不牺牲隐私性,也无需第三方信用机构参与的条件下,可以对所有过去、当前的数字事件(如行为、资产等),建立分布式的一致性表达[19].其次,区块链提供了可供用户进行编程的脚本系统,进一步增强了区块链应用的灵活性,如在以太坊中,具备图灵完备、功能强大的脚本系统,使得基于智能合约的更为高级的分布式应用得以实现.
1.2智能合约概述
智能合约有许多非形式化的定义,Szabo[8]创造性地提出,“智能合约就是执行合约条款的可计算交易协议”;以太坊的智能合约是基于区块链的数字资产控制程序[6].狭义来讲,智能合约是涉及相关商业逻辑和算法的程序代码,把人、法律协议和网络之间的复杂关系程序化了.广义来讲,智能合约是一种计算机协议,一旦部署就能实现自我执行和自我验证,已经不仅仅局限于金融领域,并且在分布式计算、物联网等领域都有广阔的应用前景.
类似于传统合约,智能合约全生命周期包括:合约生成、合约发布、合约执行3个部分,如图2所示:
合约生成,主要包含合约多方协商、制定合约规范、进行合约验证、获得合约代码4个环节.具体实现过程为:由合约参与方进行协商,明确各方的权利与义务,确定标准合约文本并将文本程序化,经验证后获得标准合约代码.其中涉及2个重要环节:合约规范和合约验证.合约规范需要由具备相关领域专业知识的专家和合约方进行协商制定.合约验证在基于系统抽象模型的虚拟机上进行,它是关乎到合约执行过程安全性的重要环节,必须保证合约代码和合约文本的一致性.
合约发布与交易发布类似,经签名后的合约通过P2P的方式分发至每一个节点,每个节点会将收到的合约暂存在内存中并等待进行共识.共识过程的实现:每个节点会将最近一段时间内暂存的合约打包成一个合约集合,并计算出该集合的Hash值,最后将这个合约集合的Hash值组装成一个区块并扩散至全网的其他节点;收到该区块的节点会将其中保存的Hash值与自己保存的合约集合的Hash值进行比较验证;通过多轮的发送与比较,所有节点最终会对新发布的合约达成共识,并且达成共识的合约集合以区块的形式扩散至全网各节点,如图3所示.其中每个区块包含以下信息:当前区块的Hash值、前一区块的Hash值、时间戳、合约数据以及其他描述信息.
智能合约的执行是基于“事件触发”机制的.基于区块链的智能合约都包含事务处理和保存机制以及一个完备的状态机,用于接受和处理各种智能合约.智能合约会定期遍历每个合约的状态机和触发条件,将满足触发条件的合约推送至待验证队列.待验证的合约会扩散至每一个节点,与普通区块链交易一样,节点会首先进行签名验证,以确保合约的有效性,验证通过的合约经过共识后便会成功执行.整个合约的处理过程都由区块链底层内置的智能合约系统自动完成,公开透明,不可篡改.
智能合约的实现,本质上是通过赋予对象(如资产、市场、系统、行为等)数字特性,即将对象程序化并部署在区块链上,成为全网共享的资源,再通过外部事件触发合约的自动生成与执行,进而改变区块链网络中数字对象的状态(如分配、转移)和数值.智能合约可以实现主动或被动的接受、存储、执行和发送数据,以及调用智能合约,以此实现控制和管理链上数字对象.目前已经出现的智能合约技术平台,如以太坊、Hyperledger等,具备图灵完备的开发脚本语言,使得区块链能够支持更多的金融和社会系统的智能合约应用.
现今,虽然智能合约尚未得到广泛应用,但其技术优点已经得到研究人员的广泛认可.总体来说,智能合约具有7个优点:
1)确定性.智能合约在不同的计算机或者在同一台计算机上的不同时刻多次运行,对于相同的输入能够保证产生相同的输出.对于区块链上的智能合约,确定性是必然要求,因为非确定性的合约可能会破坏系统的一致性.
2)一致性.智能合约应与现行合约文本一致,必须经过具备专业知识的人士制定审核,不与现行法律冲突,具有法律效应[20].
3)可终止性.智能合约能在有限的时间内运行结束.区块链上的智能合约保证可终止性的途径有非图灵完备(如比特币)、计价器(如以太坊)、计时器(如HyperledgerFabric)等.
4)可观察和可验证性.智能合约通过区块链技术的数字签名和时间戳,保证合约的不可篡改性和可溯源性.合约方都能通过一定的交互方式来观察合约本身及其所有状态、执行记录等,并且执行过程是可验证的.
5)去中心化.智能合约的所有条款和执行过程都是预先制定好的,一旦部署运行,合约中的任何一方都不能单方面修改合约内容以及干预合约的执行.同时,合约的监督和仲裁都由计算机根据预先制定的规则来完成,大大降低了人为干预风险.
6)高效性和实时性.智能合约无需第三方中心机构的参与,能自动地实时响应客户需求,大大提升了服务效率.
7)低成本.智能合约自我执行和自我验证的特征,使其能够大大降低合约执行、裁决和强制执行所产生的人力、物力成本.
就当前发展而言,以区块链技术为基础的智能合约大致分为3类:1)“Chaincode”,即常说的链上代码,如金融活动由交换数据变为交换代码;2)“智能法律合约”,包括不同方面所产生的权利和义务,并且在法律上可执行,通常以复杂的法律文本来表达,不仅涵盖个人行为,还可能涉及时间依赖和次序依赖等一系列依赖关系,例如PrimaveradeFilippi加密账本交易法律框架[21],用链上智能合约来补充或代替现有法律合同,成为智能合约代码和传统法律语言的结合;3)“智能应用合约”,即在区块链上部署基于智能合约的分布式链上应用,创建有商业价值的全新合约形式,如M2M(机器对机器)商业模式.Fig.4Basicframeworkofthesmartcontract图4智能合约基本架构
2智能合约基本架构与关键技术
智能合约基本架构如图4所示.总体来说,区块链智能合约包含数据层、传输层、智能合约主体、验证层、执行层以及合约之上的应用层这6个要素.数据层包括链上数据和链下数据,它们是智能合约运行的必要数据源.传输层则封装了用于支持“链上-链上”和“链上-链下”进行通信、数据传输的协议.智能合约主体包括协议和参数.验证层主要包含一些验证算法,用于保证合约代码和合约文本的一致性.执行层主要封装了智能合约运行环境的相关软件.应用层则是基于前5个要素的基础产生的相对高级的各种应用,它主要是为智能合约与其他计算机、应用程序通信服务的.本节将从智能合约主体、数据加载方式、执行环境、验证方法和扩展性的实现5个方面探讨智能合约的关键技术.
2.1合约主体
智能合约主体为基于标准化的合约应用提供了复杂的协议框架,可以通过识别智能合约的关键参数来识别合约的行为和状态.智能合约主体主要包括协议和参数2个部分:
1)协议是由标准机构发布的合法文本的程序化描述[22].协议包括合法的标准文本和标准参数,其中每个参数都有一个标识,分别代表一种类型.可以说,协议是一个完全实例化的模板.
2)参数包括业务逻辑模块(主要参数)和各种附件模块,如数据管理模块、用户管理模块、合约管理模块等.业务逻辑模块包括定制的合法文本和参数,是对应用领域专业知识的程序化描述,由合约参与方协商产生,涉及多方的权利与义务.业务逻辑模块的合法文本和参数来自协议部分的标准文本和参数,但根据应用场景而有所不同.附件模块在业务逻辑的基础上,结合具体应用场景的需要,实现对智能合约的补充和完善.数据管理模块,封装了实现数据接收、暂存、计算、清除等功能的代码程序;用户管理模块,主要实现了合约用户的权限管理、安全认证、信誉管理等功能;合约管理模块,主要功能是当合约被调用时,结合用户需求,实现合约的生成、验证发布、部署执行、状态查询以及风险处理等功能.各模块根据应用需求,可以定制子协议和子标准,如计算安全标准、风险预警标准、模块交互协议等.所有参数都是合约的关键部分,因为它们不仅直接反映了各方之间的业务关系而且影响合约的自动执行.
2.2数据加载方式
数据层包括状态数据、交易数据、合约代码、应用数据等,出于可观察和可验证的目的,状态数据和交易数据一般都采用链上存储方式.应用数据和合约代码的加载方式则分为链上和链下2种.目前绝大多数区块链系统均采用链上方式,将代码和应用数据发布到链上,然后再从链上加载数据和代码并执行,其缺点是代码和应用数据将永久地存在于区块链中,不利于更新维护,占用节点存储资源,随着时间的积累将带来巨大的存储负担.链下方式是指将智能合约的散列值存储于链上,并通过以散列值为索引的存储网络或可信赖的数据源来保存完整的合约代码,如IPFS(interplanetartfilesystem)系统、TowerCrier平台[23].散列值是由合约代码内容计算而得,这样既可以保证合约的不可篡改性,又可以节约节点大量的存储空间和加强合约的隐私性.
2.3执行环境
目前主流的智能合约执行环境的设计主要分为2种:虚拟机和容器(docker).无论是虚拟机还是容器,它们的作用都是在一个沙箱中执行合约代码,并对合约所使用的资源进行隔离和限制.虚拟机通常是指通过软件模拟的具备完整硬件功能的、能像真实机器一样执行程序的计算机的软件实现,如VMware.出于降低资源开销、提升性能和兼容性的目的,绝大多数区块链会采用轻量级的虚拟机结构,如以太坊虚拟机(Ethereumvirtualmachine,EVM).
容器通常是指借助容器引擎,让开发者可以打包其应用以及依赖包到一个可移植的容器中,也可以实现虚拟化.容器使用沙箱机制,相互之间不会有任何接口,如HyperledgerFabric使用Docker作为智能合约的执行环境.Docker本身没有采用虚拟化技术,程序是直接运行在底层操作系统上,代码执行的效率很高.但与轻量级虚拟机相比,其过于庞大的架构,使得部署和启动Docker本身需要消耗大量的时间和计算资源.
我们在1.2节已经提到,智能合约本质上是区块链上可执行的代码,那么在智能合约的执行过程中,我们需要关注2个问题,即指令的执行速度和运行环境的启动速度.对于智能合约而言,运行环境的启动速度比指令的执行速度更加重要[24].这是因为,针对轻量化的虚拟机或容器,智能合约的代码中很少会涉及到IO相关的指令,所以这些指令代码易于优化.而智能合约的每次调用,都必须在一个新的虚拟机或容器中进行,因此运行环境启动时间对整个智能合约系统影响较大.
2.4验证方法
智能合约是对某领域专业知识的程序语言描述,对合约所涉及的核心利益(如资产)的安全性、合约代码的逻辑正确性有了更高的要求,必须保证合约文本与合约代码的一致性,合约验证是保证这些要求的重要途径.目前,形式化验证是智能合约领域的主流验证方式.形式化方法是基于数学的描述和推理计算机系统性质的技术,常用于软件的规范、开发和验证[25].形式化方法主要包括形式归约和形式验证.形式验证是建立在形式归约的基础上,验证已有程序是否满足其归约要求[26].目前常见的形式验证方法主要有2种:演绎验证和模型检测.演绎验证是基于定理证明的思想,采用逻辑公式描述系统,优点是可以处理无限状态的问题但做不到完全自动化,如STeP.模型检测是基于状态搜索的思想,主要针对有穷状态系统,如SPIN.模型检测可以实现完全自动化,并且在验证性质得不到满足时,搜索终止可以给出反例,这种信息往往反映了系统设计中的错误.
智能合约的形式化验证主要包括4个部分:代码生成、形式化描述、形式化验证和一致性测试.代码生成,是指用编程语言对合约文本进行程序化描述.形式化描述,是指通过建模语言和建模工具对形式化合约文档进行建模[27].一致性测试强调被测系统与给定标准的一致性,通过测试的合约代码实现的外部特性与标准合约文本一致[28].形式化验证法可以检查智能合约的很多属性,如可达性、公平性、死锁等.将形式化验证法应用于智能合约,使得合约的生成和执行有了规范性约束,保证了合约的可信性.
* 稍后学术顾问联系您