正在加载图片...
朱岩等:区块链技术及其研究进展 ·1369· 和验证智能合约程序 动停机并回滚 由于智能合约的验证过程需要全部挖矿节点 6.3执行模块 运行智能合约,一旦出现无限循环或是过于复杂 目前各个平台智能合约的执行方式与执行 的程序代码,会占用大量计算资源甚至导致区块 环境有所不同,下面主要以比特币、以太坊、 链网络崩溃,且在公有链中这点很容易成为恶意 Hyperledger Fabric三个平台介绍 节点的攻击方式,需要采取一定限制措施.如:以 比特币内置一套的基于栈的脚本执行引擎对 太坊采用了收取交易费的方式来对合约的执行进 脚本进行解释执行.图8是解锁脚本对锁定脚本 行限制,当用户支付的交易费不足时,合约程序自 的解锁过程,具体步骤如下: Combined Script(组合脚本) Stacks(栈) <sig>,<pk>.OP_DUP.OP_HASH256,<pk_hash>.OP_EQUALVERIFY.OP_CHECKSIG 2 <pk>,OP_DUP.OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG <sig> 3OP_DUP,OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG pk >,sig 4OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG pk >,<pk ><sig> <pk_hash>,OP_EQUALVERIFY,OP CHECKSIG SHA256d(pk),pk >pk >,<sig> 6 OP_EQUALVERIFY,OP CHECKSIG pk hash >SHA256d(pk),<pk ><pk >sig> 7 OP CHECKSIG pk ><sig 8 True 图8交易有效性校验过程 Fig.8 Transaction validity verification process ()将解锁脚本和锁定脚本构成联合脚本,从 Hyperledger((超级账本)的项目之一,Fabric使用现 左至右依次入栈: 有的一种名为Docker的容器技术来支持智能合约 (2)将<sg>入栈,置于栈顶; 功能,理论上可以用任何语言来编写.Docker也是 (3)将<pk>入栈,置于栈顶; 独立的沙盒,相较于EVM更加轻量,但对于智能 (4)执行OP DUP操作,复制<pk>并置于栈顶; 合约执行流程的控制没有EVM强. (⑤)对复制的<pk>值进行OP HASH256哈希 6.4合约模块 计算操作,记做SHA256(pk),置于栈顶; 创建合约是将参与方协商达成一致的结果编 (6)将<pk hash>入栈,置于栈顶; 译成计算机可执行代码.在这一过程中,需要考虑 (7)对<pk_hash>和SHA256(pk)进行比较操 法律和金融等专家与程序员沟通问题、合约代码 作,如果值一致,则相继出栈: 与法律对接的问题、代码逻辑安全性问题及智能 (8)将签名<sg>和公钥<pk>进行匹配,如果匹 合约语言表达能力问题等 配成功,则会返回True. 合约层包含三类合约语言: 从图8可知,比特币将解锁脚本与锁定脚本拼 (1)合同语言:合同语言采用自然语言,语法多 接后,使用堆栈语言按后进先出的顺序执行,最后 样,书写自由,结合约定俗成的概念以及法律中的 完成检查,如果返回结果为TRUE,代表解锁成功, 规定确保合同的法律效力. 用户可以使用该笔输出作为新交易的输入进行交 (2)智能合约编程语言:与传统编程语言类似, 易.如果返回为FALSE或者执行过程中出现问 具有表达能力强、语义明确和难以验证的特性,阅 题,则该交易无效 读与编写需要编程领域专业知识 以太坊智能合约属于编译执行,先将智能 (3)规约语言:介于合同语言与智能合约编程 合约转化为字节码,再运行在以太坊虚拟机 语言之间的一种中间语言,保留自然语言的可读 (Ethereum virtual machine,.EVM)上.以太坊虚拟机 性,同时规范书写方式,增强语义明确性,能自动 是由以太坊开发的,且有许多针对智能合约的设 转化到智能合约编程语言 计,是一个完全独立的沙盒,合约代码可对外完全 目前智能合约编程语言有很多,如以太坊的 隔离并在EVM内部运行. Solidity、yperLedger采用的Go语言等,各自的代 Hyperledger Fabric是Linux基金会所主导的 码风格不同和验证智能合约程序. 由于智能合约的验证过程需要全部挖矿节点 运行智能合约,一旦出现无限循环或是过于复杂 的程序代码,会占用大量计算资源甚至导致区块 链网络崩溃,且在公有链中这点很容易成为恶意 节点的攻击方式,需要采取一定限制措施. 如:以 太坊采用了收取交易费的方式来对合约的执行进 行限制,当用户支付的交易费不足时,合约程序自 动停机并回滚. 6.3    执行模块 目前各个平台智能合约的执行方式与执行 环境有所不同 ,下面主要以比特币 、以太坊 、 Hyperledger Fabric 三个平台介绍. 比特币内置一套的基于栈的脚本执行引擎对 脚本进行解释执行. 图 8 是解锁脚本对锁定脚本 的解锁过程,具体步骤如下: (1) 将解锁脚本和锁定脚本构成联合脚本,从 左至右依次入栈; (2) 将<sig>入栈,置于栈顶; (3) 将<pk>入栈,置于栈顶; (4) 执行 OP_DUP 操作,复制<pk>并置于栈顶; (5) 对复制的<pk>值进行 OP_HASH256 哈希 计算操作,记做 SHA256(pk),置于栈顶; (6) 将<pk_hash>入栈,置于栈顶; (7)  对 <pk_hash>和 SHA256(pk) 进 行 比 较 操 作,如果值一致,则相继出栈; (8) 将签名<sig>和公钥<pk>进行匹配,如果匹 配成功,则会返回 True. 从图 8 可知,比特币将解锁脚本与锁定脚本拼 接后,使用堆栈语言按后进先出的顺序执行,最后 完成检查,如果返回结果为 TRUE,代表解锁成功, 用户可以使用该笔输出作为新交易的输入进行交 易. 如果返回为 FALSE 或者执行过程中出现问 题,则该交易无效. 以太坊智能合约属于编译执行 ,先将智能 合约转化为字节码 ,再运行在以太坊虚拟机 (Ethereum virtual machine,EVM)上. 以太坊虚拟机 是由以太坊开发的,且有许多针对智能合约的设 计,是一个完全独立的沙盒,合约代码可对外完全 隔离并在 EVM 内部运行. Hyperledger  Fabric 是 Linux 基金会所主导 的 Hyperledger(超级账本)的项目之一. Fabric 使用现 有的一种名为 Docker 的容器技术来支持智能合约 功能,理论上可以用任何语言来编写. Docker 也是 独立的沙盒,相较于 EVM 更加轻量,但对于智能 合约执行流程的控制没有 EVM 强. 6.4    合约模块 创建合约是将参与方协商达成一致的结果编 译成计算机可执行代码. 在这一过程中,需要考虑 法律和金融等专家与程序员沟通问题、合约代码 与法律对接的问题、代码逻辑安全性问题及智能 合约语言表达能力问题等. 合约层包含三类合约语言: (1) 合同语言:合同语言采用自然语言,语法多 样,书写自由,结合约定俗成的概念以及法律中的 规定确保合同的法律效力. (2) 智能合约编程语言:与传统编程语言类似, 具有表达能力强、语义明确和难以验证的特性,阅 读与编写需要编程领域专业知识. (3) 规约语言:介于合同语言与智能合约编程 语言之间的一种中间语言,保留自然语言的可读 性,同时规范书写方式,增强语义明确性,能自动 转化到智能合约编程语言. 目前智能合约编程语言有很多,如以太坊的 Solidity、HyperLedger 采用的 Go 语言等,各自的代 码风格不同. <sig>,<pk>,OP_DUP,OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG <pk>,OP_DUP,OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG OP_DUP,OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG OP_HASH256,<pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG <pk_hash>,OP_EQUALVERIFY,OP_CHECKSIG OP_EQUALVERIFY,OP_CHECKSIG OP_CHECKSIG <pk >, < sig > <pk >, < pk >, < sig > <sig > SHA256d(pk), < pk >, < pk >, < sig > <pk_hash >, SHA256d(pk), < pk >, < pk >, < sig > <pk >, < sig > True 1 2 3 4 5 6 7 8 Combined Script(组合脚本) Stacks(栈) 图 8    交易有效性校验过程 Fig.8    Transaction validity verification process 朱    岩等: 区块链技术及其研究进展 · 1369 ·
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有