工程科学学报.第41卷,第11期:1361-1373.2019年11月 Chinese Journal of Engineering,Vol.41,No.11:1361-1373,November 2019 D0L:10.13374.issn2095-9389.2019.03.26.004,http:/ournals.ustb.cdu.cn 区块链技术及其研究进展 朱岩区,王巧石,秦博涵,王中豪 北京科技大学计算机与通信工程学院.北京100083 ☒通信作者,E-mail:zhuyan@ustb.edu.cn 摘要从区块链的设计和需求出发,阐明了区块链技术中的基本概念与特征及其基础架构:其次,以比特币为例详细介绍 了区块链中各种机制,包括:区块结构与防篡改机制、交易结构与脚本语言、交易人员身份鉴别机制以及网络高效交易传播 机制等:而且.按照证明类、拜占庭类、传统共识类及混合共识类等类型,详细描述了当前几种主流的区块链共识算法;此外, 对智能合约的概念、组织结构及模块关系以及执行方式与过程进行了讨论:最后,对区块链面临的主要安全挑战进行了总 结,从而达到系统地把握区块链技术发展和趋势的目的. 关键词区块链:去中心化:共识算法:智能合约:分布式系统 分类号TP319 Survey of blockchain technology and its advances ZHU Yan,WANG Qiao-shi,QIN Bo-han,WANG Zhong-hao School of Computer Communication Engineering,University of Science and Technology Beijing,Beijing 100083,China Corresponding author,E-mail:zhuyan@ustb.edu.cn ABSTRACT With the rapid development of e-commerce and network finance involving the Internet,hundreds of millions of online transactions are being carried out on the Internet every moment.Guaranteeing the security of these transactions and realizing the secure storage,exchange,and sharing of massive transaction data have become paramount.Blockchain is a practical technology recently proposed to solve the above problems.Through P2P network technology,distributed ledger technology,asymmetric cryptography, consensus mechanism,and smart contract technology,blockchains can ensure data integrity,nonrepudiation,privacy,consistency,and other security protections.Hence,it has attracted wide attention from academia and industry in recent years.Starting from the design and demand of blockchains,this paper first expounds the basic concepts,features,and typical architecture in the current blockchains.Taking Bitcoin as an example,this paper also explored the various proposed structures and the corresponding mechanisms,including block storage structure and tamper-proof mechanism,transaction structure and scripting language,trader identification mechanism,and efficient network transaction propagation mechanism.Moreover,several current mainstream blockchain consensus algorithms were described according to the categories of proof-mode,Byzantine-type,traditional consensus,and hybrid consensus.In addition,the latest developments in smart contracts were discussed from some aspects,including concepts,organizational structure,the relationship among modules,as well as execution approaches and processes.Finally,the main security challenges faced by blockchains were summarized in order to systematically grasp the developments and trends of blockchain technology. KEY WORDS blockchain;decentralization;consensus algorithm;smart contract;distributed system 收稿日期:2019-03-26 基金项目:国家重点研发计划资助项目(2018Y℉B1402702):国家自然科学基金资助项目(61972032)
区块链技术及其研究进展 朱 岩苣,王巧石,秦博涵,王中豪 北京科技大学计算机与通信工程学院,北京 100083 苣通信作者,E-mail:zhuyan@ustb.edu.cn 摘 要 从区块链的设计和需求出发,阐明了区块链技术中的基本概念与特征及其基础架构;其次,以比特币为例详细介绍 了区块链中各种机制,包括:区块结构与防篡改机制、交易结构与脚本语言、交易人员身份鉴别机制以及网络高效交易传播 机制等;而且,按照证明类、拜占庭类、传统共识类及混合共识类等类型,详细描述了当前几种主流的区块链共识算法;此外, 对智能合约的概念、组织结构及模块关系以及执行方式与过程进行了讨论;最后,对区块链面临的主要安全挑战进行了总 结,从而达到系统地把握区块链技术发展和趋势的目的. 关键词 区块链;去中心化;共识算法;智能合约;分布式系统 分类号 TP319 Survey of blockchain technology and its advances ZHU Yan苣 ,WANG Qiao-shi,QIN Bo-han,WANG Zhong-hao School of Computer & Communication Engineering, University of Science and Technology Beijing, Beijing 100083, China 苣 Corresponding author, E-mail: zhuyan@ustb.edu.cn ABSTRACT With the rapid development of e-commerce and network finance involving the Internet, hundreds of millions of online transactions are being carried out on the Internet every moment. Guaranteeing the security of these transactions and realizing the secure storage, exchange, and sharing of massive transaction data have become paramount. Blockchain is a practical technology recently proposed to solve the above problems. Through P2P network technology, distributed ledger technology, asymmetric cryptography, consensus mechanism, and smart contract technology, blockchains can ensure data integrity, nonrepudiation, privacy, consistency, and other security protections. Hence, it has attracted wide attention from academia and industry in recent years. Starting from the design and demand of blockchains, this paper first expounds the basic concepts, features, and typical architecture in the current blockchains. Taking Bitcoin as an example, this paper also explored the various proposed structures and the corresponding mechanisms, including block storage structure and tamper-proof mechanism, transaction structure and scripting language, trader identification mechanism, and efficient network transaction propagation mechanism. Moreover, several current mainstream blockchain consensus algorithms were described according to the categories of proof-mode, Byzantine-type, traditional consensus, and hybrid consensus. In addition, the latest developments in smart contracts were discussed from some aspects, including concepts, organizational structure, the relationship among modules, as well as execution approaches and processes. Finally, the main security challenges faced by blockchains were summarized in order to systematically grasp the developments and trends of blockchain technology. KEY WORDS blockchain;decentralization;consensus algorithm;smart contract;distributed system 收稿日期: 2019−03−26 基金项目: 国家重点研发计划资助项目(2018YFB1402702);国家自然科学基金资助项目(61972032) 工程科学学报,第 41 卷,第 11 期:1361−1373,2019 年 11 月 Chinese Journal of Engineering, Vol. 41, No. 11: 1361−1373, November 2019 DOI:10.13374/j.issn2095-9389.2019.03.26.004; http://journals.ustb.edu.cn
1362 工程科学学报,第41卷,第11期 区块链(blockchain)的概念首次出现在2008 与区块链技术的相关综述性文献[9]相比,本 年中本聪(Satoshi Nakamoto)发表的《Bitcoin:A 文更加侧重于从技术细节来阐释区块链特征、当 peer-to-peer electronic cash system》u.该文提出以 前进展和未来趋势.例如,文献[9]侧重于从数 区块链技术为基础的比特币(Bitcoin)系统构架, 据、记账、协议、经济、技术等多角度介绍区块链 该构架记录着所有元数据和加密交易信息,从而 概念和性质,并详细介绍了区块链的优势,如去中 建立了一个采用点对点(P2P)技术的分布式电子 心化、去信任化、可追溯性、集体维护性、安全 现金系统四,使得在线支付的双方不用通过第三方 性、开放性、匿名性等;文献[10]和[11]更加侧重 金融机构而直接进行交易.随着比特币网络多年 于区块链面临的安全挑战和问题,如51%攻击、 来的稳定运行与发展,比特币在全球流行起来.同 分叉问题、扩展性问题、交易延时问题、现有政策 时,比特币的底层技术逐渐引起了产业界的广泛 问题、成本问题等;文献[5]和[12]则侧重于区块 关注),并被命名为“区块链”技术,使之与比特币 链的应用,如区块链在金融领域、通信领域、医疗 技术区分开,这也是区块链技术发展的第二阶段 领域、政府管理领域的应用等 近几年,随着对区块链技术的不断探索和演 1 区块链基础架构 化,出现了一些新的技术改进.其中,针对原有交 易脚本不足以处理复杂事务的问题,一种被称为 区块链具有的去中心化、不可篡改性、数据透 “智能合约”的新型区块链构架被提出,也被称为 明性、交易可溯源性以及匿名性等特性保证了交 第三代区块链技术目前,区块链作为颠覆性的 易活动可以在任何时间和任何地点进行,突破了 创新技术,已渗透到金融、资产、版权、法律 传统贸易在时空上的限制,同时也为交易双方创 和医疗等各种领域中,成为新的业务增长动力 造了更多的交易机会] 本文首先从区块链的设计和需求出发,阐明 区块链的这些特性源于它的基础架构,区块 了区块链技术中的基本概念与特征及其基础架 链基础架构模型如图1所示.一般来说区块链系 构;其次,以比特币为例详细介绍了区块链中各种 统分为五个部分,分别是数据层、网络层、共识 机制,包括:区块结构与防篡改机制、交易结构与 层、激励层以及合约层 脚本语言、交易人员身份鉴别机制、以及网络高 数据层是区块链通过使用各种密码学技术, 效交易传播机制等;而且,按照证明类、拜占庭 例如非对称加密、默克尔树(Merkle tree)以及哈希 类、传统共识类、及混合共识类等类型,详细描述 函数等创建的数据存储格式,用以保证区块链数 了当前几种主流的区块链共识算法:此外,对智能 据稳定性和可靠性 合约的概念、组织结构及模块关系、以及执行方 网络层将区块链底层的P2P网络组织起来, 式与过程进行了讨论:最后,对区块链面临的主要 并且快速让交易在网络中扩散,以确保能够及时 安全挑战进行了总结,从而达到系统地把握区块 的验证交易的正确性 链技术发展和趋势的目的 共识层主要实现了整个网络中的高度分散的 合约层 脚本代码 算法机制 智能合约 激励层 资源挖矿 挖矿奖励 交易费用 共识层 工作量证明(PoW) 权益证明(PoS) 其他共识算法 网络层 P2P网络 多播 接人管理 数据区块 链式结构 时间戳 数据层 哈希函数 Merkle树 非对称加密 图1区块链基础架构 Fig.I Architecture of a blockchain
区块链( blockchain)的概念首次出现在 2008 年中本聪 ( Satoshi Nakamoto)发表的《Bitcoin: A peer-to-peer electronic cash system》[1] . 该文提出以 区块链技术为基础的比特币(Bitcoin)系统构架, 该构架记录着所有元数据和加密交易信息,从而 建立了一个采用点对点(P2P)技术的分布式电子 现金系统[2] ,使得在线支付的双方不用通过第三方 金融机构而直接进行交易. 随着比特币网络多年 来的稳定运行与发展,比特币在全球流行起来. 同 时,比特币的底层技术逐渐引起了产业界的广泛 关注[3] ,并被命名为“区块链”技术,使之与比特币 技术区分开,这也是区块链技术发展的第二阶段. 近几年,随着对区块链技术的不断探索和演 化,出现了一些新的技术改进. 其中,针对原有交 易脚本不足以处理复杂事务的问题,一种被称为 “智能合约”的新型区块链构架被提出,也被称为 第三代区块链技术[4] . 目前,区块链作为颠覆性的 创新技术,已渗透到金融、资产[5]、版权[6]、法律[7] 和医疗[8] 等各种领域中,成为新的业务增长动力. 本文首先从区块链的设计和需求出发,阐明 了区块链技术中的基本概念与特征及其基础架 构;其次,以比特币为例详细介绍了区块链中各种 机制,包括:区块结构与防篡改机制、交易结构与 脚本语言、交易人员身份鉴别机制、以及网络高 效交易传播机制等;而且,按照证明类、拜占庭 类、传统共识类、及混合共识类等类型,详细描述 了当前几种主流的区块链共识算法;此外,对智能 合约的概念、组织结构及模块关系、以及执行方 式与过程进行了讨论;最后,对区块链面临的主要 安全挑战进行了总结,从而达到系统地把握区块 链技术发展和趋势的目的. 与区块链技术的相关综述性文献 [9] 相比,本 文更加侧重于从技术细节来阐释区块链特征、当 前进展和未来趋势. 例如,文献 [9] 侧重于从数 据、记账、协议、经济、技术等多角度介绍区块链 概念和性质,并详细介绍了区块链的优势,如去中 心化、去信任化、可追溯性、集体维护性、安全 性、开放性、匿名性等;文献 [10] 和 [11] 更加侧重 于区块链面临的安全挑战和问题,如 51% 攻击、 分叉问题、扩展性问题、交易延时问题、现有政策 问题、成本问题等;文献 [5] 和 [12] 则侧重于区块 链的应用,如区块链在金融领域、通信领域、医疗 领域、政府管理领域的应用等. 1 区块链基础架构 区块链具有的去中心化、不可篡改性、数据透 明性、交易可溯源性以及匿名性等特性保证了交 易活动可以在任何时间和任何地点进行,突破了 传统贸易在时空上的限制,同时也为交易双方创 造了更多的交易机会[13] . 区块链的这些特性源于它的基础架构,区块 链基础架构模型如图 1 所示. 一般来说区块链系 统分为五个部分,分别是数据层、网络层、共识 层、激励层以及合约层. 数据层是区块链通过使用各种密码学技术, 例如非对称加密、默克尔树(Merkle tree)以及哈希 函数等创建的数据存储格式,用以保证区块链数 据稳定性和可靠性. 网络层将区块链底层的 P2P 网络组织起来, 并且快速让交易在网络中扩散,以确保能够及时 的验证交易的正确性. 共识层主要实现了整个网络中的高度分散的 合约层 脚本代码 算法机制 智能合约 激励层 资源挖矿 挖矿奖励 交易费用 共识层 网络层 P2P网络 多播 接入管理 哈希函数 链式结构 时间戳 数据层 数据区块 Merkle树 非对称加密 工作量证明(PoW) 权益证明(PoS) 其他共识算法 图 1 区块链基础架构 Fig.1 Architecture of a blockchain · 1362 · 工程科学学报,第 41 卷,第 11 期
朱岩等:区块链技术及其研究进展 1363· 节点对交易和数据快速地达成共识,确保全网记 Block Header 80 bytes 账的一致性. 激励层的主要功能是提供一定的激励方式, Number of Varlnt(1~9 bytes) 去鼓励网络中每个节点积极参与区块链中区块的 Transactions n 生成和验证工作,以保证区块链的稳定运行 Coinbase 合约层是在这些基础上提供的一种用于编写 Transaction 可执行代码的接口,利用该接口可以开发基于区 Regular Transaction 1 块链的各种实际应用 List of Transactions 本文从数据层出发,第二、三节介绍区块链的 Regular Transaction 2 数据区块、链式结构、Merkle树和交易等.第四节 介绍区块链网络,第五节介绍区块链共识和挖矿 过程,第六节介绍区块链合约层中的智能合约和 Regular Transaction nl 脚本,第七节介绍区块链当前面临的挑战和机遇, 第八节为总结和展望 国2块结构 Fig.2 Structure of block in blockchain 2区块链数据结构 希运算,即将任意长度的原始数据经过哈希运算 区块链本质上是分布式存储系统,采用了 后转换为256位(32字节)的二进制来统一存储和 记账式存储模型,以记账形式记录资产的发行、 识别.由图3所示,每个区块将其区块头部信息进 变更、交易和注销等,因此也可称为分布式记账 行两次(Double)哈希运算所得到的结果称为该区 (distributed ledger)系统Ils-l6在存储结构上,数据 块哈希值.通常任何一段信息只能有唯一的哈希 区块是区块链的基本构成单元,由区块头(block 值,即便是改变信息中的任何一个比特位,就会引 header)、交易数量(number of transactions)和区块 起整个哈希值出现巨大的差别,而哈希值碰撞(不 体三部分组成),区块体的内容就是交易列表(Iist 同的输入信息产生相同哈希值)的概率是极低的, oftransactions),包括Coinbase交易和常规交易(regular 因此区块哈希值可以安全地被认为是区块的唯一 transaction),如图2所示 标识符 区块头保存着各种用于连接上一个区块的信 区块头中的hashPrevBlock字段包含区块链中 息、各种用来验证区块的信息以及时间戳等信 前一个区块的哈希值,由此不同区块根据 息,交易数量用于声明区块体中具体的交易个数, hashPrevBlock字段的内容依次链接起来形成区块 区块体包含了该区块中的所有交易信息 链.由于该长串链条由每个节点所认可,任何对区 区块头主要包括:版本号(nVersion)、前一个 块信息的修改都会导致后续哈希值的变化,而通 区块的哈希值(hashPrevBlock)、当前区块工作量证 过链条的溯源机制,很快就可以发现问题.因此, 明的目标难度值(nBits)、当前区块的生成时间 区块链十分安全 (nTime)、用于工作量证明算法的随机数(nNonce) 区块中的hashMerkleRoot字段存放了由区块 以及用于验证区块体交易的哈希默克尔树树根 体中所有交易构成的默克尔树的根节点的值,默 (hashMerkleRoot)I,具体结构如图3所示 克尔树是一种典型的二叉树0,它包含:根节点、 区块链中通常采用哈希函数(SHA256)进行哈 中间节点以及叶子节点.其中,非叶子节点的值是 Previous Block Header Block Header nVersion nVersion hashPrevBlock hashPrevBlock hashMerkleRoot Double hashMerkleRoot nTime SHA256 nTime nBits nBits nNonce nNonce 图3相邻区块之间关系 Fig.3 Relationship between two adjacent blocks
节点对交易和数据快速地达成共识,确保全网记 账的一致性. 激励层的主要功能是提供一定的激励方式, 去鼓励网络中每个节点积极参与区块链中区块的 生成和验证工作,以保证区块链的稳定运行. 合约层是在这些基础上提供的一种用于编写 可执行代码的接口,利用该接口可以开发基于区 块链的各种实际应用. 本文从数据层出发,第二、三节介绍区块链的 数据区块、链式结构、Merkle 树和交易等. 第四节 介绍区块链网络,第五节介绍区块链共识和挖矿 过程,第六节介绍区块链合约层中的智能合约和 脚本,第七节介绍区块链当前面临的挑战和机遇, 第八节为总结和展望. 2 区块链数据结构 区块链本质上是分布式存储系统[14] ,采用了 记账式存储模型,以记账形式记录资产的发行、 变更、交易和注销等,因此也可称为分布式记账 (distributed ledger)系统[15−16] . 在存储结构上,数据 区块是区块链的基本构成单元,由区块头(block header)、交易数量(number of transactions)和区块 体三部分组成[17] ,区块体的内容就是交易列表(list of transactions),包括Coinbase 交易和常规交易(regular transaction),如图 2 所示. 区块头保存着各种用于连接上一个区块的信 息、各种用来验证区块的信息以及时间戳[18] 等信 息,交易数量用于声明区块体中具体的交易个数, 区块体包含了该区块中的所有交易信息. 区块头主要包括:版本号(nVersion)、前一个 区块的哈希值 (hashPrevBlock)、当前区块工作量证 明的目标难度值( nBits)、当前区块的生成时间 (nTime)、用于工作量证明算法的随机数(nNonce) 以及用于验证区块体交易的哈希默克尔树树根 (hashMerkleRoot)[19] ,具体结构如图 3 所示. 区块链中通常采用哈希函数(SHA256)进行哈 希运算,即将任意长度的原始数据经过哈希运算 后转换为 256 位(32 字节)的二进制来统一存储和 识别. 由图 3 所示,每个区块将其区块头部信息进 行两次(Double)哈希运算所得到的结果称为该区 块哈希值. 通常任何一段信息只能有唯一的哈希 值,即便是改变信息中的任何一个比特位,就会引 起整个哈希值出现巨大的差别,而哈希值碰撞(不 同的输入信息产生相同哈希值)的概率是极低的, 因此区块哈希值可以安全地被认为是区块的唯一 标识符. 区块头中的 hashPrevBlock 字段包含区块链中 前 一 个 区 块 的 哈 希 值 , 由 此 不 同 区 块 根 据 hashPrevBlock 字段的内容依次链接起来形成区块 链. 由于该长串链条由每个节点所认可,任何对区 块信息的修改都会导致后续哈希值的变化,而通 过链条的溯源机制,很快就可以发现问题. 因此, 区块链十分安全. 区块中的 hashMerkleRoot 字段存放了由区块 体中所有交易构成的默克尔树的根节点的值,默 克尔树是一种典型的二叉树[20] ,它包含:根节点、 中间节点以及叶子节点. 其中,非叶子节点的值是 Number of Transactions n Block Header Coinbase Transaction Regular Transaction 1 Regular Transaction 2 ... Regular Transaction n−1 80 bytes VarInt(1~9 bytes) List of Transactions 图 2 块结构 Fig.2 Structure of block in blockchain nVersion hashPrevBlock hashMerkleRoot nTime nBits nNonce Previous Block Header nVersion hashPrevBlock hashMerkleRoot nTime nBits nNonce Block Header Double SHA256 图 3 相邻区块之间关系 Fig.3 Relationship between two adjacent blocks 朱 岩等: 区块链技术及其研究进展 · 1363 ·
1364 工程科学学报,第41卷,第11期 其所有子节点值的哈希值,而叶子节点存储了该 叶子节点.如图4展示了一个简单的基于区块链 区块内的所有交易的哈希值,一个交易对应一个 的默克尔树的数据结构 ho=H(hoollho) h=Hho肠,) hoo=H(to) ho=H(t1) ho=H(t2) h=H(ts) 图4默克尔树 Fig.4 Merkle tree 图4中,t0,t1,t2,t3表示交易,“‖”表示连接运算 式存储在vin0中,#vin用来表示输人交易的个数, 符,H(x)用于表示双SHA256函数,即 输出(x_vout)字段中的输出交易按照数组的形式 H(x)=SHA256(SHA256(x)) (1) 存储在vout0中,vout用来表示输出交易的个数. 哈希值h被称为树的哈希根或默克尔根 交易又分为两种,一种是Coinbase交易,这种 to,1,2,t3四笔交易对应默克尔树的叶子节点,使用 交易只有输出段没有输入段.另一种是常规交易, 哈希函数H()对每笔交易进行计算,分别得到哈希 它可以有多个输人和多个输出.比特币常规交易 值hoo=H(to、hol=Ht)、h1o=Ht2)和hI=H(t3), 中的每个输出都是下一笔交易的输入来源,每一 由于默克尔树中非叶子节点的值为其所有子节点 笔交易的输入也能追溯到上一个交易的输出,所 的值串联形成的字符串的哈希值,所以通过对每 以每一笔交易都可以进行向前溯源,从而找到每 个哈希值进行两两合并哈希,分别形成哈希值o和 笔交易的所有历史记录 h1,最后ho与h1进行两两合并哈希,得到本区块所对 交易脚本语言是为保障比特币中的交易安全 应的默克尔树的根h,存储在该区块的区块头中 而提出,它是一种基于栈的脚本语言(scripting 另外默克尔树的一个显著特点是可以具有很好的 language),具有简单、紧凑、容易理解等特点,并 溯源性2o 且其是非图灵完备的,不支持循环结构 综上所述,与传统分布式数据库相比较,上述 当一笔比特币交易被验证时,每一个输入 区块链的存储方式提供了对交易数据一致性检验 (vin)中包含交易序列号(txid)和解锁脚本(scriptSig), 和完整性验证功能的支持.区块链中每个保存完 其中解锁脚本与输入引用的输出(vout)中的锁定 整数据的节点记录了从创世区块到当前区块的所 脚本(scriptPubKey)同时执行,从而验证(Verify)这 有交易数据,哈希链表能验证各节点中的数据是 笔交易是否有效,如图6所示.解锁脚本是一个 一致的,任何改变都会以密码验证方式被发现.其 “解决”或满足被锁定脚本在一个输出上设定的花 次,默克尔树保证了交易记录不会被恶意篡改 费条件的脚本,它将允许输出被消费.锁定脚本是 3区块链交易 一个放置在输出上面的花费条件,它指定了今后 花费这笔输出必须要满足的条件.每一个比特币 区块链技术的核心基础是对交易(transaction) 验证节点会通过同时执行锁定和解锁脚本来验证 的支持,通过区块链交易可实现数字资产的创建、 一笔交易,如果解锁脚本满足锁定脚本条件,则输 转移、变更、终止等过程.本小节以比特币为例对 入有效.所有输入都是独立验证的,作为交易总体 其交易结构和交易脚本进行研究 验证的一部分 在比特币系统中一个完整的交易由以下的元 经常使用的5类脚本分别是: 素构成的:交易版本(n Version),输入(xvin),输出 (1)Pay-to-Public-Key-Hash(P2PKH) (x_vout)和锁定时间(nLockTime),由图5所示.其 a)scriptPubKey: OP DUP OP HASH160 中输入(仪vin)字段中的输入交易按照数组的形 OP EQUALVERIFY OP CHECKSIG
其所有子节点值的哈希值,而叶子节点存储了该 区块内的所有交易的哈希值,一个交易对应一个 叶子节点. 如图 4 展示了一个简单的基于区块链 的默克尔树的数据结构. t0,t1,t2,t3 H (x) 图 4 中, 表示交易,“||”表示连接运算 符, 用于表示双 SHA256 函数,即 H (x) = SHA256(SHA256(x)) (1) h t0,t1,t2,t3 H (x) h00 = H(t0) h01 = H(t1) h10 = H(t2) h11 = H(t3) h0 h1 h0 h1 h 哈 希 值 被 称 为 树 的 哈 希 根 或 默 克 尔 根 . 四笔交易对应默克尔树的叶子节点,使用 哈希函数 对每笔交易进行计算,分别得到哈希 值 、 、 和 , 由于默克尔树中非叶子节点的值为其所有子节点 的值串联形成的字符串的哈希值,所以通过对每 个哈希值进行两两合并哈希,分别形成哈希值 和 ,最后 与 进行两两合并哈希,得到本区块所对 应的默克尔树的根 ,存储在该区块的区块头中. 另外默克尔树的一个显著特点是可以具有很好的 溯源性[20] . 综上所述,与传统分布式数据库相比较,上述 区块链的存储方式提供了对交易数据一致性检验 和完整性验证功能的支持. 区块链中每个保存完 整数据的节点记录了从创世区块到当前区块的所 有交易数据,哈希链表能验证各节点中的数据是 一致的,任何改变都会以密码验证方式被发现. 其 次,默克尔树保证了交易记录不会被恶意篡改. 3 区块链交易 区块链技术的核心基础是对交易(transaction) 的支持,通过区块链交易可实现数字资产的创建、 转移、变更、终止等过程. 本小节以比特币为例对 其交易结构和交易脚本进行研究. 在比特币系统中一个完整的交易由以下的元 素构成的:交易版本 (nVersion),输入 (tx_vin),输出 (tx_vout) 和锁定时间 (nLockTime),由图 5 所示. 其 中输入 (tx_vin) 字段中的输入交易按照数组的形 式存储在 vin[] 中,#vin 用来表示输入交易的个数, 输出 (tx_vout) 字段中的输出交易按照数组的形式 存储在 vout[] 中,#vout 用来表示输出交易的个数. 交易又分为两种,一种是 Coinbase 交易,这种 交易只有输出段没有输入段. 另一种是常规交易, 它可以有多个输入和多个输出. 比特币常规交易 中的每个输出都是下一笔交易的输入来源,每一 笔交易的输入也能追溯到上一个交易的输出,所 以每一笔交易都可以进行向前溯源,从而找到每 笔交易的所有历史记录. 交易脚本语言是为保障比特币中的交易安全 而提出 ,它是一种基于栈的脚本语言 ( scripting language),具有简单、紧凑、容易理解等特点,并 且其是非图灵完备的,不支持循环结构. 当一笔比特币交易被验证时 ,每一个输入 (vin)中包含交易序列号(txid)和解锁脚本(scriptSig), 其中解锁脚本与输入引用的输出(vout)中的锁定 脚本(scriptPubKey)同时执行,从而验证(Verify)这 笔交易是否有效,如图 6 所示. 解锁脚本是一个 “解决”或满足被锁定脚本在一个输出上设定的花 费条件的脚本,它将允许输出被消费. 锁定脚本是 一个放置在输出上面的花费条件,它指定了今后 花费这笔输出必须要满足的条件. 每一个比特币 验证节点会通过同时执行锁定和解锁脚本来验证 一笔交易,如果解锁脚本满足锁定脚本条件,则输 入有效. 所有输入都是独立验证的,作为交易总体 验证的一部分. 经常使用的 5 类脚本分别是: (1)Pay-to-Public-Key-Hash (P2PKH) a) scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG h= H(h0 ||h1 ) h0= H(h00||h01) h00= H(t0 ) h01= H(t1 ) h11= H(t3 h ) 10= H(t2 ) h1= H(h10||h11) t0 t1 t2 t3 图 4 默克尔树 Fig.4 Merkle tree · 1364 · 工程科学学报,第 41 卷,第 11 期
朱岩等:区块链技术及其研究进展 1365 字段名称 类型 描述 Int nVersion (4 bytes) 交易格式版本(目前为1), Varlnt #vin (1-4 bytes) in中的交易输人的数量 hash unit256 (32 bytes 上一个交易的双SHA256哈希值. Varlnt n (4 bytes) 由hash指定的交易内的交易输出的索引 tx_vin vin Varlnt scriptSigLen (1-9 bytes) scriptSig字段的长度,以字节为单位. scriptSig CScript 用于满足交易输出(hash,n)的花费 (Variable 条件的脚本 nSequence unit (4 bytes) 交易输入序列号 Varlnt #vout (1-4 bytes vout中的交易输出的数量 unit256 nValue (32 bytes 存储输出要花费的比特币数量 tx_vout Varlnt vout scriptPubkeyLen (4 bytes scriptPubkey字段的长度,以字节为单位. Varlnt scriptPubkey 1-9 bytes 定义了交易输出所需条件的脚本 unsigned int 交易的锁定时间,一旦超过锁定时间, nLock Time (4 bytes 交易就被锁定计入区块中. 图5常规交易结构 Fig.5 Structure of regular transaction Transaction Transaction vin vin txid txid scriptSig scriptSig Verify vout vout scriptPubKey◆ scriptPubKey scriptSig scriptPubKey (解锁脚本)▲ (锁定脚本) 人 OP DUP OP HASH160 OP EQUALVERIFY OP CHECKSIG 图6比特币交易脚本 Fig.6 Bitcoin transaction script b)scriptSig: 编码而来,所以必须拥有该地址的私钥才能将锁 P2PKH(Pay-to-Public-Key-Hash)是最常用的交 定脚本解锁 易脚本,用于向公钥地址支付数字资产.如图6所 (2)Pay-to-Public-Key (P2PK) 示,解锁脚本由签名与公钥组成,锁定脚 a)scriptPubKey:OP_CHECKSIG 本是由一连串堆栈命令和公钥哈希 b)scriptSig: 组成,公钥哈希由两个哈希函数生成,大小20字节; P2PK是P2PKH的简化形式,但不再用于新交 比特币地址实际是由该公钥哈希进行Base58 check 易,因为P2PKH脚本更安全(公共密钥在输出用
b)scriptSig: P2PKH(Pay-to-Public-Key-Hash)是最常用的交 易脚本,用于向公钥地址支付数字资产. 如图 6 所 示,解锁脚本由签名与公钥组成,锁定脚 本是由一连串堆栈命令和公钥哈希 组成,公钥哈希由两个哈希函数生成,大小 20 字节; 比特币地址实际是由该公钥哈希进行 Base58check 编码而来,所以必须拥有该地址的私钥才能将锁 定脚本解锁. (2)Pay-to-Public-Key (P2PK) a)scriptPubKey: OP_CHECKSIG b)scriptSig: P2PK 是 P2PKH 的简化形式,但不再用于新交 易,因为 P2PKH 脚本更安全(公共密钥在输出用 字段名称 描述 nVersion 交易格式版本(目前为1). tx_vin #vin vin[] hash n scriptSigLen scriptSig nSequence VarInt (1~4 bytes) Int (4 bytes) 类型 unit256 (32 bytes) VarInt (4 bytes) VarInt (1~9 bytes) CScript (Variable) unit (4 bytes) vin中的交易输入的数量. 上一个交易的双SHA256哈希值. 由hash指定的交易内的交易输出的索引. scriptSig字段的长度,以字节为单位. 用于满足交易输出(hash,n)的花费 条件的脚本. 交易输入序列号. tx_vout #vout vout[] nValue scriptPubkeyLen scriptPubkey nLockTime VarInt (1~4 bytes) unit256 (32 bytes) VarInt (4 bytes) VarInt (1~9 bytes) unsigned int (4 bytes) vout中的交易输出的数量. 存储输出要花费的比特币数量. scriptPubkey字段的长度,以字节为单位. 定义了交易输出所需条件的脚本. 交易的锁定时间,一旦超过锁定时间, 交易就被锁定计入区块中. 图 5 常规交易结构 Fig.5 Structure of regular transaction Transaction OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG scriptSig (解锁脚本) scriptPubKey (锁定脚本) Transaction vin txid scriptSig vout scriptPubKey vin txid scriptSig vout scriptPubKey Verify 图 6 比特币交易脚本 Fig.6 Bitcoin transaction script 朱 岩等: 区块链技术及其研究进展 · 1365 ·
·1366 工程科学学报,第41卷,第11期 完之前不会显示) 5 共识算法 (3)Multi-Signature (MultiSig) a)scriptPubKey:M ...N 5.1共识算法分类 OP_CHECKMULTISI 共识算法(consensus algorithm)是指在多方协 b)scriptSig:OP_0.. 同环境下使所有参与方对任务执行结果达成一致 Multisig允许在几个地址之间共享数字资产 (共识)的算法)共识算法多应用于确保分布式 的控制.在创建脚本时,可以指定控制资产的公 系统数据一致,在区块链中引入共识算法最早是 钥,以及签署有效支出交易所需的密钥数量 为了解决新交易块加入哈希链表中可能出现的 (4)Pay-to-Script-Hash(P2SH) “块冲突”问题,也就是同时多个块被不同的 a)scriptPubKey:OP HASH160 块创建者加入到哈希链表中而引起的链表分叉 OP EQUAL (forking)问题回,它可能会导致双重花费(double b)scriptSig: spending)与交易无效的风险 P2SH是一段包含了其他脚本哈希值的脚本, 区块链共识算法根据设计思想可分为以下 任何想要花费P2SH类型输出的交易需要提供匹 几类: 配该哈希值的脚本 (1)证明类:核心思想是建块节点需证明自己 (5)Data Output(OP_RETURN) 具有某种能力或完成了某种事情才能合法建块, a)scriptPubkey:OP RETURN 通常共识方式是完成一些难以解决却易于验证的 b)NO scriptSig 难题去竞争建块的权利阿常见的有工作量证明 Data outputs常被用于向区块链中添加额外数 (proof of work,PoW)2,权益证明(proof of stake,. 据,一般数据大小不超过40字节 PoS)27等 (2)拜占庭类:以拜占庭协议为基础设计整个 4 区块链网络 算法,建块节点通常是由其他节点投票选举或从 区块链建立在非中心化的、对等点对点(P2P) 所有符合一定条件的节点中随机选举.常见的有实 网络基础上,可支持全球范围内任意人员自由接 用拜占庭容错算法(practical Byzantine fault tolerance,. 入退出四网络中的资源和服务分散在所有节点 PBFT)2,Algorand算法29等 上,信息的传输和服务的实现都直接在节点之间 (3)传统共识类:将传统分布式系统的一致性 进行,无需中间环节和服务器的介入,避免了可能 算法应用于区块链系统.通常算法共识效率较高, 的瓶颈 但不支持拜占庭容错,即不考虑恶意篡改和伪造 区块链按技术类型可分为公有链和联盟链. 数据的拜占庭节点.典型的有Rat算法B0 公有链在网络拓扑上服从小世界模型(small (4)混合类共识:使用多种共识算法的混合体 world model)2).该模型具有特征路径长度较小、 来选择建块节点.比如PoW和PoS混合的Casper 聚合系数较大的特点,在这样的网络中,数据只需 算法B),Raf与PBFT混合的Tangaroa算法B等 要经过较少节点(6度原则)就可达到目的节点,从 以下几小节简要阐述包括工作量证明,权益 而保证了交易信息在大规模区块链网络(10万以 证明,实用拜占庭容错和Algorand在内的几类代 上节点)中传播的高效性.公有链网络拓扑的“高 表性区块链共识算法, 聚集度”和“短链”特征使得区块链可以支撑世界 5.2工作量证明(PoW) 各地的海量用户进行大规模、并发地交易,及时地 PoW是比特币中使用的共识算法,其核心思 将交易数据通过记账节点生成区块的方式存储, 想是通过节点的计算能力,即“算力”来竞争建块 并实现全网内的数据同步,为保证区块链数据的 权和奖励.算法关键是在区块头中加入不同的随 健壮性、完整性和一致性奠定了网络基础 机值,计算区块头哈希值,直到此哈希值小于或等 联盟链基于全连通网络,所有节点都是互连 于目标值,解决此问题的过程称为挖矿(mining) 的.每个节点能够管理较大规模用户,包括,用户 挖矿可分为两个步骤,第一步为获取当前的目标 个人信息、权限、密钥(包括公私密钥)等.与公 值.目标值T是一个256位的二进制数字,图3中 有链任何人可随时加入和撤离不同,联盟链中节 nBits是T的32位紧凑表示,它可被8个16进制数 点通常数目固定、接入管理更加严格 0xhoh1h2h3h4 hshoh7编码,T的计算公式B为:
完之前不会显示). (3)Multi-Signature (MultiSig) a) scriptPubKey: M ... N OP_CHECKMULTISI b)scriptSig: OP_0 ... Multisig 允许在几个地址之间共享数字资产 的控制. 在创建脚本时,可以指定控制资产的公 钥,以及签署有效支出交易所需的密钥数量. (4)Pay-to-Script-Hash (P2SH) a) scriptPubKey: OP_HASH160 OP_EQUAL b)scriptSig: P2SH 是一段包含了其他脚本哈希值的脚本, 任何想要花费 P2SH 类型输出的交易需要提供匹 配该哈希值的脚本. (5) Data Output (OP_RETURN) a)scriptPubkey: OP_RETURN b)NO scriptSig Data outputs 常被用于向区块链中添加额外数 据,一般数据大小不超过 40 字节. 4 区块链网络 区块链建立在非中心化的、对等点对点(P2P) 网络基础上,可支持全球范围内任意人员自由接 入退出[21] . 网络中的资源和服务分散在所有节点 上,信息的传输和服务的实现都直接在节点之间 进行,无需中间环节和服务器的介入,避免了可能 的瓶颈. 区块链按技术类型可分为公有链和联盟链. 公有链在网络拓扑上服从小世界模型(small world model) [22] . 该模型具有特征路径长度较小、 聚合系数较大的特点,在这样的网络中,数据只需 要经过较少节点(6 度原则)就可达到目的节点,从 而保证了交易信息在大规模区块链网络(10 万以 上节点)中传播的高效性. 公有链网络拓扑的“高 聚集度”和“短链”特征使得区块链可以支撑世界 各地的海量用户进行大规模、并发地交易,及时地 将交易数据通过记账节点生成区块的方式存储, 并实现全网内的数据同步,为保证区块链数据的 健壮性、完整性和一致性奠定了网络基础. 联盟链基于全连通网络,所有节点都是互连 的. 每个节点能够管理较大规模用户,包括,用户 个人信息、权限、密钥(包括公/私密钥)等. 与公 有链任何人可随时加入和撤离不同,联盟链中节 点通常数目固定、接入管理更加严格. 5 共识算法 5.1 共识算法分类 共识算法(consensus algorithm)是指在多方协 同环境下使所有参与方对任务执行结果达成一致 (共识) 的算法[23] . 共识算法多应用于确保分布式 系统数据一致,在区块链中引入共识算法最早是 为了解决新交易块加入哈希链表中可能出现的 “块冲突”问题[24] ,也就是同时多个块被不同的 块创建者加入到哈希链表中而引起的链表分叉 ( forking)问题[2] ,它可能会导致双重花费( double spending)与交易无效的风险. 区块链共识算法根据设计思想可分为以下 几类: (1)证明类:核心思想是建块节点需证明自己 具有某种能力或完成了某种事情才能合法建块, 通常共识方式是完成一些难以解决却易于验证的 难题去竞争建块的权利[25] . 常见的有工作量证明 ( proof of work,PoW) [26] ,权益证明( proof of stake, PoS) [27] 等. (2)拜占庭类:以拜占庭协议为基础设计整个 算法,建块节点通常是由其他节点投票选举或从 所有符合一定条件的节点中随机选举. 常见的有实 用拜占庭容错算法(practical Byzantine fault tolerance, PBFT) [28] ,Algorand 算法[29] 等. (3)传统共识类:将传统分布式系统的一致性 算法应用于区块链系统. 通常算法共识效率较高, 但不支持拜占庭容错,即不考虑恶意篡改和伪造 数据的拜占庭节点. 典型的有 Raft 算法[30] . (4)混合类共识:使用多种共识算法的混合体 来选择建块节点. 比如 PoW 和 PoS 混合的 Casper 算法[31] ,Raft 与 PBFT 混合的 Tangaroa 算法[32] 等. 以下几小节简要阐述包括工作量证明,权益 证明,实用拜占庭容错和 Algorand 在内的几类代 表性区块链共识算法. 5.2 工作量证明(PoW) T T 0xh0h1h2h3h4h5h6h7 T PoW 是比特币中使用的共识算法,其核心思 想是通过节点的计算能力,即“算力”来竞争建块 权和奖励. 算法关键是在区块头中加入不同的随 机值,计算区块头哈希值,直到此哈希值小于或等 于目标值,解决此问题的过程称为挖矿(mining). 挖矿可分为两个步骤,第一步为获取当前的目标 值. 目标值 是一个 256 位的二进制数字,图 3 中 nBits 是 的 32 位紧凑表示,它可被 8 个 16 进制数 编码, 的计算公式[33] 为: · 1366 · 工程科学学报,第 41 卷,第 11 期
朱岩等:区块链技术及其研究进展 ·1367 T=0xh2h3h4hsh6h7x28x(0xhom-3) (2) 赋值一个序列号,主节点向其他服务器节点广播 最初的目标值在创世区块中被设置为 预准备消息,其他服务器节点最初确定是否接受 0x1D00FFFF,之后每2016个区块会后会重新计算 请求; 目标值,新目标值Tew的计算与建2016个块花费 (3)准备阶段:服务器节点选择接受请求,则 的总时间tsum和新目标值的上一个目标值Toad有 向其他所有服务节点广播准备消息,并从其他节 关.14×24×60×60是14d的总秒数,1um是花费的 点接受准备消息,在收到2f+1条消息后,如果大多 实际秒数,则Tew的计算公式B为: 数节点接受请求,则进入提交阶段: fsum (4)提交阶段:处于提交状态的每个节点都向 Taew =14x24X60x60x Told (3) 服务器中的所有其他节点发送提交消息.同时,如 第二步为变换随机值,即图3中的nNonce,使 果服务器节点收到2f+1条提交消息,则可以认为 得H(Block Header)≤T. 大多数节点达成共识以接受该请求.然后,节点执 挖到矿的节点可以创建一个块并获得一定数 行请求消息中的指令,并发送响应; 量的比特币奖励.PoW具体步骤如下: (5)响应阶段:客户端等待来自不同节点的响 (1)矿工节点对一段时间内全网待处理的交 应,若有∫+1个响应相同,则该响应即为算法的一 易验证并将通过验证的交易打包,然后计算这些 致结果 交易的hashMerkleRoot;: 5.5基于Algorand的共识协议 (2)计算当前目标难度值T,将目标难度值与 Algorand是一种新型的拜占庭共识算法 hashMerkleRoot等其他字段组成区块头,并将 Algorand设计目标是成为一种低能耗,低分叉概 80字节的区块头作为PoW算法的输入; 率,可扩展性好,抗攻击能力强的共识算法,为了 (3)不断变更块头中的随机数,对变更后的区 达到这个目标,采用了以下技术例: 块头做双重SHA256哈希运算,与目标值做比对, (I)可验证随机函数(verifiable random function, 如果小于等于目标值,即PoW完成; VRF)B叨VRF是一种伪随机函数,能提供证明其 (4)矿工节点将上述区块向全网广播,其他节 输出正确性的公开可验证证据.给定输入值x,密钥 点将验证其是否符合规则,如果验证有效,则将接 SK可以得到函数值y=FsK(x)和证明P.使用x、 收此区块,并附加在已有区块链之后,而后进入下 P和公钥PK,每个人不需要SK就可检查y=FsK(,) 一轮 的正确性,且无法得到SK的信息.利用VRF和 5.3权益证明(PoS) 设定的目标值组合成“抽签”函数代替挖矿解决区 PoS是点点币(PPCoin)B两使用的共识算法,其 块链建块需要大量计算哈希值所造成的能源浪费 核心思想是在PoW的基础上,为减轻PoW计算哈 问题 希的工作量,使用币龄作为一个变量来影响参与 (2)委员会投票.从全体用户中随机选取委员 挖矿的难度,挖矿难度同区块链中矿工拥有的代 会成员,让委员会成员进行建块,验块等操作,而 币数量与持有代币时间的乘积成反比. 非全体成员参与共识,减轻网络负担,增加了系统 挖矿主要方式为先获得当前节点的余额及代 的可扩展性,而且投票协商选出块的方式相较于 币持有时间和公开的目标值,计算挖矿的真实目 各节点独自建块、广播块的行为更不容易造成“块 标值后,再进行计算哈希值的步骤.PoS的执行过 冲突”,降低了分叉概率 程与PoW类似,只是多了记录币龄,利用币龄计 (3)加权用户.为防止敌手大量制造“假名”, 算真正目标值的过程 在选举中占据优势,算法将用户权益与拥有资产 5.4实用拜占庭容错算法(PBFT) 相关联,设定每个成员需有资产才有权被选为委 PBFT是开源项目Hyperledgert5使用的共识 员会成员,且被选为委员会成员的可能性与资产 算法之一,它是拜占庭算法的改进,降低了算法的 数量正相关,分散资产给“假名”的方式不能提高 复杂程度,相较于原算法更具实用性.算法中有 被选为委员会成员的概率,攻击者在选举中不能 3f+1个节点,可以容忍f个拜占庭错误的节点整个 占据优势 算法按照以下阶段来进行操作28,: (4)加密抽签和参与者替换.为防止敌手攻击 (1)请求阶段:客户端向主服务器节点发送请求; 委员,以加密抽签的方式选举委员,且每次投票后 (2)预准备阶段:主节点接收请求后,给请求 需重新抽签.加密抽签是指抽签结果只有抽签者
T = 0xh2h3h4h5h6h7 ×2 8×(0xh0h1−3) (2) Tnew tsum Told 14×24×60×60 tsum Tnew 最 初 的 目 标 值 在 创 世 区 块 中 被 设 置 为 0x1D00FFFF,之后每 2016 个区块会后会重新计算 目标值,新目标值 的计算与建 2016 个块花费 的总时间 和新目标值的上一个目标值 有 关. 是 14 d 的总秒数, 是花费的 实际秒数,则 的计算公式[33] 为: Tnew = tsum 14×24×60×60 ×Told (3) H (Block Header) ⩽ T 第二步为变换随机值,即图 3 中的 nNonce,使 得 . 挖到矿的节点可以创建一个块并获得一定数 量的比特币奖励. PoW 具体步骤如下: (1)矿工节点对一段时间内全网待处理的交 易验证并将通过验证的交易打包,然后计算这些 交易的 hashMerkleRoot; (2)计算当前目标难度值 T ,将目标难度值与 hashMerkleRoot 等 其 他 字 段 组 成 区 块 头 , 并 将 80 字节的区块头作为 PoW 算法的输入; (3) 不断变更块头中的随机数,对变更后的区 块头做双重 SHA256 哈希运算,与目标值做比对, 如果小于等于目标值,即 PoW 完成; (4)矿工节点将上述区块向全网广播,其他节 点将验证其是否符合规则,如果验证有效,则将接 收此区块,并附加在已有区块链之后,而后进入下 一轮. 5.3 权益证明(PoS) PoS 是点点币(PPCoin) [34] 使用的共识算法,其 核心思想是在 PoW 的基础上,为减轻 PoW 计算哈 希的工作量,使用币龄作为一个变量来影响参与 挖矿的难度,挖矿难度同区块链中矿工拥有的代 币数量与持有代币时间的乘积成反比. 挖矿主要方式为先获得当前节点的余额及代 币持有时间和公开的目标值,计算挖矿的真实目 标值后,再进行计算哈希值的步骤. PoS 的执行过 程与 PoW 类似,只是多了记录币龄,利用币龄计 算真正目标值的过程. 5.4 实用拜占庭容错算法(PBFT) 3 f +1 f PBFT 是开源项目 Hyperledger[35] 使用的共识 算法之一,它是拜占庭算法的改进,降低了算法的 复杂程度,相较于原算法更具实用性. 算法中有 个节点,可以容忍 个拜占庭错误的节点整个 算法按照以下阶段来进行操作[28,36] : (1)请求阶段:客户端向主服务器节点发送请求; (2)预准备阶段:主节点接收请求后,给请求 赋值一个序列号,主节点向其他服务器节点广播 预准备消息,其他服务器节点最初确定是否接受 请求; 2 f +1 (3)准备阶段:服务器节点选择接受请求,则 向其他所有服务节点广播准备消息,并从其他节 点接受准备消息,在收到 条消息后,如果大多 数节点接受请求,则进入提交阶段; 2 f +1 (4)提交阶段:处于提交状态的每个节点都向 服务器中的所有其他节点发送提交消息. 同时,如 果服务器节点收到 条提交消息,则可以认为 大多数节点达成共识以接受该请求. 然后,节点执 行请求消息中的指令,并发送响应; f +1 (5)响应阶段:客户端等待来自不同节点的响 应,若有 个响应相同,则该响应即为算法的一 致结果. 5.5 基于 Algorand 的共识协议 Algorand 是 一 种 新 型 的 拜 占 庭 共 识 算 法 . Algorand 设计目标是成为一种低能耗,低分叉概 率,可扩展性好,抗攻击能力强的共识算法,为了 达到这个目标,采用了以下技术[29] : x SK y = FSK (x) P x P PK SK y = FSK (x) SK (1)可验证随机函数(verifiable random function, VRF) [37] . VRF 是一种伪随机函数,能提供证明其 输出正确性的公开可验证证据. 给定输入值 ,密钥 可以得到函数值 和证明 . 使 用 、 和公钥 ,每个人不需要 就可检查 的正确性 ,且无法得到 的信息. 利用 VRF 和 设定的目标值组合成“抽签”函数代替挖矿解决区 块链建块需要大量计算哈希值所造成的能源浪费 问题. (2)委员会投票. 从全体用户中随机选取委员 会成员,让委员会成员进行建块,验块等操作,而 非全体成员参与共识,减轻网络负担,增加了系统 的可扩展性,而且投票协商选出块的方式相较于 各节点独自建块、广播块的行为更不容易造成“块 冲突”,降低了分叉概率. (3)加权用户. 为防止敌手大量制造“假名”, 在选举中占据优势,算法将用户权益与拥有资产 相关联,设定每个成员需有资产才有权被选为委 员会成员,且被选为委员会成员的可能性与资产 数量正相关,分散资产给“假名”的方式不能提高 被选为委员会成员的概率,攻击者在选举中不能 占据优势. (4)加密抽签和参与者替换. 为防止敌手攻击 委员,以加密抽签的方式选举委员,且每次投票后 需重新抽签. 加密抽签是指抽签结果只有抽签者 朱 岩等: 区块链技术及其研究进展 · 1367 ·
1368 工程科学学报,第41卷,第11期 自己知道,即委员会成员在参与共识以前,其他节 明(DPoS)的执行速度和吞吐量(TPS)低于PBFT 点无法知晓节点的委员身份,所以敌手无法进行 和Raft,但可扩展性强于两者;Raft不支持拜占庭 事前攻击:委员会成员在参与共识,投出票之后, 容错,安全性方面低于PBFT,但TPS高于PBFT 再次投票需要重新抽签,这使敌手的事后攻击失 事实上,共识算法性能在效率、可扩展性和安全性 去了意义 方面确实存在博弈的过程,难以全面提高,由此才 表1给出常见的5种共识算法性能对比,可见 有各种共识算法共存,应用于不同的场景,而不是 共识算法各有优势,比如PoW、PoS及委托权益证 种共识算法取代其他所有算法, 表1共识算法对比网 Table 1 Comparison of consensus algorithm 共识算法 执行速度 可扩展性 拜占庭容错 TPS 代表应用 PoW >100s 强 10000 Etcd 6 智能合约 执行这些承诺的协议” 6.1智能合约概述 广义的智能合约指的是:数字形式的可自动 智能合约(smart contract).这个术语由跨领域 执行的协议:狭义上的智能合约一般是指:部署在 法律学者尼克萨博(Nick Szabo)在1995年提出IB, 区块链上可以自动执行的代码.智能合约大致分 他给出的智能合约的定义是“一套以数字形式定 为合约模块、执行模块和区块链模块三个模块,如 义的承诺(promise),包括合约参与方可以在上面 图7所示 合约模块 执行模块 区块链模块 法律效力 强制执行 自然语言 资源挖矿门 挖利奖励] 交易费用 机器 逐句 语言 解释 激励机制 合同语言 执行 PoW PoS DPoS 法律效力 便于阅读 书写规范 编译执行 解释执行 结果 共识机制 规约语言 P2P协议 多播☐ 接人管理 网路通信 自动执行 数字资产 身份认证 沙盒 虚拟机 容器 链上 分布式账不 数据结构 数字签名 智能合约编程语言 执行环境 数据 数据 图7智能合约执行过程 Fig.7 Execution process of smart contracts (1)区块链模块:区块链层封装了支持智能合 状态,计算出执行结果.然后,将调用参数与计算 约运行,赋予智能合约去中心化、不可篡改等特性 结果广播至全网,由所有挖矿节点执行验证,在达 的关键技术 成共识之后与其他交易组装成区块,记录在区块 (2)执行模块:执行层封装了智能合约的执行 链中 环境 区块链与智能合约结合主要体现在以下几点: (3)合约模块:合约层封装了参与方从沟通协 (1)智能合约采用区块链的共识机制,由所有 商到编写出一份智能合约中的语言 挖矿节点运行智能合约程序,程序运算结果经过 6.2区块链层与智能合约关系 P2P网络传播并达成共识上传到区块链上. 智能合约执行是基于事件触发机制的,区块 (2)区块链为智能合约提供存储空间.区块链 链中保存智能合约的一个中间状态,当有外部事 中的数据是经过共识的且不可篡改的,保证了智 件时如账户调用、定时器自动调用等,调用者会先 能合约数据来源的可信性 在本地执行合约,通过从区块链中获取代码、合约 (3)区块链的激励机制促使挖矿节点参与运行
自己知道,即委员会成员在参与共识以前,其他节 点无法知晓节点的委员身份,所以敌手无法进行 事前攻击;委员会成员在参与共识,投出票之后, 再次投票需要重新抽签,这使敌手的事后攻击失 去了意义. 表 1 给出常见的 5 种共识算法性能对比,可见 共识算法各有优势,比如 PoW、PoS 及委托权益证 明 (DPoS)的执行速度和吞吐量(TPS)低于 PBFT 和 Raft,但可扩展性强于两者;Raft 不支持拜占庭 容错,安全性方面低于 PBFT,但 TPS 高于 PBFT. 事实上,共识算法性能在效率、可扩展性和安全性 方面确实存在博弈的过程,难以全面提高,由此才 有各种共识算法共存,应用于不同的场景,而不是 一种共识算法取代其他所有算法. 6 智能合约 6.1 智能合约概述 智能合约(smart contract)这个术语由跨领域 法律学者尼克萨博(Nick Szabo)在 1995 年提出[38] , 他给出的智能合约的定义是“一套以数字形式定 义的承诺(promise),包括合约参与方可以在上面 执行这些承诺的协议[39] . ” 广义的智能合约指的是:数字形式的可自动 执行的协议;狭义上的智能合约一般是指:部署在 区块链上可以自动执行的代码. 智能合约大致分 为合约模块、执行模块和区块链模块三个模块,如 图 7 所示. (1) 区块链模块:区块链层封装了支持智能合 约运行,赋予智能合约去中心化、不可篡改等特性 的关键技术. (2) 执行模块:执行层封装了智能合约的执行 环境. (3) 合约模块:合约层封装了参与方从沟通协 商到编写出一份智能合约中的语言. 6.2 区块链层与智能合约关系 智能合约执行是基于事件触发机制的,区块 链中保存智能合约的一个中间状态,当有外部事 件时如账户调用、定时器自动调用等,调用者会先 在本地执行合约,通过从区块链中获取代码、合约 状态,计算出执行结果. 然后,将调用参数与计算 结果广播至全网,由所有挖矿节点执行验证,在达 成共识之后与其他交易组装成区块,记录在区块 链中. 区块链与智能合约结合主要体现在以下几点: (1) 智能合约采用区块链的共识机制,由所有 挖矿节点运行智能合约程序,程序运算结果经过 P2P 网络传播并达成共识上传到区块链上. (2) 区块链为智能合约提供存储空间. 区块链 中的数据是经过共识的且不可篡改的,保证了智 能合约数据来源的可信性. (3) 区块链的激励机制促使挖矿节点参与运行 表 1 共识算法对比[36] Table 1 Comparison of consensus algorithm[36] 共识算法 执行速度 可扩展性 拜占庭容错 TPS 代表应用 PoW >100 s 强 10000 Etcd 合同语言 法律效力 强制执行 自然语言 规约语言 法律效力 便于阅读 书写规范 智能合约编程语言 自动执行 数字资产 身份认证 合约模块 共识机制 PoW PoS DPoS 网络通信 P2P协议 多播 接入管理 数据 分布式账本 数据结构 数字签名 区块链模块 激励机制 资源挖矿 挖矿奖励 交易费用 代码 链上 数据 执行 编译执行 结果 机器 语言 执行环境 沙盒 执行模块 解释执行 逐句 解释 虚拟机 容器 转化 图 7 智能合约执行过程 Fig.7 Execution process of smart contracts · 1368 · 工程科学学报,第 41 卷,第 11 期
朱岩等:区块链技术及其研究进展 ·1369· 和验证智能合约程序 动停机并回滚 由于智能合约的验证过程需要全部挖矿节点 6.3执行模块 运行智能合约,一旦出现无限循环或是过于复杂 目前各个平台智能合约的执行方式与执行 的程序代码,会占用大量计算资源甚至导致区块 环境有所不同,下面主要以比特币、以太坊、 链网络崩溃,且在公有链中这点很容易成为恶意 Hyperledger Fabric三个平台介绍 节点的攻击方式,需要采取一定限制措施.如:以 比特币内置一套的基于栈的脚本执行引擎对 太坊采用了收取交易费的方式来对合约的执行进 脚本进行解释执行.图8是解锁脚本对锁定脚本 行限制,当用户支付的交易费不足时,合约程序自 的解锁过程,具体步骤如下: Combined Script(组合脚本) Stacks(栈) ,.OP_DUP.OP_HASH256,.OP_EQUALVERIFY.OP_CHECKSIG 2 ,OP_DUP.OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG 3OP_DUP,OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG pk >,sig 4OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG pk >, ,OP_EQUALVERIFY,OP CHECKSIG SHA256d(pk),pk >pk >, 6 OP_EQUALVERIFY,OP CHECKSIG pk hash >SHA256d(pk),sig> 7 OP CHECKSIG pk >入栈,置于栈顶; 功能,理论上可以用任何语言来编写.Docker也是 (3)将入栈,置于栈顶; 独立的沙盒,相较于EVM更加轻量,但对于智能 (4)执行OP DUP操作,复制并置于栈顶; 合约执行流程的控制没有EVM强. (⑤)对复制的值进行OP HASH256哈希 6.4合约模块 计算操作,记做SHA256(pk),置于栈顶; 创建合约是将参与方协商达成一致的结果编 (6)将入栈,置于栈顶; 译成计算机可执行代码.在这一过程中,需要考虑 (7)对和SHA256(pk)进行比较操 法律和金融等专家与程序员沟通问题、合约代码 作,如果值一致,则相继出栈: 与法律对接的问题、代码逻辑安全性问题及智能 (8)将签名和公钥进行匹配,如果匹 合约语言表达能力问题等 配成功,则会返回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) 将入栈,置于栈顶; (3) 将入栈,置于栈顶; (4) 执行 OP_DUP 操作,复制并置于栈顶; (5) 对复制的值进行 OP_HASH256 哈希 计算操作,记做 SHA256(pk),置于栈顶; (6) 将入栈,置于栈顶; (7) 对 和 SHA256(pk) 进 行 比 较 操 作,如果值一致,则相继出栈; (8) 将签名和公钥进行匹配,如果匹 配成功,则会返回 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 语言等,各自的代 码风格不同. ,,OP_DUP,OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG ,OP_DUP,OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG OP_DUP,OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG OP_HASH256,,OP_EQUALVERIFY,OP_CHECKSIG ,OP_EQUALVERIFY,OP_CHECKSIG OP_EQUALVERIFY,OP_CHECKSIG OP_CHECKSIG , , , SHA256d(pk), , , , SHA256d(pk), , , , True 1 2 3 4 5 6 7 8 Combined Script(组合脚本) Stacks(栈) 图 8 交易有效性校验过程 Fig.8 Transaction validity verification process 朱 岩等: 区块链技术及其研究进展 · 1369 ·
·1370 工程科学学报,第41卷,第11期 Hyperledge Fabric智能合约的结构分为以下四 竞标者提前将最高价转入合约,但这种方式显然 部分:main、init、query和invoke函数 有不合理之处 (1)main函数:作为程序的入口; Kosba等2提出一种可以自动生成加密协议 (2)init函数:在智能合约首次被部署时调用, 的工具Hawk,通过在区块链上存储金融交易的特 负责所有初始化工作: 殊加密形式,从而保证链上数据只有拥有者可见, (3)query函数:负责所有的查询: 但其分布式沙箱的构造仍是一个未解决的问题. (4)invoke函数:负责执行函数的调用 还有一些人通过零知识证明的方法扩展交易 以太坊支持多种智能合约语言,以太坊智能 协议4),构建货币体系,以此来加强匿名性,从 合约语言是图灵完备的,使得开发者能够创建任 而保证交易的隐私性,但结构针对性较强,缺乏普 意的基于共识、可扩展、标准化、特性完备、易于 适性 开发和协同的应用,Solidity语言与传统面向对象 在文献[45]和[46,多方安全计算被应用到了 语言类似,其结构大致如下: 比特币脚本中,保证交易的忠实性和隐私性,文 (1)变量定义:合约中的全局变量是存储在区 献[4刀中多方安全计算则被推广到了一般的智能 块链中的,这里定义了合约的属性以及需要记录 合约中,封装了多方安全计算的计算过程与网络 的信息; 通信,上层智能合约编程人员只需将计算符号替 (2)事件定义:定义需要记录的事件及参数; 换为安全计算符号而无需考虑实现问题 (3)修饰器定义:修饰器用来修饰函数,判断函 6.6智能合约存在的问题 数执行条件; 智能合约在以以太坊为代表的区块链推动 (4)函数定义:具体函数实现 下,有了很大的发展,技术日益成熟,但是发展过 合同语言写法自由,且依赖于常识与法律,很 程中依旧存在一些问题4 难直接向智能合约编程语言转化.SPESCI40I是一 (1)安全问题:2016年5月,以太坊最大众筹项 种类自然语言的智能合约规约语言,试图通过类 目The DAO被攻击者利用程序中的递归调用漏洞 自然语言、规范化书写化的结构与书写、半自动 获取了大量以太币,这个问题引发了大众对于智 化向Solidity转换的方式解决不同领域专家沟通、 能合约安全性和法律问题的思考.Luu等9提出 法律效力以及部分逻辑安全问题.SPESC结构 了检查智能合约漏洞的工具Oyente,文中利用工 如下: 具检查了以太坊中包含3068654以太币、价值三 (I)角色定义:定义参与方的角色,同时定义角 千万美金的19366个合约,其中有8833个合约至 色属性与可执行动作: 少包含一种安全漏洞. (2)变量定义:定义合约中需要记录的信息; (2)法律问题:The DAO事件对法律也提出了 (3)条款定义:定义角色对应的权利或义务,包 巨大挑战.首先,界定“漏洞”困难,智能合约与实 含角色、动作、执行条件、资金转移、后置条件等 际合约无法显示转换;其次是由于区块链不可更 信息 改,智能合约难以撤销.目前也有一些对于智能合 SPESC条款的表示类似于自然语言,如: 约从法律的角度上讨论模板与标准化格式,讨论 term no2 Seller can abort 了法律与参数、代码联系以及数据标准与合约特 when before buyer did pay 点的层面 表示卖家可以在买家付款前终止合约, (3)效率问题:区块链系统本身存在的吞吐量 6.5面向隐私的智能合约框架 低、交易延迟、能耗过高、容量和带宽限制等性能 区块链中的所有交易、合约和用户余额都可 问题极大限制了智能合约的执行效率,且由于智 被链上的用户公开查看.比如在竞标合约当中,竞 能合约顺序执行,当交易增多以后,将导致交易确 标参与方不想让其他人知道自己的出价,Solidity 认很慢,且交易费会变高 的技术文档)提出参与方可以在智能合约中通过 7挑战与机遇 加密手段出价,最后竞标结束再公布价格.但是, 如果要保证竞标者不违约,需要竞标者在投标时 尽管目前区块链技术日益成熟,但是仍然存 向合约转入资金,然而资金的转移也是公开的,于 在一些问题.比如:资源浪费问题,BitCoin中的挖 是只能设置一个最高价或是设置一些虚假出价, 矿步骤需要计算机系统进行大量的计算,造成时
Hyperledge Fabric 智能合约的结构分为以下四 部分:main、init、query 和 invoke 函数. (1) main 函数:作为程序的入口; (2) init 函数:在智能合约首次被部署时调用, 负责所有初始化工作; (3) query 函数:负责所有的查询; (4) invoke 函数:负责执行函数的调用. 以太坊支持多种智能合约语言,以太坊智能 合约语言是图灵完备的,使得开发者能够创建任 意的基于共识、可扩展、标准化、特性完备、易于 开发和协同的应用,Solidity 语言与传统面向对象 语言类似,其结构大致如下: (1) 变量定义:合约中的全局变量是存储在区 块链中的,这里定义了合约的属性以及需要记录 的信息; (2) 事件定义:定义需要记录的事件及参数; (3) 修饰器定义:修饰器用来修饰函数,判断函 数执行条件; (4) 函数定义:具体函数实现. 合同语言写法自由,且依赖于常识与法律,很 难直接向智能合约编程语言转化. SPESC[40] 是一 种类自然语言的智能合约规约语言,试图通过类 自然语言、规范化书写化的结构与书写、半自动 化向 Solidity 转换的方式解决不同领域专家沟通、 法律效力以及部分逻辑安全问题. SPESC 结构 如下: (1) 角色定义:定义参与方的角色,同时定义角 色属性与可执行动作; (2) 变量定义:定义合约中需要记录的信息; (3) 条款定义:定义角色对应的权利或义务,包 含角色、动作、执行条件、资金转移、后置条件等 信息. SPESC 条款的表示类似于自然语言,如: term no2 Seller can abort when before buyer did pay 表示卖家可以在买家付款前终止合约. 6.5 面向隐私的智能合约框架 区块链中的所有交易、合约和用户余额都可 被链上的用户公开查看. 比如在竞标合约当中,竞 标参与方不想让其他人知道自己的出价,Solidity 的技术文档[41] 提出参与方可以在智能合约中通过 加密手段出价,最后竞标结束再公布价格. 但是, 如果要保证竞标者不违约,需要竞标者在投标时 向合约转入资金,然而资金的转移也是公开的,于 是只能设置一个最高价或是设置一些虚假出价, 竞标者提前将最高价转入合约,但这种方式显然 有不合理之处. Kosba 等[42] 提出一种可以自动生成加密协议 的工具 Hawk,通过在区块链上存储金融交易的特 殊加密形式,从而保证链上数据只有拥有者可见, 但其分布式沙箱的构造仍是一个未解决的问题. 还有一些人通过零知识证明的方法扩展交易 协议[43] ,构建货币体系[44] ,以此来加强匿名性,从 而保证交易的隐私性,但结构针对性较强,缺乏普 适性. 在文献 [45] 和 [46],多方安全计算被应用到了 比特币脚本中,保证交易的忠实性和隐私性,文 献 [47] 中多方安全计算则被推广到了一般的智能 合约中,封装了多方安全计算的计算过程与网络 通信,上层智能合约编程人员只需将计算符号替 换为安全计算符号而无需考虑实现问题. 6.6 智能合约存在的问题 智能合约在以以太坊为代表的区块链推动 下,有了很大的发展,技术日益成熟,但是发展过 程中依旧存在一些问题[48] . (1) 安全问题:2016 年 5 月,以太坊最大众筹项 目 The DAO 被攻击者利用程序中的递归调用漏洞 获取了大量以太币,这个问题引发了大众对于智 能合约安全性和法律问题的思考. Luu 等[49] 提出 了检查智能合约漏洞的工具 Oyente,文中利用工 具检查了以太坊中包含 3068654 以太币、价值三 千万美金的 19366 个合约,其中有 8833 个合约至 少包含一种安全漏洞. (2) 法律问题:The DAO 事件对法律也提出了 巨大挑战. 首先,界定“漏洞”困难,智能合约与实 际合约无法显示转换;其次是由于区块链不可更 改,智能合约难以撤销. 目前也有一些对于智能合 约从法律的角度上讨论模板与标准化格式,讨论 了法律与参数、代码联系以及数据标准与合约特 点的层面. (3) 效率问题:区块链系统本身存在的吞吐量 低、交易延迟、能耗过高、容量和带宽限制等性能 问题极大限制了智能合约的执行效率,且由于智 能合约顺序执行,当交易增多以后,将导致交易确 认很慢,且交易费会变高. 7 挑战与机遇 尽管目前区块链技术日益成熟,但是仍然存 在一些问题. 比如:资源浪费问题,BitCoin 中的挖 矿步骤需要计算机系统进行大量的计算,造成时 · 1370 · 工程科学学报,第 41 卷,第 11 期