关于区块链:百度安全研究院区块链智能合约介绍

48次阅读

共计 7468 个字符,预计需要花费 19 分钟才能阅读完成。

摘要

智能合约 (smart contract) 是一种由事件驱动的、具备状态的代码合约和算法合同 [11],随着以比特币为代表的区块链技术的蓬勃发展, 区块链技术曾经开始逐渐超过可编程货币时代而进入智能合约时代。智能合约作为区块链的外围局部,在技术中失去广泛应用,也是令区块链成为具备肯定颠覆性技术的起因之一。本文通过对智能合约的背景常识以及流程介绍,总结出以后智能合约的特点和应用领域,从而为区块链智能合约技术的倒退提供肯定参考。

1 引言

区块链利用分布式节点共识算法对数据进行生成和更新,应用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式 [10],自身具备去中心化的个性。

区块链的倒退次要分为三大阶段 [6],第一阶段为以比特币为首的可编程货币,第二阶段为以智能合约为首的可编程金融,第三阶段为以去中心化利用为首的可编程社会。比特币倒退迅速,区块链倒退阶段逐步向第二阶段过渡,以以太坊为首的智能合约技术失去了宽泛关注。

1995 年,由明码学家 Szabo 提出智能合约这一概念,因为过后短少可信的执行环境,智能合约并没有被利用到理论产业中。比特币诞生后,因为比特币的底层技术区块链具备去中心化的个性,满足智能合约所需的可信的执行环境,区块链能够提供参加的各个节点的互信。

智能合约是一种计算机协定,在协定制订和部署后,不须要外加人为干涉,即可实现自我执行和自我验证 [4]。从技术角度来说,智能合约能够被看作一种计算机程序,这种程序能够自主地执行全副或局部和合约相干的操作,并产生相应的能够被验证的证据,来阐明执行合约操作的有效性。在部署智能合约之前,与合约相干的所有条款的逻辑流程就曾经被制订好了。智能合约通常具备一个用户接口,以供用户与已制订的合约进行交互,这些交互行为都严格遵守此前制订的逻辑。得益于密码学技术,这些交互行为可能被严格地验证,以确保合约可能依照此前制订的规定顺利执行,从而防止出现守约行为。

表 1: 传统合约和智能合约的比拟

智能合约是在传统合约根底上对安全性、唯一性进行改良的一种合约,用数字模式定义的承诺来保障合约参与者的协定安全可靠。

区块链的智能合约最早建设在以太坊,用一段代码来实现条款在解决硬件和软件中的利用,这段代码运行在以太坊的虚拟机中,依照特定程序执行操作,在相应的工夫节点实现条款内容。

以太坊是一个开源的具备智能合约性能的公共区块链平台,以太坊我的项目借鉴了比特币区块链的技术,对它的利用范畴进行了扩大。如果说比特币是利用区块链技术的专用计算器,那么以太坊就是利用区块链技术的通用计算机。简略地讲,以太坊 = 区块链 + 智能合约。

与比特币相比,以太坊最大的不同点是:它能够反对更加弱小的脚本语言,即应用一套图灵齐备的脚本语言来建设利用,容许开发者在下面开发任意利用,实现任意智能合约,这也是以太坊的最弱小之处。作为平台,以太坊能够类比于苹果的利用商店,任何开发者都能够在下面开发利用,并发售给用户。

2 智能合约类型

智能合约分为狭义智能合约和广义智能合约。狭义的智能合约是指运行在区块链上的计算机程序,适用范围较广。广义的智能合约是运行在区块链基础架构上,基于约定规定,由事件驱动、具备状态、可能保留账本上资产,利用程序代码来封装和验证简单交易行为,实现信息替换、价值转移和资产治理,可主动执行的计算机程序 [9]。

2.1 脚本型智能合约

将比特币中的智能合约称为脚本型智能合约。因为比特币中的脚本仅蕴含指令和数据两局部,其中波及到的脚本指令只须要实现无限的交易逻辑,不须要简单的循环、条件判断和跳转操作,性能无限但编写较为容易,反对的指令不到 200 条。

2.2 图灵齐备型智能合约

将次要运行在以太坊和超级账本中的智能合约称为图灵齐备型智能合约。脚本语言被设计成为仅在无限范畴内执行无限性能的简略执行语言,是非图灵齐备的语言。应用脚本语言编写的交易指令尽管可能满足比特币利用,但无奈适应以太坊平台的开发需要。目前,以太坊次要应用 Solidity 和 Serpent 两种智能合约开发语言。

2.3 可验证合约型智能合约

将正在研发中的 kadena 我的项目中的智能合约称为可验证合约型智能合约。可验证语言的语法相似于 Lisp 语言,用于编写运行在区块链 Kadena 上的智能合约,可实现合约的数据存储和受权验证等性能。为避免在简单合约的编程过程中可能存在的安全漏洞以及因而而带来的危险,可验证合约型语言采纳非图灵齐备设计,不反对循环和递归。该语言编写的智能合约代码能够间接嵌入在区块链上运行,不须要当时编译成为运行在特定环境(如以太坊 EVM)的机器代码。

3 智能合约语言

3.1 Solidity

Solidity 能够用来开发合约并编译成以太坊虚拟机字节代码,运行在 Etheream 虚拟机(EVM)之上。是动态类型语言,反对继承、库和简单的用户定义类型等个性。尽管 Solidity 语法与 Javascript 较为靠近,是一种面向对象的语言,然而两者又有许多不同:

  1. 因为语言内嵌框架是反对领取的,所以能够提供如 payable 之类的关键词,实现在语言层面间接反对领取,更为简便;
  2. 因为以太坊底层是基于账户而非 UTXO,故存在非凡类型 Address,能够用于定位用户和合约,并定位合约的代码;
  3. 因为智能合约是将原来的一个简略函数调用变成了网络节点中的代码执行,故在去中心化的网络运行环境中,会更加强调合约或函数执行的调用形式;
  4. 因为为了保障合约执行的原子性,以防止中间状态呈现的数据不统一,Solidity 的异样机制一旦出现异常,所有执行都会被回撤。

罕用的 Solidity 集成有 Remix、Visual studio Extension 等。以编译器 Remix 为例,Remix 是基于浏览器的

IDE,集成了编译器和 Solidity 运行时的环境,不须要额定的服务端组件。这里用 Solidity 开发“Hello World”。能够看到,在 decoded output 中返回_HelloW_ orld !。

3.2 Serpent

Serpent 和 Python 相似,应用用 LLL 编译,最终会被编译为 EVM 字节码。能够用于开发合约编译成以太坊虚拟机字节代码。Serpent 是一种分组加密算法,更加简洁,将低级语言在效率方面的长处和编程格调的操作繁难相结合,同时合约编程减少了独特的畛域特定性能。

3.3 Lisp Like Language

Lisp Like Language(LLL) 是和 Assembly 相似的低级语言。更为简略,实质上只是间接对以太坊虚拟机的一点包装。是一门 Lisp 格调的底层编程语言,继续更新,并且与 Solidity 同属一个资源库。

4 智能合约运行机制

以以太坊开发平台为例,智能合约运行机制次要蕴含及下阶段:

  1. 生成代码:智能合约个别具备值和状态两个属性,代码中用 If-Then 和 What-If 语句预置了合约条款的相应触发场景和响应规定,在合约各方面内容都达成统一的根底上,评估确定该合同是否能够通过智能合约实现,即“可编程”,而后由程序员利用适合的开发语言将以自然语言形容的合同内容翻译为成为可执行的机器语言;
  2. 编译:利用开发语言编写的智能合约代码个别不能间接在区块链上运行,而须要在特定的环境(以太坊为 EVM,超级账本为 Docker 容器)中执行,所以在将合约文件上传到区块链之前须要利用编译器对原代码进行编译,生成合乎环境运行要求的字节码。;
  3. 提交:智能合约的提交和调用是通过“交易”实现,当用户以交易模式发动提交合约文件后,通过 P2P 网络进行全网播送,各节点在进行验证后存储在区块中;
  4. 确认:被验证后的无效交易被打包进新区块,通过共识机制达成统一后,新区块增加到区块链的主链。依据交易生成智能合约的账户地址,之后能够利用该账户地址通过发动交易来调用合约,节点对教训证无效的交易进行解决,被调用的合约在环境中执行。

5 智能合约我的项目

最简略的合约是:信息上传区块链——单方签字确认——单方达成共识——合约被存储。

图 2: 合约运行机制

图 3: 合约根本模型

Language Language 是一种平安稳固的分布式语言,合乎 Szabo 对智能合约设计理念的特点,所有的近程通信会被加密。

Hawk Hawk 是一种去中心化的智能合约零碎,是一个用智能合约构建隐衷爱护的框架 [2],在这个零碎中不会以明确的形式将金融交易存储在区块链中,Hawk 编译器负责将程序编译为区块链和用户之间的加密协议。

OpenBazzar OpenBazzar 平台是一家利用比特币进行交易的去中心化电商平台,是一个开源平台,间接将用户与用户连贯发展交易,实现点对点交易网络,买卖双方能够间接进行交易,不须要借助中心化平台,保障了隐衷。

Ethereum Ethereum 是具备图灵齐备编程语言的区块链平台,蕴含了私有链和公有链,能够创立任何利用。应用共识机制中的 PoW 机制,领有更高的处理速度和精度,能够在没有解决所有交易的状况下验证利用状态,指标成

为分布式应用平台的脊梁。但区块的结构工夫受到交易处理速度的影响,建块速度受到很大影响。

Codius Codius 是由 Ripple 实验室公布的智能协定,具备去中心化、安全性低等特点,能够实现点对点交易网络,是一种开源平台,利用于 Ripple 平台上,实现的性能是疏导货币流通。

Hyperledger Hyperledger 是一种 Linux 基金会下的区块链开源平台,以容器的模式运行智能合约,具备较高安全性。

6 智能合约根本特点

6.1 劣势

可信性 智能合约的承诺蕴含两方面,一是主动,无需信赖和公正地执行合约;二是间接,在合约执行的各个环节中勾销中间人这一角色 [5]。智能合约的所有条款和执行过程是提前制订好的,并由计算机相对执行。因而所有执行的后果都是准确无误的,不会呈现不可意料的后果。

交易无需第三方 智能合约不须要中心化的权威来仲裁合约是否按规定执行,合约的监督和仲裁都由计算机来实现 [1]。在一个区块链网络中个别不存在一个相对的权威来监督合约的执行,而是由共识机制来判断合约是否按规定执行,监督形式通常由 PoW 或 PoS 技术实现。因为智能合约的数字化特点,数据被存储在区块链中,应用加密代码强制执行协定,保障交易可追踪和不可逆转。

高效的实时更新 因为智能合约的执行不须要人为的第三方权威或中心化代理服务的参加,其可能在任何时候响应用户的申请,大大晋升了交易进行的效率。用户只需通过网络对业务进行办理,节俭了人力、物力。

更低成本 智能合约具备去人为干涉的特点,其可能大大减少合约履行、裁决和强制执行所产生的人力老本,要求合约制订人可能将合约的各个细节在合约建设之初就确定下来。

6.2 目前存在的问题

不可撤销性 智能合约主动履行合约内容,但在现实生活中,合同可能会因为一些不可抗力、守法等起因解除。合同法中,对于合同的要求是防止律师预测和协商可能呈现后果的灵活性。但因为区块链的不可修改性,智能合约一旦触发就会主动履行,不可撤销,具备肯定的僵化个性。

法律效力 智能合约的起草须要通过第三方计算机程序员,而在合约呈现问题时若断定是第三方计算机程序员的责任,那么对于谬误的算法应该如何追究责任。在法律管辖权问题上,智能合约作为一种新兴合约形式,哪些法院能够受理诉讼、现有的法律条款应该如何批改等问题都是亟待解决的。

安全漏洞 智能合约的破绽分为交易程序依赖破绽、工夫戳依赖破绽、解决异样破绽和可重入缺点破绽 [3],依赖性破绽是因为智能合约的执行正确与否与以太坊的状态无关,而无效的交易可能会影响以太坊的状态。当一个新的区块含有两笔交易时,交易的先后顺序可能会引起以太坊的最终状态不同,而交易的程序取决于矿工,从而导致智能合约的执行依赖于矿工的操作 [8]。工夫戳依赖破绽是因为某些智能合约是依据区块中的工夫戳所执行的,而工夫戳是由矿工依据本身的工夫所设置的,若工夫被攻击者所批改,可能会导致产生肯定危险。在不同的智能合约互相调用时可能呈现解决异样破绽,若被调用的合约产生谬误返回值却没有被正确验证时,可能会蒙受到攻打。若一个函数在执行实现前被调用了数次,导致产生意料不到的行为时,可重入破绽就可能呈现,可重入缺点破绽是指攻击者能够利用调用了智能合约而状态未扭转的中间状态对合约进行重复的调用。

7 智能合约利用场景

7.1 法律方面

在法律层面,区块链智能合约能够被看作为智能合同 [10],即使用区块链技术来实现法律合同,将书面化的法律语言转化为可被自动化执行的技术。

以数字版权保护为例,相似于自在文化影响下的常识共享协定的开放式版权协定一直呈现,如何保障版权的实用行为,是数字版权保护的外围问题。因为传统的版权保护具备工夫、空间的限度,在版权注销、监管机制等方面容易受到影响,而数字版权保护的呈现极大改善了这一问题,更好适应了数字资产模式变动多样、易流传的特点。

在版权注销方面,利用区块链技术原理中计算值的唯一性和不可篡改性,对不同的作品生成不同的计算值,将计算值视为作品的一种代表形式进行关联,能够缩小作品追溯和存储的老本,简化作品查问流程。

在署名形式方面,应用数字身份对计算值对应的作品进行署名,应用加密技术对数字作品进行爱护,保障作品不会被篡改。

依据合约代码和自然语言的比例,智能合约有以下几种表现形式:1、齐全以代码模式编写的合约;2、以代码和自然语言两种模式书写的合约。如果法律认为无论是以自然语言书写还是以计算机语言编写,都视为合同的书面形式,法律效力是雷同的,那么两种语言编写的合约形成了残缺的合同。

智能合同可能面临的问题有,第 2 种合同是以两种语言体现的,如果这两个版本合约内容上有抵触,以哪一个版本为准,无论是以自然语言版本为准还是以代码语言为准,都须要法律进一步明确并给出司法解释。

7.2 金融方面

在金融层面,因为智能合约能够在区块链中运作,从而充当很多角色。智能合约能够作为经济参与者,承受信息、存储信息,打消人工参加,降低成本,保障合约交易的高效。

以物联网为例,以后社会物联网包含数十亿个通过互联网共享数据的节点,通过物联网、区块链以及智能合约技术的交融利用,物联网反对的物理设施或财产,如公寓、汽车、停车场、自行车等,都能够容许人们在没有中间商的状况下出租、发售或共享 [7]。

以后租房市场在押金方面存在很多争议,一些不良房东在收到押金后就卷钱跑路。将智能合约引入到租房押金中,在所有者设定出租屋宇的金额后,用户通过交易向区块链领取押金,从而触发许可,取得屋宇的智能锁权限。与此同时,押金被锁定在区块链中,直到用户决定向区块链发送另一个交易来返回虚构密钥(如领取租金),智能合约主动执行,在扣除押金中的租金后将残余金额发送给所有者,交易实现。这一过程将缩减不必要的工夫,只须要通过手机进行操作,提高效率的同时升高危险。

但智能合约可能会带来新的金融犯罪行为和危险,例如机密信息透露、加密密钥被盗等犯罪行为,而以后的法院和监管机构临时很难跟上这一技术的倒退步调,因为智能合约具备肯定的复杂性,在一些消费者眼里是难以了解的,这也是智能合约施行中须要解决的问题之一。

图 4: 子系统节点部署

7.3 公益慈悲

在公益慈悲层面,以后面临的最大问题是资金流向不通明,导致很多人并不会应用众筹平台来进行慈悲捐款。众筹是一种通过互联网形式公布筹款我的项目并筹集资金的形式,众筹更为凋谢,具备门槛低、依附公众力量等特点。如何

解决资金信息公开通明,增强监管和监督,成为以后公益慈悲的热点探讨之一。

区块链是遗传应用密码学办法产生关联的数据块,每一个数据块中都还喊了肯定工夫的交易信息,每个数据块都蕴含上一个块的哈希值,以用于验证其信息的有效性 [12]。智能合约能够通过代码合约实现对众筹零碎价值流的管制,将众筹业务流转换为智能合约代码。区块链的不可更改和共识机制保障了数据的实在和可靠性,能够进步众筹平台的公信力。

众筹区块链总体设计蕴含双数据系统、双公有链设计、高速与信用机制、智能合约设计、审计与监督设计、可扩大链式设计。

因为区块链的分布式存储架构,能够在不同用户处搁置不同权限的节点,让不同用户参加到治理中,对于公布的音讯实现可追踪和不可批改。通过一直互联,使区块链造成互联链、链中链,依照统一标准进行治理监管,解决慈悲公益的监管和监督问题。

参考文献

[1] Bartoletti, M., and Zunino, R. Bitml: A calculus for bitcoin smart contracts. pp. 83–100.

[2] Kosba, A., Miller, A., Shi, E., Wen, Z., and Papamanthou, C. Hawk: The blockchain model of cryptography and privacy-preserving smart contracts. pp.839–858.

[3] Luu, L., Chu, D.-H., Olickel, H., Saxena, P., and Hobor, A. Making smart contracts smarter. pp. 254–269.

[4] Mourouzis, T., and Tandon, J. Introduction to decentralization and smart contracts, 03 2019.

[5] Pfitzmann, B., Schunter, M., and Waidner, M. Optimal efficiency of optimistic contract signing.

[6] V.Buterin. A next-generation smart contract and decentralized application platform. white paper (2014).

[7] 刘德林. 区块链智能合约技术在金融畛域的研发利用现状、问题及倡议. 海南金融 _000_, 10 (2016), 27–31.

[8] 张杰. 区块链平安综述. 西安文理学院学报 (_自然科学版_) (2020), 42–55.

[9] 王群, 李馥娟, 王振力, 梁广俊, and 徐杰. 区块链原理及关键技术. 计算机科学与摸索, 1–24.

[10] 贺小苗. 区块链技术的利用: 智能合约及法律问题前瞻. 古代商业 _000_, 16 (2018), 153–154.

[11] 贺海武, 延安, and 陈泽华. 基于区块链的智能合约技术与利用综述. 计算机钻研与倒退 _55_, 11 (2018), 112–126.

[12] 黄洁华, 高灵超, and 许玉壮. 众筹区块链上的智能合约设计. 信息安全钻研 (2017).

正文完
 0