工程科学学报.第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)字段中的输入交易按照数组的形 <pubkeyHash>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 < pubkeyHash > 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 (解锁脚本)▲ (锁定脚本) 人 <sig><pk> OP DUP OP HASH160 <PubKHash> OP EQUALVERIFY OP CHECKSIG 图6比特币交易脚本 Fig.6 Bitcoin transaction script b)scriptSig:<signature><pubkey> 编码而来,所以必须拥有该地址的私钥才能将锁 P2PKH(Pay-to-Public-Key-Hash)是最常用的交 定脚本解锁 易脚本,用于向公钥地址支付数字资产.如图6所 (2)Pay-to-Public-Key (P2PK) 示,解锁脚本由<sg>签名与<pk>公钥组成,锁定脚 a)scriptPubKey:<pubkey>OP_CHECKSIG 本是由一连串堆栈命令和<pubkeyHash>公钥哈希 b)scriptSig:<signature> 组成,公钥哈希由两个哈希函数生成,大小20字节; P2PK是P2PKH的简化形式,但不再用于新交 比特币地址实际是由该公钥哈希进行Base58 check 易,因为P2PKH脚本更安全(公共密钥在输出用
b)scriptSig: <signature> <pubkey> P2PKH(Pay-to-Public-Key-Hash)是最常用的交 易脚本,用于向公钥地址支付数字资产. 如图 6 所 示,解锁脚本由<sig>签名与<pk>公钥组成,锁定脚 本是由一连串堆栈命令和<pubkeyHash>公钥哈希 组成,公钥哈希由两个哈希函数生成,大小 20 字节; 比特币地址实际是由该公钥哈希进行 Base58check 编码而来,所以必须拥有该地址的私钥才能将锁 定脚本解锁. (2)Pay-to-Public-Key (P2PK) a)scriptPubKey: <pubkey> OP_CHECKSIG b)scriptSig: <signature> 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 <sig> <pk> OP_DUP OP_HASH160 <PubKHash> 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 ·