区块链智能合约技术研究综述

2023-09-20 10:36汪永菊杜秀娟陈浩章
计算机仿真 2023年8期
关键词:以太编程语言账本

汪永菊,杜秀娟,2,3,陈浩章

(1. 青海师范大学计算机学院,青海 西宁 810008;2. 藏语智能信息处理及应用国家重点实验室,青海 西宁 810008;3. 高原科学与可持续发展研究院,青海 西宁 810008)

1 引言

随着比特币数字货币的发展,区块链吸引了众多业界人士及社会各领域关注,区块链为智能合约提供安全可信的环境[1],智能合约为其提供灵活的编程特性。在1994年,智能合约的概念由Nick Szbao提出,并定义为“一套以数字形式指出的承诺,包括合约参与方可以在上面执行这些承诺的协议”[2]。目前,智能合约并没有一个可以公认的定义[3]。由袁勇、王飞跃所著的“区块链理论与方法”一书中指出,广义的智能合约定义为无需中介、自我验证、自动执行合约条款的计算机交易协议[3]。

智能合约[3]就是在双方或参与者在互不了解、互不信任且没有可信第三方的权威机构下,对合约条款达成共识,实现智能合约的可编程特性[4]。

2 区块链概述

2008年,中本聪公开发表了”Bitcoin:A Peer-to-Peer Electronic Cash System”[5],提出了P2P网络、非对称加密技术、时间戳、共识算法的电子现金系统的架构理念,以下是区块链的发展历程:

1)区块链1.0--比特币代表区块链1.0,实现了跨境支付、可编程货币,对传统金融市场造成了巨大冲击。因此,区块链1.0称为可编程货币阶段[6]。

2)区块链2.0--第一次尝试将区块链技术和现实产业相结合,将其应用于金融、经济领域。以太坊是区块链2.0。因此,区块链2.0称为可编程金融阶段[6]。

3)区块链3.0--将区块链从数字货币应用到金融、医疗、物联网等社会的诸多领域,其目的是实现可编程社会。因此,区块链3.0称为可编程社会阶段[6]。

区块链是用时间顺序将数据区块进行连接并将数据存储在主链上的一种分布式数据库[3],在区块链系统中用密码学技术实现了数据不被篡改、利用共识机制达成共识,同时使用智能合约实现自动化的编程,并由各节点共享且共同维护的分布式数据账本[3]。

3 智能合约

智能合约的概念在区块链出现之前就被提出,但直到区块链的出现为智能合约的发展提供了条件。

智能合约(Smart Contracts)是将合约内容通过算法和程序的方式编写为代码并在区块链上进行部署[1],一旦满足了提前制定的规则中的条件,代码将会自动执行而且不需要人为的对代码进行任何的操作[1]。因受到计算场景等因素限制,智能合约得不到应用,但区块链的发展给智能合约提供了新的涵义[3]。此外智能合约包括自动执行、安全灵活等优点[7]。

4 智能合约的主要开发平台

目前比较成熟的智能合约技术平台主要有以太坊(Ethereum)[8]和超级账本(Hyperledger Fabric)[9]。朱岩[10]等人从语言形式和运行环境将智能合约分为脚本型、通用型和专用型等三种不同的智能合约,简要阐述了不同技术平台使用的编程语言不同。本文将从编程语言和执行环境等方面介绍比特币脚本、以太坊平台和超级账本。

4.1 比特币脚本

比特币(Bitcoin)交易脚本语言可简称为(Script),是一种类似Forth语言的指令体系[10]。它是非图灵完备的语言且处理简单的交易脚本[11],为了解决存在的漏洞及攻击问题,比特币脚本中没有设计循环等较为复杂的控制流[3],只实现基本的算法、逻辑运算及验证加密功能。

比特币脚本语言能够保证交易的安全,却仅限于数字货币领域,它可看做是智能合约的雏形,并不能作为智能合约未来的发展方向[12]。

4.2 以太坊平台

4.2.1 以太坊

以太坊是一个开源平台项目[4],以太坊智能合约就是以太坊上的一种程序。按以下智能合约模型,将合约部署在区块链上,将有用的价值和状态存储在区块链创建的共享账本上[1],以太坊是基于账户的模型,包括外部账户和合约账户[12],外部账户用来创建交易,合约账户不能创建交易,但可以完成信息创建的过程。智能合约的调用过程是将其它合约发来的交易借助外部账户发送到合约账户的这一过程,当接收到外部发来的事件和其他账户发来的交易时,满足预定条件可激活智能合约,并对其进行回应,可以通过发送交易来发出价值或通过发送事件来传递信息[10],如图1。

图1 智能合约模型

在合约运行时,因CPU和内存会占据存储空间因而会消耗一定的燃料费(Gas),而燃料费是用以太币进行兑换的,如果Gas消耗完,合约将停止运行,已经消耗的Gas不会返回,可防止运行过程出现死循环。

4.2.2 以太坊编程语言

在以太坊中使用的编程语言分为Serpent和Solidty两种[6]。Serpent类似于Python[10],语法简单便于掌握,在以太坊智能合约中主要使用Solidty语言完成合约的编写,它与JavaScript语言类似[10],且更具安全性。Solidty是面向对象的弱类型语言,也是图灵完备的语言[13]。在合约的编写过程中是不可直接用EVM语言(Ethereum Virtual Machine Code),而是使用Serpent和Solidty等编程语言,用编译器编译为EVM语言后才可以使用[13]。

4.2.3 以太坊执行环境

以太坊智能合约是在以太坊虚拟机(Ethereum Virtual Machine,EVM)[1]中执行,它属于隔离的沙箱环境,并在以太坊虚拟机内部来完成合约代码的执行过程[14],以太坊使用的虚拟机是属于轻量级的,使用过程中可消耗较低的能源[14]。

将合约部署到以太坊网络上便可运行。任何人都能对合约内容进行访问,因为它是全网公开的,其状态信息和价值也是公开的。

4.3 超级账本

根据比特币和以太坊等全球共享的公有链的成功经验及企业需求[6],业界推出了适用于企业级的应用平台。2015年超级账本成为开源项目并交给Linux进行维护[15],Fabric是Hyperledger的一个子项目[1],超级账本是指只有允许的商业联盟或组织才能参与其中并进行维护。

4.3.1 链码

超级账本的智能合约称为链码(Chaincode)[16],它可用于交易并进行状态数据的访问,在对合约进行编写时使用了Init和Invoke两个函数[17],Init函数是对状态进行初始化的一个过程,而Invoke函数是对数据进行读写操作[17]。

4.3.2 超级账本编程语言

Hyperledger Fabric使用Go、Java、Node.js语言来编写合约[12],编程语言也是图灵完备的,同时降低了学习者对编程语言的要求,便于被更多的人掌握,主要是用于满足商业级的业务需求和实际应用。

4.3.3 超级账本执行环境

超级账本是在Docker容器中执行,也是轻量级的,并且容器是属于隔离的沙箱环境,可以减少恶意合约对宿主机产生攻击的行为,也不会对容器之间产生影响[6]。

4.4 智能合约平台的对比分析

从执行环境、编程语言、区别、准入机制、数据模型、共识算法、底层数据库、图灵完备性等方面对比特币、以太坊和超级账本作对比分析,见表1。

表1 智能合约开发平台对比

5 智能合约的典型应用领域

智能合约最先是在无人自动售货机中进行使用[12]。用户将足额硬币投入售货机来获得相应的商品,完成一次交易。最初Nick Szbao根据无人自动售货机提出了智能合约的概念,将其作为一个简单版本的智能合约,即向售货机中投入硬币获得商品的方式,自动控制程序完成交易。

智能合约的应用场景广泛,可以运用于各类金融资产、物联网、医疗、供应链、保险、身份认证等诸多领域。本文从金融、医疗、物联网、供应链管理等四个主要领域介绍智能合约的应用场景。

5.1 金融

智能合约在金融行业的作用比较突出,胡启磊[18]研究发现,智能合约技术使得金融交易数字化,执行过程中实现合同的自动化、智能化,节省附加的时间和人工成本,提高交易过程中的透明度,确保各类金融交易安全;李九斤[19]等人研究发现,智能合约可简化金融交易流程,提供更高效和标准的金融服务。

智能合约还可以应用于抵押贷款,通过智能合约实现自动化付款及在付款后可查询抵押记录及简化付款跟踪,与传统人工处理相比,提高处理效率,减少误差并降低交易成本;智能合约在金融领域的关注度和投入度比其 它行业更多,智能合约的在金融行业的应用具有更大的发挥潜能,但是需要进一步关注法律及技术方面问题,比如数据隐私方面的保护。

5.2 医疗

医疗行业目前是一个全球关注的行业,也是各国政府进行大量财力和物力投资优化的行业,将智能合约技术和医疗行业相结合,能够更深入地为医疗领域的工作者提供安全、稳定的大数据分析及医疗知识学习与分析等服务,更好的解决医疗数据的信息孤岛问题。因此,将智能合约运用在医疗领域,可保证数据安全及患者隐私。文献[20,21]研究发现,基于区块链智能合约可实现对不同医疗区块链平台数据的访问控制,并实现不同医疗机构之间对患者隐私的保护、数据整合和信息共享的过程,还保障了医疗数据的权威及可信性,为医疗人员提供了更便利及智能的服务,能够更好地保护在不同医疗系统之间医疗数据的安全及隐私泄露等问题。

5.3 物联网

物联网是将位于不同时间、不同地方的物与物、人与设备、设备与设备之间通过网络进行连接且进行信息交换和通信,将识别、追踪、监控等诸多功能综合而成的一种继互联网后迅速发展的信息技术,广泛用于智慧城市、智慧交通、智能医疗等诸多领域。对物联网存在的安全问题,陈亚茹[22]提出了一种区块链智能合约技术的物联网模型,从认证与访问控制、数据安全及建构安全网络架构三方面进行分析,结合区块链的去中心化、安全可信等特性,提出的架构具有提高数据传输安全、降低数据传输成本及隐私保护等优势;文献[23,24]中将区块链智能合约技术和物联网相结合,利用智能合约实现物联网复杂流程,更好的解决了分布式网络中的不信任问题,保证安全并提高合约的可靠性,实现资源共享。

5.4 供应链管理

供应链管理是指在实现一定供应链效益的前提下,对来自不同实体的参与者进行有效组织管理并达到最小的供应链成本[25]。将智能合约运用在供应链中可提高整个供应链系统的信息透明度和追溯性[25]。田阳[25]等人对区块链在供应链管理中的应用进行系统化分析,通过对农业、食品、医疗及工业供应链等四个不同行业作对比分析并阐述区块链智能合约技术在不同行业的解决方案,提高了供应链过程中数据透明性,同时也更好的解决了参与方存在的信任问题;李剑[26]等人设计了一种可以用区块链进行驱动的供应链协同减排信息共享机制,而信息不对称是阻碍供应链多主体协同减排的主要因素,所以提出了使用“区块链+协同减排”三位一体信息共享机制来增强供应链效益。三位是指生产商、供应商和消费者,一体是区块链。

6 结论

区块链的不可篡改及可追溯等特性为智能合约的实现提供了条件,智能合约也会被更多的人熟知,将其更好地应用于电子商品、数字版权及文化传媒等不同行业中。本文主要从区块链概述、智能合约、智能合约的主要开发平台及智能合约的典型应用领域等四个方面分别阐述了区块链智能合约技术的研究。首先从区块链发展史等方面简要概述区块链;其次阐述智能合约概念;然后对智能合约的三个不同的开发平台分开进行阐述并进一步作分析;最后从金融、物联网、医疗和供应链管理四个主要领域简要介绍智能合约应用场景。

下一步工作从智能合约存在的隐私、安全、法律等各种问题出发,将对智能合约的安全问题和隐私保护作进一步研究;在未来发展工作中致力于将区块链智能合约技术应用于水下传感器网络、海洋研究等领域,将区块链智能合约技术与水下传感器网络相结合,其去中心化、不可篡改、可追溯等特性在水下传感器网络中发挥更大的优势,使得区块链智能合约技术与水下传感器网络在未来研究中具有更大的突破。

猜你喜欢
以太编程语言账本
以太极为旗,开启新时代“黄河大合唱”
压力-体积转换在CFC编程语言中的实现解析
Java编程语言的特点与应用
数说:重庆70年“账本”展示
丢失的红色账本
大树爷爷的账本
车易链:做汽车业的“以太坊”
浅谈不同编程语言对计算机软件开发的影响
丢失的红色账本
面向对象Web开发编程语言的的评估方法