
1.1.1 区块链技术发展综述
区块链作为比特币(Bitcoin)的技术支撑,最早出现在2008年中本聪(Satoshi Nakamoto)发表的“比特币:一种点对点式的电子现金系统”(Bitcoin:A Peer-to-Peer Electronic Cash System)中。文中详细描述了通过集成P2P网络协议、非对称加密、共识机制、块链结构、未花费的交易输出(Unspent Transaction Output,UTXO)账户模型等多种技术,建立了一套全新的、去中心化的、不需要信任基础的点对点交易体系,实现了多方可信、对等的价值传递。以2009年1月3日诞生的第一个区块——“创世区块”为起点,至今比特币交易的可实现性已经得到证明。2013年12月,Vitalik Buterin创建了以太坊(Ethereum)区块链平台,该平台除了可基于内置的以太币(Ether)实现数字货币交易,还提供了图灵完备的编程语言,以编写智能合约(Smart Contract),从而首次将智能合约应用到区块链中。以太坊的愿景是创建一个永不停止、无审查、自动维护的去中心化的世界计算机。2015年12月,Linux基金会发起了超级账本Hyperledger开源区块链项目,旨在发展跨行业的商业区块链平台。企业级区块链超级账本项目(Hyperledger Fabric)是专门为企业级区块链应用设计的,与比特币和以太坊不同,它引入了成员管理服务,旨在满足更加复杂的商业逻辑,这标志着区块链技术的发展开始进入广泛创新应用阶段。根据比特币大会发布的《布雷顿森林体系2015白皮书》(Bretton Woods 2015 White Paper),区块链的发展可以划分为以下3个阶段。
(1)区块链1.0:数字货币阶段。该阶段以比特币为代表,采用以可编程数字加密货币体系为主要特征的区块链模式,主要体现在比特币应用方面。区块链采用纯数学方法而不是依靠中心机构建立信任关系,使互不信任或弱信任的参与者之间能够维系不可篡改的账本记录。
(2)区块链2.0:智能合约阶段。采用以以太坊生态为主要特征的区块链可编程金融系统模式,区块链技术被运用在金融或经济市场,延伸到股票、债券、期货、贷款、按揭、产权、智能资产等合约方面。
(3)区块链3.0:超越金融领域的多行业应用阶段,进入可编程社会系统时代。区块链将主要应用在物联网、智能制造、供应链管理、司法、医疗、数字艺术、跨境贸易、跨境支付、跨境物流与跨境电子政务等领域,成为未来社会一种最底层的基础设施,涵盖社会生活的方方面面,真正实现跨链通信、多链融合的可信价值互联网。
从最早应用区块链技术的比特币,到最先在区块链引入智能合约的以太坊,再到应用最广的企业级区块链超级账本项目(Hyperledger Fabric),它们虽然在具体实现上各有不同,但在整体体系架构上存在着诸多共性。区块链平台整体可划分为6个层次,即网络层、共识层、密码层、数据层、智能合约层和应用层,如图1-1所示。

图1-1 区块链体系架构
· 网络层:区块链网络层的核心由基于TCP/IP的分布式P2P网络传输协议(如Gossip协议或泛洪搜索协议)构建,用于在节点间传输交易数据和区块数据,比特币和以太坊的P2P网络传输协议基于TCP实现,Hyperledger Fabric的P2P网络传输协议则基于HTTP/2实现。
· 共识层:共识层是确保区块链网络多方共管一致性的核心组件,决定了区块链系统的安全性、可扩展性和去中心化程度等特性。共识层主要的算法包括工作量证明(Proof of Work,PoW)共识算法和权益证明(ProofofStake,PoS)共识算法、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法等。
· 密码层:密码层包含确保区块链安全的关键密码协议,这些协议在区块链流程的完整性、信息的安全传播和区块链共识机制方面发挥着至关重要的作用。该层主要由公钥密码体系组成,如数字签名、哈希函数等。
· 数据层:区块链数据层主要包括数据结构、数据模型和数据存储3个方面。在数据结构的设计方面,基于时间戳的数字公证服务证明区块的创建时间。区块链中每个区块包含区块头和区块体两部分。区块头存放Merkle根、前块哈希、时间戳等数据;区块体存放批量交易数据。在数据模型的设计方面,主要包括基于交易的数据模型和基于账户的数据模型。在数据存储的设计方面,通常按日志文件格式存储,由于系统需要大量基于哈希的键值检索(如基于交易哈希检索交易数据、基于区块哈希检索区块数据),所以索引数据和状态数据通常存储在Key-Value数据库中。
· 智能合约层:智能合约是一种使用算法和程序编制的合同条款,它们可部署在区块链上,并按照规则自动执行数字化协议。与此类似,比特币脚本是嵌入比特币交易中的一组指令,由于指令类型单一、实现功能有限,其只能被视为智能合约的雏形。以太坊提供了图灵完备的脚本语言Solidity2、Serpent3,以及沙盒环境以太坊虚拟机(Ethereum Virtual Machine,EVM),以供用户编写和运行智能合约。Hyperledger Fabric的智能合约被称为Chaincode,其使用Docker容器作为沙盒环境,并且Docker容器中包含一组经过签名的基础磁盘映像,以及Go语言与Java语言运行时的SDK,以运行Go语言与Java语言编写的Chaincode。
· 应用层:比特币平台主要应用于比特币交易;而以太坊不仅支持以太币的数字货币交易,还支持去中心化应用程序(Decentralized Application,DApp)。DApp是由JavaScript构建的Web前端应用,通过JSON-RPC与运行在以太坊节点上的智能合约进行通信。Hyperledger Fabric主要面向企业级区块链应用,没有提供数字货币交易,其应用可基于Go、Java、Python、Node.js等多种语言的SDK构建,并通过gPRC或REST与运行在Hyperledger Fabric节点上的智能合约进行通信。
区块链网络技术并不是一种全新的技术,而是一个集成了密码学、分布式系统、博弈论等多种技术的新型组合技术。区块链是一种去中心化的技术,它能够在没有第三方权威机构的参与下,建立交易双方之间的可靠信任,实现可信的价值传输。因此,区块链被称为价值互联网或第二代互联网。
1.互联网到P2P网络(1960—2001年)
20世纪60年代后半叶,以美国国防部(United States Department of Defense,DoD)为中心开始了通信技术的军事应用研究,希望即使在通信过程中遭遇敌方攻击和破坏,也可以通过迂回线路实现通信。为此,分组交换技术应运而生。1969年,为验证分组交换的实用性,研究人员构建了一个由4个节点组成的高级研究计划局(Advanced Research Projects Agency,ARPA)网络,即ARPANET。随着通信技术的发展,普通用户也加入ARPANET中,3年内从4个节点发展为34个节点,这充分证明了基于分组交换的通信技术的可行性。ARPANET不仅利用机构组成的网络进行分组交换实验,还进行了为互连计算机提供可靠传输的综合性通信协议的实验。20世纪70年代前半叶,ARPANET的一个研究机构提出了TCP/IP,直到1982年,该协议的具体规范才被确定,1983年,该协议成为ARPANET的唯一指定协议。
随着1980年UNIX系统的普及和互联网的扩张,ARPANET开始使用BSDUNIX操作系统。20世纪80年代,不仅局域网快速发展,UNIX工作站也迅速普及,TCP/IP网络得以广泛应用。在这种趋势下,基于TCP/IP的世界性网络——Internet应运而生。
1989—1991年,欧洲核子研究中心(European Organization for Nuclear Research,CERN)的蒂姆·伯纳斯·李开发了超文本链接文件服务,创办了万维网(Word Wide Web,WWW)。1993年,第一个Web浏览器Mosaic诞生,自此商用互联网服务迅速发展,万维网的诞生为全球信息的交流和传播带来了革命性的变化,降低了互联网的连接成本,推动了互联网的快速普及。但是,随着互联网逐渐普及并深入人们的日常生活,人们需要更直接、更广泛的信息交流,以实现更多的资源和服务共享。普通用户希望能够全面参与到互联网的信息交流中,而计算机和网络性能的提升也使其具备了现实可能性。
在此背景下,1999年,Napster软件应用P2P网络协议允许对等用户不受任何干扰地进行上传和下载,短时间内吸引了5 000万名用户参与到MP3动态目录共享服务中。2001年,加州程序员Cohen开发的BitTorrent(BT)作为一款专门针对大容量文件的多点共享和分发协议,在数字音乐、娱乐和电影等流媒体,点对点通信,文件共享及系统处理多个领域得到广泛的应用。
区块链网络的核心技术要素是P2P网络技术,从上述P2P网络技术的发展来看,区块链网络是基于TCP/IP的P2P网络,实际上是TCP/IP模型中的最高层,即应用层,类似于HTTP和SMTP。因此,区块链网络本质上是在以HTTP为代表的应用层上,基于分布式点对点的拓扑结构进行信息交互的。这也是以太坊提出的Web 3.0的基础。
(1)比特币的P2P网络基于TCP构建,采用集中式和分布式结构的混合式路由模式,主网默认通信端口为8 333,并建立连接认证“握手”通信过程,用来确定协议版本、软件版本、节点IP、区块高度等。
(2)以太坊的P2P网络采用Kademlia算法实现DHT路由方案,其基于结构化P2P网络方式。以太坊的P2P网络是一个完全加密的网络,节点之间交互采用对称加密握手方式。该网络提供UDP和TCP两种连接方式,主网默认TCP通信端口为30 303,推荐的UDP发现端口为30 301。
2.区块链中的密码学
密码学技术是区块链构建信任的基石,也是区块链技术的核心技术之一。它通过哈希函数、数字签名、可信时间戳、非对称加密和默克尔(Merkle)树等技术的组合应用来确保在无信任环境下数据的不可篡改性、完整性、不可抵赖性和可认证性。
20世纪70年代,随着计算机科学的蓬勃发展,密码学成为一门新兴的学科。1976年,Diffie和Hellman提出了公钥密码的思想,标志着现代密码学的诞生,这一事件在国际密码学发展史上具有里程碑意义。自此,国际上已提出许多种公钥密码体制,如基于大整数因子分解的困难性问题的RSA密码体制、基于离散对数问题的公钥密码体制(ElGamal密码体制)及椭圆曲线密码体制(Elliptic Curve Cryptography,ECC)等。
在区块链上,用户可以选择自己的私钥,并生成相应的公钥,该公钥对应记录在区块的地址上,公钥经过变换成为用户的交易地址。通常情况下,不同的记录对应不同的公钥/私钥对。用户使用公钥对消息进行加密,只有对应的私钥才能解密。同时,私钥可用于对自己的交易信息进行数字签名,其他用户可利用对应公钥验证消息的签名。
哈希函数是一种数学函数,它可以将任意长度的消息转换成固定长度的值,也被称为散列函数、杂凑函数或消息摘要。哈希函数于1953年问世,并在1970年蓬勃发展,在区块链技术中,哈希函数被广泛应用于地址生成、数字签名、Merkle树等。目前,较为知名的哈希函数包括MD系列、SHA-1(SecureHash Algorithm)系列、SHA-2系列、RIPEMD系列、Whirlpool系列和国密算法SM3等。
Merkle树是一种哈希二叉树,由Ralph Merkle于1979年发明。在Merkle树中,叶节点存储的是数据文件,而非叶节点存储的是其子节点的哈希值(Hash值,通过SHA-1、SHA-256等哈希算法计算而来),这些非叶节点的哈希值被称为路径哈希值,可以用来确定某个叶节点到根节点的路径,叶节点的哈希值是真实数据的哈希值。由于采用了树形结构,其查询的时间复杂度为O(logn),其中,n是节点数量。在区块链中,用户可以通过区块头得到Merkle根和其他节点提供的中间哈希值来验证某个交易是否存在于区块中。此外,Merkle树还支持简单支付验证(Simplified Payment Verification,SPV)协议。
3.分布式一致性共识
从20世纪90年代开始,随着互联网的普及,分布式系统中的一致性问题变得越来越重要。然而,在互联网蓬勃发展前,一些有远见的科学家们早在20世纪70年代就开始在多路处理器级别上研究一致性模型。Leslie Lamport(图灵奖获得者)是早期进行分布式系统一致性研究的科学家,他在1978年的论文中提出了一个分辨分布式系统中事件因果关系的算法,后来人们把该算法称为Lamport Timestamp或Lamport Clock。这个算法为后来的分布式系统一致性研究奠定了技术基础。
解决一致性共识问题需要满足进程在有限时间内结束(Termination),以及进程达到一致性(Agreement)和一致有效性(Validity)的要求。为解决上述问题,图灵奖获得者Jim Gray在Leslie Lamport的论文发表的同一年(1978年)提出了“两阶段提交”(Two Phase Commit)的概念。这个概念成为后来的分布式系统中共识算法的基础。1999年,Miguel Castro和Barbara Liskov提出了实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,这个算法可以在异步网络中不保证进程终止的情况下解决拜占庭将军问题。
1990年,Leslie Lamport提出了适用于分布式系统的Paxos算法。这个算法是基于消息传递且具有高度容错特性的分布式一致性算法,能够解决在异步网络环境下,如何就某个值(决议)达成一致,这个算法成为分布式系统中的经典共识算法。
共识机制作为区块链系统的核心组成部分,已经从分布式系统进入区块链的共识阶段。在以比特币为代表的非授权网络中,节点加入和退出的动态性与不可预测性决定了共识协议的设计,决定了参与节点以何种方式对某些特定的数据达成一致,共识协议同时决定了区块链系统的性能及安全性。Paxos算法主要是针对网络中可能出现的崩溃节点而设计的,而PBFT算法可以容忍某些拜占庭式的错误节点。
与分布式一致性共识相关的关键事件如下。
· 1982年,Leslie Lamport等人提出拜占庭将军问题,旨在解决在不可靠信道上消息传递的一致性问题。
· 1993年,Cynthia Dwork和Moni Naor提出了工作量证明机制,这是一种应对服务与资源滥用或阻断服务攻击的经济对策。
· 1997年,英国密码学家亚当·贝克(Adam Back)独立提出用于哈希现金的工作量证明机制,并于2002年正式发表。
· 1999年,马库斯·雅各布松(Markus Jakobsson)正式提出了“工作量证明”概念。这为后来中本聪设计比特币的共识机制奠定了基础。
· 2000年,加利福尼亚大学的埃里克·布鲁尔(EricBrewer)教授在“ACMSymposium on Principles of Distributed Computing”研讨会的特邀报告中提出了一个猜想,指出分布式系统无法同时实现一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance),最多只能同时实现其中两个。
· 2002年,塞斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)在异步网络模型中证明了埃里克·布鲁尔的猜想,从而形成了CAP定理或布鲁尔定理。
· 2011年7月,一位名叫“Quantum Mechanic”的数字货币爱好者在比特币论坛中首次提出了权益证明(PoS)共识算法。
· 2012年8月,Sunny King首次在点点币(Peercoin,PPC)中实现了PoS,系统中具有最高赌注而不是最高计算能力的节点被授予簿记权,并且该赌注由特定数量的货币的所有权表示,被称为币龄或币日(Coin Days)。
· 2013年8月,比特股(BitShares)项目提出了一种新的共识算法,即委托权益证明(Delegated Proof of Stake,DPoS)共识算法。
· 2013年,斯坦福大学的迭戈·翁加罗(Diego Ongaro)和约翰·奥斯特豪特(John Ousterhout)提出了Raft共识算法。
4.智能合约——区块链2.0时代
随着区块链技术与生态的发展,基于区块链的DApp呈现井喷的趋势,支撑DApp的底层技术是“区块链+智能合约”。智能合约与区块链的结合被普遍认为是区块链世界中一次里程碑式的升级。第一个结合了区块链与智能合约技术的平台——以太坊的诞生,被认为开启了区块链2.0时代。
“代码即法律”(Code is Law)这一概念并不是随着智能合约的出现而首次产生的。它最早出现于20世纪90年代互联网飞速发展时期。1994年,计算机科学家和密码学家NickSzabo首次提出“智能合约”概念,早于区块链概念的诞生。Nick Szabo提出智能合约是“以数字形式指定的一系列承诺,包括各方履行这些承诺的协议”,但由于缺乏能够让它发挥作用的区块链,智能合约的想法一直未能实现。
当比特币区块链诞生后,比特币智能合约主要以脚本方式支持复杂交易,如担保交易、连带合同、第三方仲裁、多方签名等。然而比特币开发者对脚本做了诸多限制,例如,脚本采用了堆栈的方式执行;脚本中没有循环语句,不具备图灵完备的特性。目前,通过升级脚本功能,如通过使用Simplicity语言,在构建比特币智能合约方面,可以在保证安全性的同时实现比特币脚本的灵活性。
与比特币不同,以太坊中的智能合约是一段运行在区块链上的代码,该代码定义了合约的内容,合约的账户中保存了当前合约的运行状态。智能合约的设计语言Solidity是一种图灵完备语言,这意味着智能合约中可以包括循环。然而,智能合约中包括循环带来的问题是如何防止死循环。因此,在以太坊中执行智能合约需要支付一定的Gas。在EVM中执行智能合约时,EVM对执行指令进行了定价,每执行一条指令都需要消耗相应的Gas,不同的指令由于其执行的复杂程度不同,所以消耗的Gas会有所不同。