基于区块链的智能合约技术研究进展

  • 来源:网络空间安全
  • 关键字:智能合约,语言,运行机制
  • 发布时间:2020-09-29 18:37

  摘 要:智能合约被认为是第二代区块链的技术核心,它是区块链从虚拟货币、金融交易协议到通用工具发展的必然结果。然而,目前智能合约技术尚不完善,对智能合约概念及内涵缺乏较为系统的分析,对基于区块链的智能合约软件系统也缺少体系上的归纳与总结。有鉴于此,文章从智能合约的基本定义入手,介绍了智能合约的发展历史、分类、规范等概念,进而从抽象计算模型角度出发给出了智能合约的通用架构,并对智能合约语言与编译机制、合约部署机制与合约运行过程予以详尽分析,上述结果将有利于把握智能合约未来研究方向。

  关键词:智能合约;语言;框架;部署;运行机制

  中图分类号: TP312 文献标识码:A

  Abstract: Smart contracts are considered to be the technical core of the second-generation blockchain, which is the inevitable result of the development of blockchain from virtual currency, financial transaction protocols to general tools. However, the current smart contract technology is not perfect, and there is a lack of a systematic analysis of the concept and connotation of smart contracts, as well as a systematic induction and summary of the smart contract software system based on blockchain. In view of this, this paper starts with the basic definition of smart contract, introduces the development history, classification, specification and other concepts of smart contract, and then gives the general framework of smart contract from the perspective of abstract computing model. Moreover, we provided a detailed analysis of the smart contract language and compilation mechanism, contract deployment mechanism and contract operation process. The above results will help to grasp the future research direction of smart contracts.

  Key words: smart contracts; language; frame; disposition; operating mechanism

  1 引言

  智能合約(Smart Contract)被认为是第二代区块链的技术核心,它是区块链从虚拟货币、金融交易协议到通用工具发展的必然结果。目前几乎所有的区块链技术公司都已在其产品中支持智能合约产品,例如,以太坊基于虚拟机的智能合约平台、基于Bitcoin区块链的RSK平台、IBM公司提出的企业级HyperLeger Fabric平台等,这些产品的推出极大的丰富了智能合约技术的内涵和范围,为区块链技术在不同领域的现实应用奠定了基础,也代表了区块链未来发展的方向。

  目前智能合约技术尚不完善,对智能合约概念及其内涵缺乏较为系统的介绍,对基于区块链的智能合约软件系统也缺少体系上的归纳与总结。有鉴于此,本文从智能合约的基本概念入手,介绍智能合约的历史、分类、规范等基本概念,进而对智能合约的框架、语言与编译、部署与运行进行阐述。本文研究结果将为相关领域研究提供系统的指导,有利于更好地把握智能合约未来研究方向。

  2 智能合约概念

  合约是特定人之间签订的契约,在生活中随处可见,是一个使未取得彼此信任的各参与方具有安排权利与义务的商定框架。而智能合约在广义上讲是指任何符合多方之间约定的计算机协议。首先,智能合约是一种可由计算机处理的协议,与通常由单台计算机执行的算法不同,它需要两名或多名参与者共同协作来完成计算任务;其次,计算机协议的运行必须满足参与者事先的约定,这既体现了协议遵循的可信性与合规性(或合法性),又体现了为了保证协议合规性所必需的技术手段,包括协议验证、存证、争议解决等[1]。此外,与传统纸质协议相比较,多方协议的计算机化以及相应保障技术的采纳间接体现了智能合约的智能化。

  上述定义较为广泛,几乎能够将所有的计算机协议囊括其中。据此,维基百科中给出了另一个针对法律合约的智能合约定义:“一种旨在以数字方式促进、验证、加强合约协商和履行的计算机协议(Smart contract is a computer protocol intended to digitally facilitate, verify, or enforce the negotiation or performance of a contract)”。这一定义体现了智能合约的对象是法律合约,计算机协议是保障合约协商和履行的手段,该手段的目的是促进、验证、加强合约协商和履行,而数字方式是手段的表现形式。

  (3)智能合约运行环境

  提供一种可信运行环境来运行智能合约代码,包括接收外部发来的可信事件或内部交易,建立可信智能合约运行虚拟机或沙箱,下载相关区块链交易中的合约代码,触发通过执行机构和指令系统执行合约代码对事件或交易进行响应,并将输出结果以交易方式写入区块链。

  随着智能合约技术的发展,已经出现越来越多的工具辅助智能合约完成程序设计、代码生成、部署与执行等功能,也使得智能合约构架日趋完善。

  5 智能合约运行机理

  为了更好地理解智能合约的原理,下面将分别对智能合约语言与编译、智能合约的区块链部署、以及合约代码运行的机理分别加以介绍。

  5.1 智能合约语言与编译机制

  智能合约语言是现实应用中各种业务与智能合约平台之间的中介,也是帮助智能合约的使用者快速生成智能合约程序和代码的重要工具[9]。各智能合约平台都已推出自己的智能合约语言,例如,比特币使用较为底层的栈式脚本语言、以太坊的智能合约目前支持Serpent和Solidity两种编程语言(Serpent类似于Python语言,而Solidity类似于JavaScript语言)、超级账本支持如Go、Java等语言直接编写;此外,其它平台也以传统编程语言(如C、C++、Java)基础上给出了智能合约开发工具。从语言形式和运行环境上讲,目前的智能合约可分为三类。

  (1)脚本型智能合约:通过区块链中定义好的脚本指令和栈式类Forth语言完成基本的计算与条件控制,例如,比特币脚本系统。

  (2)通用型智能合约:其语言直接采用传统程序语言,部署在虚拟机(VM)或容器(Docker)里,通过规定好的接口与区块链进行交互。例如,超级账本平台中的链码采用Java、Go等语言,Neo平台支持将C#、Java和Python等多种语言编译为NeoVM支持的指令集。

  (3)专用型智能合约:模仿传统程序语言并添加了与区块链交互的特殊元素,如以太坊的Solidity语言,同时该语言含有gas计费等特殊功能。

  智能合约是一个跨学科的概念,涉及商业、金融、合同法和信息技术,设计和开发智能合约也需要来自不同领域的专家的密切合作。然而,上述三种智能合约仍然建立在计算机编程语言基础上,对于非计算机专业人员依然难以理解和掌握。

  针对这一问题,近年来一种被称为高级智能合约语言已引起学术界的广泛关注,例如,面向现实合约的智能合约描述语言(SPESC)[10]。这种语言以现实合约的语法结构为基础,采用近似自然语言的形式进行编写,明确定义了当事人的义务和权利,以及加密货币的交易规则,便于法律人士与计算机人员协作合约开发,对于促进智能合约的专业性、易用性、可理解性,以及协作开发等方面能力有重要意义。

  5.2 智能合约的区块链部署

  区块链是智能合约得以实施的基础,智能合约的自动化执行、运行结果的有效性,以及合约代码的安全都依赖于区块链[11],因此智能合约与区块链的有效结合与部署成为智能合约实施的关键[12~13]。为了便于被理解和掌握,智能合约通常将区块链转化为几个抽象概念:共享数据库、交易和区块。下面将分别对其进行介绍。

  首先,区块链对智能合约而言可被视为全球共享的交易数据库,其中,交易被用来描述每一次通过智能合约语言接口执行的行为。全球共享则意味着每个人都可以通过智能合约网络接口来读取交易数据库中存储的条目。

  其次,交易可理解为更改共享数据库中某些内容的行为,而且保证该行为必须被数据库网络中其它参与方所接受。后者也被称为“all-or-nothing”原则,如果交易要同时更改两个值,要么根本没有完成,要么完成所有修改。此外,在将交易完成后,没有其它交易可以更改这一过程。

  再次,交易从安全性来看始终需要由发起方(创建者)进行签名,这可保护访问共享数据库的特定修改必须经过授权。从已有的数字货币交易可知,签名机制可保证简单的检查即可确保只有持有该账户密钥的人才能从该账户中转移资金。

  此外,智能合约所生成的交易将被捆绑到一个所谓的“区块”中,然后将它被分发到共享数据库的所有参与节点。如果两笔交易相互矛盾,那么最后一笔交易将被拒绝,并且不会成为交易的一部分,因此,区块被理解在时间上形成线性关系的存储单元,并为智能合约选择一个全球公认的交易顺序,以解决冲突。总之,区块链为智能合约提供了一种安全和一致性的共享交易数据库。

  最后,对于智能合约的使用者和编程人员而言,当前智能合约平台已经能够屏蔽掉区块链中的很多技术细节,使得区块链中的各种复杂机制(哈希、对等网络、共识、挖矿等)变成了智能合约平台提供的承诺。因此,开发和使用人员只需要关注自己的业务需求,充分利用智能合约平台提供的部署工具,而不需要考虑如何将智能合约执行代码转化为区块链数据的具体实现。

  5.3 合約代码运行

  当满足触发条件时,被部署在区块链上的智能合约代码将被区块链系统自动执行,并依照合约规定完成各种资产的转移。这一过程需要货币激励、执行机构、指令系统和触发条件等机制相互协调,才能保证合约代码自动和无差错地被执行。

  首先,奖励机制是合约代码执行的必备条件,原因在于智能合约代码是在区块链节点内(虚拟机、容器等)被执行的,必然带来存储、计算、带宽等方面的开销,因此需要智能合约发布者预付一定量的货币(如以太网gas)作为奖励。如果预付金额太小了,不足以执行所有的操作,那么操作就会失败,状态将会回滚。

  其次,执行机构是指智能合约代码运行的环境,目前主要有脚本、容器、虚拟机等三种运行方式,具体特征为:

  (1)脚本(Script)方式

  最早在比特币系统中被采用,是一种类似Forth语言的指令体系,由脚本解释器解释执行,用于验证该笔交易的合法性。交易一般会包括输入脚本和输出脚本两个部分,分别用于解锁上一笔交易的输出以及设置该笔交易金额的解锁条件。

  (2)容器(Docker)方式

  是不同于虚拟机的一种新型虚拟化技术,它只需要将智能合约所需要的依赖软件打包即可独立运行,而不需要一个附加的虚拟操作系统环境。它比虚拟机方式更为独立和灵活,可调用的资源也更多。Hyperledger Fabric是典型使用容器方式的智能合约平台。

  (3)虚拟机(VM)方式

  它通过在用户程序和底层环境中增加的一层中间环境,提供一个完全对底层透明的执行环境:屏蔽区块链节点自身执行环境的区别,在所有节点上运行均一致。它按照执行方式分为两种:基于栈(Stack)和基于寄存器(Register)的虚拟机,其中,基于栈的虚拟机是目前实现智能合约最多的方式,也演化出多种智能合约运行方法。

  此外,指令系统在智能合约中也是较重要的概念。指令是智能合约发给运行环境的命令,智能合约的执行代码是由一系列的指令组成的,而指令系统是智能合约运行环境提供的语言系统,是全部指令的集合,反映了运行环境所拥有的基本功能。因此,智能合约指令系统是由所采用的运行方式决定的。

  最后,智能合约代码中预置了合约条款的相应触发场景和响应规则,运行环境需要根据可信外部事件和内部交易状态,自动地判断当前所处场景是否满足合约触发条件,严格执行响应规则并向区块链发送更新合约状态的交易,经共识算法认证后链接到区块链中,使更新生效。

  6 结束语

  智能合约作为普遍认为的“第二代区块链技术”,任何人都可接入其中,不需要事先审查或者预付成本,又可以移除经济交易中对第三方机构的信任必要。本文对智能合约的研究进展进行了归纳总结,介绍了智能合约的发展历史以及基本概念、并详细阐述了智能合约语言现有的分类和不同的编译机制、智能合约在区块链上的部署方式以及运行机制。

  目前几乎所有的区块链技术公司都已在其产品中支持智能合约产品,例如,以太坊基于虚拟机的智能合约平台、基于Bitcoin区块链的RSK平台、IBM公司提出的企业级HyperLeger Fabric平台等。这些产品的推出极大的丰富了智能合约技术的内涵和范围,为区块链技术在不同领域的现实应用奠定了基础,也代表了区块链未来发展的方向。但同时智能合约跨领域合作、标准统一、法律化结合等多个研究方向都尚不完善,这些问题的存在囿限着智能合约的市场普及和应用广度,是现在智能合约研究极具挑战性的方向。

  基金项目:

  1.国家科技部重点研发计划(项目编号:2018YFB1402702);

  2.国家自然科学基金(项目编号:61972032)。

  朱岩 王静 郭倩 刘国伟

关注读览天下微信, 100万篇深度好文, 等你来看……