1. 区块链定义
区块链技术本质上是一个去中心化的数据库,它是比特币的核心技术与基础架构,是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改、不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
1.1 区块链的技术特征
区块链上存储的数据需由全网节点共同维护,可以在缺乏信任的节点之间有效地传递价值。相比现有的数据库技术,区块链具有以下技术特征。
- 块链式数据结构
区块链利用块链式数据结构来验证和存储数据,通过上文对区块链基本概念的介绍可以知道,每个区块打包记录了一段时间内发生的交易是对当前账本的一次共识,并且通过记录上一个区块的哈希值进行关联,从而形成块链式的数据结构。 - 分布式共识算法
区块链系统利用分布式共识算法来生成和更新数据,从技术层面杜绝了非法篡改数据的可能性,从而取代了传统应用中保证信任和交易安全的第三方中介机构,降低了为维护信用而造成的时间成本、人力成本和资源耗用 - 密码学方式
区块链系统利用密码学的方式保证数据传输和访问的安全。存储在区块链上的交易信息是公开的,但账户的身份信息是高度加密的。区块链系统集成了对称加密、非对称加密及哈希算法的优点,并使用数字签名技术来保证交易的安全。
1.2 区块链的功能特征
区块链系统的以上技术特征决定了其应用具有如下功能特征。
多中心 不同于传统应用的中心化数据管理,区块链网络中有多个机构进行相互监督并实时对账,从而避免了单一记账人造假的可能性,提高了数据的安全性。
自动化 区块链系统中的智能合约是可以自动化执行一些预先定义好的规则和条款的一段计算机程序代码,它大大提高了经济活动与契约的自动化程度。
可信任 存储在区块链上的交易记录和其他数据是不可篡改并且可溯源的,所以能够很好地解决各方不信任的问题,无需第三方可信中介。
2. 区块链的相关概念
区块链以密码学的方式维护一份不可篡改和不可伪造的分布式账本,并通过基于协商一致的规范和协议(共识机制)解决了去中心化的记账系统的一致性问题,其相关概念主要包括以下三个。
- 交易(Transaction)
区块链上每一次导致区块状态变化的操作都称为交易,每一次交易对应唯一的交易哈希值,一段时间后便会对交易进行打包。 - 区块(Block)
打包记录一段时间内发生的交易和状态结果,是对当前账本的一次共识。每个区块以一个相对平稳的时间间隔加入到链上,在企业级区块链平台中,共识时间可以动态设置。 - 链(Chain)
区块按照时间顺序串联起来,通过每个区块记录上一个区块的哈希值关联,是整个状态改变的日志记录。
区块链的主要结构
如何解决交易中的信任和安全问题
区块链技术体系不是通过一个权威的中心化机构来保证交易的可信和安全,而是通过加密和分布式共识机制来解决信任和安全问题,其主要技术创新有以下4点。
分布式账本 交易是由分布式系统中的多个节点共同记录的。每一个节点都记录完整的交易记录,因此它们都可以参与监督交易合法性并验证交易的有效性。不同于传统的中心化技术方案,区块链中没有任何一个节点有权限单独记录交易,从而避免了因单一记账人或节点被控制而造假的可能性。另一方面,由于全网节点参与记录,理论上讲,除非所有的节点都被破坏,否则交易记录就不会丢失,从而保证了数据的安全性。
加密技术和授权技术 区块链技术很好地集成了当前对称加密、非对称加密和哈希算法的许多优点,并使用了数字签名技术来保证交易的安全性,其中最具代表性的是使用椭圆曲线加密算法生成用户的公私钥对和使用椭圆曲线数字签名算法来保证交易安全。打包在区块上的交易信息对于参与共识的所有节点是公开的,但是账户的身份信息是经过严格加密的。
共识机制 共识机制是区块链系统中各个节点达成一致的策略和方法。区块链的共识机制替代了传统应用中保证信任和交易安全的第三方中心机构,能够降低由于各方不信任而产生的第三方信用成本、时间成本和资本耗用。常用的共识机制主要有PoW、PoS、DPoS、Paxos、PBFT等,共识机制既是数据写入的方式,也是防止篡改的手段。
智能合约 智能合约是可以自动化执行预先定义规则的一段计算机程序代码,它自己就是一个系统参与者。它能够实现价值的存储、传递、控制和管理,为基于区块链的应用提供了创新性的解决方案。
3. 区块链分类
按照节点参与方式的不同,区块链技术可以分为:公有链(Public Blockchain)、联盟链(Consortium Blockchain)和私有链(Private Blockchain)。按照权限的不同,区块链技术可以分为:许可链(Permissioned Blockchain)和非许可链(Permissionless Blockchain)。前述的三大类区块链技术中,联盟链和私有链属于许可链,公有链属于非许可链。
公有链
公有链,顾名思义,就是公开的区块链。公有链是全公开的,所有人都可以作为网络中的一个节点,而不需要任何人给予权限或授权。在公有链中,每个节点都可以自由加入或者退出网络,参与链上数据的读写、执行交易,还可以参与网络中共识达成的过程,即决定哪个区块可以添加到主链上并记录当前的网络状态。公有链是完全意义上的去中心化区块链,它借助密码学中的加密算法保证链上交易的安全。在采取共识算法达成共识时,公有链主要采取工作量证明(PoW,Proof of Work)机制或权益证明(PoS,Proof of Stake)机制等共识算法,将经济奖励和加密数字验证结合起来,来达到去中心化和全网达成共识的目的。在这些算法共识形成的过程中,每个节点都可以为共识过程做出贡献,也是我们俗称的“挖矿”,来获取与贡献成正比的经济奖励,也就是系统中发行的数字代币。公有链通常也被称为公共链,它属于一种非许可链,不需要许可就可以自由参加退出。当前最典型的代表应用有比特币、以太坊(Ethereum)等。因其完全去中心化和面向大众的特性,公有链通常适用于“虚拟加密货币”和面向大众的一些金融服务以及电子商务等。
联盟链 联盟链不是完全去中心化的,而是一种多中心化或者部分去中心化的区块链。在区块链系统运行时,它的共识过程可能会受某些指定节点的控制。例如,在一个有15个金融机构接入的区块链系统中,每个机构都作为链上的一个节点,每确认一笔交易,都需要至少对10个节点进行确认(2/3确认),这笔交易或者这个区块才能被认可。联盟链账本上的数据与公有链的完全公开是不同的,只有联盟成员节点才可以访问,并且链上的读写权限、参与记账规则等操作也需要由联盟成员节点共同决定。由于联盟链场景中的参与者组成一个联盟, 参与共识的节点相对公有链而言会少很多,并且一般是针对某个商业场景,所以共识协议一般不采用与工作量证明类似的挖矿机制,同时也不一定需要代币作为激励机制,而是采用PBFT、RAFT这类适用于多中心化且效率较高的共识算法。同时,联盟链对交易的时间、状态、每秒交易数等与公有链有很大区别,所以它比公有链有更高的安全和性能要求。
联盟链属于一种许可链,意味着不是任何人都能自由加入网络中,而是需要一定的权限许可,才可以作为一个新的节点加入。当前联盟链典型的代表有Linux基金会支持的超级账本(Hyperledger)项目、R3区块链联盟开发的Corda,以及趣链科技推出的Hyperchain平台等。
私有链 私有链,是指整个区块链上的所有写入权限仅仅掌握在一个组织手里,而读取权限可以根据情况对外开放或者任意进行限制。所以,私有链的应用场景一般是单一的企业内部总公司对分公司的管理方面,如数据库管理和审计等。相比于公有链和联盟链,私有链的价值主要体现在它可以提供一个安全、可追溯、不可篡改的平台,并且可以同时防止来自内部和外部的安全攻击。目前对于私有链确实存在着一些争议,有人认为私有链的意义不大,因为它需要依赖于第三方的区块链平台机构,所有的权限都被控制在一个节点中,已经违背了区块链技术的初衷,不能算一种区块链技术,而是已经存在的分布式账本技术。但是也有人认为私有链拥有很大的潜在价值,因为它可以给当前存在的许多问题提供一个很好的解决方案,比如企业内部规章制度的遵守、金融机构的反洗钱行为以及政府部门的预算和执行,等等。
与联盟链一样,私有链也属于一种许可链,不过它的许可权掌握在单一节点中,在有些场景中,私有链还被称为专有链。当下私有链的应用不是很多,开创者都在努力探索之中。当前已经存在的应用主要有英国币科学公司(Coin Sciences Ltd.)推出的多链(Multichain)平台,这个平台的宗旨是希望能帮助各企业快速地部署私链环境,提供良好的隐私保护和权限控制。
自诞生至今,区块链技术经历了三次大的技术演进,其典型代表平台为2009年的比特币、2013年的以太坊和2015年的Fabric和Hyperchain,其组织形态从资源消耗严重、交易性能低下、缺乏灵活控制机制的公有区块链,向高效共识、智能可编程、可保护隐私的联盟区块链转变。当前,Hyperchian平台的TPS(每秒事务处理量)已达到千甚至万量级,可以满足大部分商业场景的需要。将来,随着技术的进一步发展,基于联盟链的区块链商业应用将成为区块链应用的主要形态。
4. 区块链关键技术
4.1 基础模型
区块链基本架构可以分为数据层、网络层、共识层、激励层、合约层和应用层:
- 数据层封装了区块链的链式结构、区块数据以及非对称加密等区块链核心技术;
- 网络层提供点对点的数据通信传播以及验证机制;
- 共识层主要是网络节点间达成共识的各种共识算法;
- 激励层将经济因素引入到区块链技术体系之中,主要包括经济因素的发行机制和分配机制;
- 合约层展示了区块链系统的可编程性,封装了各类脚本、智能合约和算法;
- 应用层则封装了区块链技术的应用场景和案例。
在该架构中,基于时间戳的链式结构、分布式节点间的共识机制和可编程的智能合约是区块链技术最具代表性的创新点。一般可以在合约层编写智能合约或者进行脚本编程,来构建基于区块链的去中心化应用。下面将对本架构中每一层所涉及的技术展开具体介绍。
4.2 数据层
数据层是区块链的核心部分,区块链本质上是一种数据库技术和分布式共享账本,是由包含交易信息的区块从后向前有序连接起来的一种数据结构。该层涉及的技术主要包括:区块结构、Merkle树、非对称加密、时间戳、数字签名和哈希函数。时间戳和哈希函数相对比较简单,这里重点介绍一下区块结构、Merkle树、非对称加密和数字签名。
区块结构
每个区块一般都由区块头和区块体两部分组成。如图所示,区块头部分包含了父区块哈希值、时间戳、Merkle根等信息,而区块体部分则包含着此区块中所有的交易信息。除此之外,每一个区块还对应着两个值来识别区块:区块头哈希值和区块高度。
每一个区块都会有一个区块头哈希值,这是一个通过SHA256算法对区块头进行二次哈希计算而得到的32字节的数字指纹。例如,比特币的第一个区块的头哈希值为000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f。区块头哈希值可以唯一标识一个区块链上的区块,并且任何节点通过对区块头进行简单的哈希计算都可以得到该区块头的哈希值。区块头哈希也包含在区块的整体数据结构中,但是区块头的数据和区块体的数据并不一定一起存储,为了检索效率起见,在实现中可以将二者分开存储。
除了通过头哈希值来识别区块,还可以通过区块高度来对区块进行识别。例如高度为0和前面000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f所索引的区块都是第一个区块。但是与头哈希值不同的是,区块高度并不能唯一地标识一个区块。由于区块链存在着分叉情况,所以可能存在2个或以上区块的区块高度是一样的
Merkle树 前面介绍了区块头哈希值、区块高度和区块头的结构,接着来看看区块体。区块体存储着交易信息,在区块中它们是以一棵Merkle树的数据结构进行存储的,而Merkle树是一种用来有效地总结区块中所有交易的数据结构。Merkle树是一棵哈希二叉树,树的每个叶子节点都是一笔交易的哈希值。以比特币为例,在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹即Merkle树根,且提供了一种校验区块是否存在某交易的高效途径。生成一棵Merkle树需要递归地对每两个哈希节点进行哈希得到一个新的哈希值,并将新的哈希值存入Merkle树中,直到两两结合最终只有一个哈希值时,这个哈希值就是这一区块所有交易的Merkle根,存储到上面介绍的区块头结构中。
非对称加密与数字签名 非对称加密是区块链技术中用于安全性需求和所有权认证时采用的加密技术,常见的非对称加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)和ECDSA(椭圆曲线数字签名算法),等等。与对称加密算法不同的是,非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。基于非对称加密算法可使通信双方在不安全的媒体上交换信息,安全地达成信息的一致。公开密钥是对外公开的,而私有密钥是保密的,其他人不能通过公钥推算出对应的私钥。每一个公开密钥都有其相对应的私有密钥,如果我们使用公开密钥对信息进行了加密,那么则必须有对应的私有密钥才能对加密后的信息进行解密;而如果是用私有密钥加密信息,则只有对应的公开密钥才可以进行解密。在区块链中,非对称加密主要用于信息加密、数字签名等场景。
在信息加密场景中,如图所示,信息发送者A需要发送一个信息给信息接收者B,需要先使用B的公钥对信息进行加密,B收到后,使用自己的私钥就可以对这一信息进行解密,而其他人没有私钥,是没办法对这个加密信息进行解密的。
而在数字签名场景中,如图所示,发送者A先用哈希函数对原文生成一个摘要(Digest),然后使用私钥对摘要进行加密,生成数字签名(Signature),之后将数字签名与原文一起发送给接收者B;B收到信息后使用A的公钥对数字签名进行解密得到摘要,由此确保信息是A发出的,然后再对收到的原文使用哈希函数产生摘要,并与解密得到的摘要进行对比,如果相同,则说明收到的信息在传输过程中没有被修改过。
4.3 网络层
网络层是区块链平台信息传输的基础,通过P2P的组网方式、特定的信息传播协议和数据验证机制,使得区块链网络中的每个节点都可以平等地参与共识与记账。下面将详细介绍区块链平台网络层中的P2P网络架构、信息传输机制和数据验证机制。
P2P网络架构
区块链网络架构一般采用的是基于互联网的P2P(peer-to-peer)架构,在P2P网络中,每台计算机每个节点都是对等的,它们共同为全网提供服务。而且,没有任何中心化的服务端,每台主机都可以作为服务端响应请求,也可以作为客户端使用其他节点所提供的服务。P2P通信不需要从其他实体或CA获取地址验证,因此有效地消除了篡改的可能性和第三方欺骗。所以P2P网络是去中心化和开放的,这也正符合区块链技术的理念。
在区块链网络中,所有的节点地位均等且以扁平式拓扑结构相互连通和交互,每个节点都需要承担网络路由、验证区块数据、传播区块数据等功能。在比特币网络中,存在着两类节点,一类是全节点,它保存着区块链上所有的完整数据信息,并需要实时地参与区块链数据的校验和记录来更新区块链主链。另一类是轻节点,它只保存着区块链中的部分信息,通过简易支付验证(SPV)方式向其他相邻的节点请求数据以便完成数据的验证。
传输机制
在新的区块数据生成后,生成该数据的节点会将其广播到全网的其他节点以供验证。目前的区块链底层平台一般都会根据自身的实际应用需求,在比特币传输机制的基础上重新设计或者改进出新的传输机制,如以太坊区块链集成了所谓的“幽灵协议”,以解决因区块数据确认速度快而导致的高区块作废率和随之而来的安全性风险。这里我们以中本聪设计的比特币系统为例,列出其传输协议的步骤如下:
比特币交易节点将新生成的交易数据向全网所有节点进行广播;
每个节点都将收集到的交易数据存储到一个区块中;
每个节点基于自身算力在区块中找到一个具有足够难度的工作量证明;
当节点找到区块的工作量证明后,就向全网所有节点广播此区块;
只有包含在区块中的所有交易都有效且之前未存在过,其他节点才认同该区块的有效性;
其他节点接收该数据区块,并在该区块的末尾制造新的区块以延长链,而将被接收的区块的随机哈希值视为新区块的前序区块哈希值。
如果交易的相关节点是一个未与其他节点相连接的新节点,比特币系统通常会将一组长期稳定运行的“种子节点”推荐给新节点以建立连接,或者推荐至少一个节点连接新节点。此外,进行广播的交易数据并不需要全部节点都接收到,只要有足够多的节点做出响应,交易数据便可整合到区块链账本中。而未接收到完整交易数据的节点可以向临近节点请求下载缺失的交易数据。
验证机制 在区块链网络中,所有的节点都会时刻监听网络中广播的交易数据和新产生的区块。在接收到相邻节点发来的数据后,会首先验证该数据的有效性,若数据有效则按接收顺序为新数据建立存储池来暂存这些数据,并且继续向临近节点转发;若数据无效则立即废弃该数据,从而保证无效数据不会在区块链网络中继续传播。验证有效性的方法是根据预定义好的标准,从数据结构、语法规范性、输入输出和数字签名等各方面进行校验。对于新区块的校验同理,某节点产生出新区块后,其他节点按照预定义的标准对新区块的工作量证明、时间戳等方面进行校验,若确认有效,则将该区块链接到主区块链上,并开始争取下一个区块的记账权。
4.4 共识层
Leslie Lamport于1982年提出著名的拜占庭将军问题,引发了无数研究者探索解决方案。如何在分布式系统中高效地达成共识是分布式计算领域的一个重要研究课题。区块链的共识层的作用就是在不同的应用场景下通过使用不同的共识算法,在决策权高度分散的去中心化系统中使得各个节点高效地达成共识。
最初,比特币区块链选用了一种依赖节点算力的工作量证明共识(Proof of Work,PoW)机制来保证比特币网络分布式记账的一致性。之后随着区块链技术的不断演进和改进,研究者陆续提出了一些不过度依赖算力而能达到全网一致的算法,比如权益证明共识(Proof of Stake,PoS)机制、授权股份证明共识(Delegated Proof of Stake,DPoS)机制、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,等等。下面我们对这几种共识算法进行简单介绍。
PoW(工作量证明机制)
PoW机制诞生于1997年 Adam Back 设计的Hashcash系统,它最初被创造出来用于预防邮件系统中漫天遍地的垃圾邮件。2009年,中本聪将PoW机制运用于比特币区块链网络中,作为达成全网一致性的共识机制。从严格意义上讲,比特币中所采用的是一种可重复使用的Hashcash工作证明,使得生成工作证明量可以是一个概率意义上的随机过程。在该机制中,网络上的每一个节点都在使用SHA256哈希算法运算一个不断变化的区块头的哈希值。共识要求算出的值必须等于或者小于某个给定的值。在分布式网络中,所有的参与者都需要使用不同的随机数来持续计算该哈希值,直到达到目标为止。当一个节点得出了确切的值,其他所有的节点必须相互确认该值的正确性。之后,新区块中的交易将被验证以防欺诈。然后,用于计算的交易信息的集合会被确认为认证结果,用区块链中的新区块表示。在比特币中,运算哈希值的节点被称作“矿工”,而PoW的过程被称为“挖矿”。由于认证的计算是一个耗时的过程,所以也提出了相应的激励机制(例如向矿工授予一小部分比特币)。总的来说,工作量证明就是对于工作量的证明,每个区块加入到链上,必须得到网络参与者的同意验证,矿工对它完成了相对应的工作量。PoW的优点是完全的去中心化和分布式账簿。缺点也很明显,即消耗资源:挖矿行为造成了大量的资源浪费,同时PoW达成共识的周期也比较长,比特币网络会自动调整目标值来确保区块生成过程大约需要10分钟,因此它不是很适合商业运用。
PoS(股权证明机制)
PoS的想法源于尼克·萨博(Nick Szabo),是PoW的一种节能替代选择,它不需要用户在不受限制的空间中找到一个随机数,而是要求人们证明货币数量的所有权,因为其相信拥有货币数量多的人攻击网络的可能性更低。由于基于账户余额的选择是非常不公平的,因为单一最富有的人势必在网络中占主导地位,所以提出了许多解决方案,结合股权来决定谁来创建下一个块。其中,Blackcoin使用随机选择来预测下一个创建者,而Peercoin则倾向于基于币龄来选择。Peercoin首次开创性地实现了真正的股权证明,它采用工作量证明机制发行新币,采用股权证明机制维护网络安全,这也是“虚拟货币”历史上的一次创举。同比特币网络要求证明人执行一定量的工作不同,该机制只需要证明人提供一定数量“数字货币”的所有权即可。在股权证明机制中,每当创建一个区块时,矿工需要创建一个称为“币权”的交易,这个交易会按照一定的比例预先将一些币发给矿工。然后股权证明机制根据每个节点持有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,以加快节点寻找随机数的速度,缩短达成共识所需的时间。与PoW相比,PoS可以节省更多的能源,更有效率。但是,由于挖矿成本接近于零,因此可能会遭受攻击。且PoS在本质上仍然需要网络中的节点进行挖矿运算,所以它同样难以应用于商业领域。
DPoS(股份授权证明机制)
DPoS由比特股(Bitshares)项目组发明。股权拥有者选举他们的代表来进行区块的生成和验证。DPoS类似于现代企业董事会制度,比特股系统将代币持有者称为股东,由股东投票选出101名代表,然后由这些代表负责生成和验证区块。持币者若想成为一名代表,需先用自己的公钥去区块链注册,获得一个长度为32位的特有身份标识符,股东可以对这个标识符以交易的形式进行投票,得票数前101位被选为代表。代表们轮流产生区块,收益(交易手续费)平分。如果有的代表不老实生产区块,很容易被其他代表和股东发现,他将立即被踢出“董事会”,空缺位置由票数排名102的代表自动填补。DPoS的优点在于大幅减少了参与区块验证和记账的节点数量,从而缩短了共识验证所需要的时间,大幅提高了交易效率。从某种角度来说,DPoS可以理解为多中心系统,兼具去中心化和中心化优势
PBFT(实用拜占庭容错算法)
这个算法最初出现在MIT的Miguel和Barbara Liskov的学术论文中[33],初衷是为一个低延迟存储系统所设计,降低算法的复杂度,该算法可以应用于吞吐量不大但需要处理大量事件的数字资产平台。它允许每个节点发布公钥,任何通过节点的消息都由节点签名,以验证其格式。验证过程分为三个阶段:预备、准备、落实。如果已经收到超过$\frac{1}{3}$不同节点的批准,服务操作将是有效的。使用PBFT,区块链网络$N$个节点中可以包含$f$个拜占庭恶意节点,其中$f=\frac{N-1}{3}$。 换句话说,PBFT确保至少$2f+1$个节点在将信息添加到分布式共享账簿之前达到共识。目前,HyperLedger联盟、中国ChinaLedger 联盟等诸多区块链联盟都在研究和验证这个算法的实际部署和应用。
4.5 激励层
激励层作为将经济因素引入区块链技术的一个层次,其存在的必要性取决于建立在区块链技术上的具体应用需求。这里以比特币系统为例,对其激励层进行介绍。
在比特币系统中,大量的节点算力资源通过共识过程得以汇聚,从而实现区块链账本的数据验证和记账工作,因而其本质上是一种共识节点间的任务众包过程。在去中心化系统中,共识节点本身是自利的,其参与数据验证和记账工作的根本目的是最大化自身收益。所以,必须设计合理的激励机制,使得共识节点最大化自身收益的个体行为与区块链系统的安全性和有效性相契合,从而使大规模的节点对区块链历史形成稳定的共识。
比特币采用PoW共识机制,在该共识中其经济激励由两部分组成:一是新发行的比特币;二是交易流通过程中的手续费。两者组合在一起,奖励给PoW共识过程中成功计算出符合要求的随机数并生成新区块的节点。因此,只有当各节点达成共识,共同合作来构建和维护区块链历史记录及其系统的有效性,当作奖励的比特币才会有价值。
- 发行机制
在比特币系统中,新区块产生发行比特币的数量是随着时间阶梯型递减的。从创世区块起,每个新区块将发行50个比特币奖励给该区块的记账者,此后每隔约4年(21万个区块),每个新区块发行的比特币数量减少一半,以此类推,一直到比特币的数量稳定在上限2100万为止。前文提到过,给记账者的另一部分奖励是比特币交易过程中产生的手续费,目前默认的手续费是1/10000个比特币。两部分费用会被封装在新区块的第一个交易(称为Coinbase交易)中。虽然现在每个新区块的总手续费与新发行的比特币相比要少得多,但随着时间推移,未来比特币的发行数量会越来越少,甚至停止发行,到那时手续费便会成为共识节点记账的主要动力。此外,手续费还可以起到保障安全性的作用,防止大量微额交易对比特币系统发起“粉尘攻击”。
- 分配机制
随着比特币挖矿生态圈的成熟,“矿池”出现在人们的视野中。大量的小算力节点通过加入矿池而联合起来,相互合作汇集算力来提高获得记账权的概率,并共享生成新区块得到的新发行比特币和交易手续费奖励。据Bitcoinminning.com统计,目前已经存在13种不同的分配机制。现今主流矿池通常采用PPLNS(Pay Per Last N Shares)、PPS(Pay Per Share)和PROP(PRO Portionately)等机制。在矿池中,根据各个节点贡献的算力,按比例划分为不同的股份。PPLNS机制在产生新的区块后,各合作节点根据其在最后N个股份内贡献的实际股份比例来分配奖励;PPS则直接根据股份比例为各节点估算和支付一个固定的理论收益,采用此方式的矿池将会适度收取手续费来弥补其为各个节点承担的收益不确定性风险;PROP机制则根据节点贡献的股份按比例地分配奖励。
4.6 合约层
合约层封装了各类脚本、算法和智能合约,是区块链可编程性的体现。比特币本身就具有简单脚本的编写功能,而以太坊极大地强化了编程语言协议,理论上可以编写实现任何功能的应用。如果把比特币看成是全球账本的话,以太坊可以看作一台“全球计算机”,任何人都可以上传和执行任意的应用程序,并且程序的有效执行能得到保证。如果说数据、网络和共识三个层次作为区块链底层“虚拟机”,分别承担数据表示、数据传播和数据验证功能,合约层则是建立在区块链虚拟机之上的商业逻辑和算法,是实现区块链系统灵活编程和操作数据的基础。包括比特币在内的“数字加密货币”大多采用非图灵完备的简单脚本代码来编程控制交易过程,这也是智能合约的雏形。随着技术的发展,目前已经出现以太坊等图灵完备的可实现更为复杂和灵活的智能合约的脚本语言,使得区块链能够支持宏观金融和社会系统的诸多应用。
智能合约的概念可以追溯到1995年,是由学者尼克·萨博提出并进行如下定义的:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。”其设计初衷是希望通过将智能合约内置到物理实体来创造各种灵活可控的智能资产。但由于计算手段的落后和应用场景的缺失,智能合约在当时并未受到研究者的广泛关注。
区块链技术的出现对智能合约进行了新的定义并使其成为了可能。智能合约作为区块链技术的关键特性之一,是运行在区块链上的模块化、可重用、自动执行的脚本,能够实现数据处理、价值转移、资产管理等一系列功能。合约部署的时候被虚拟机编译成操作码存储在区块链上,对应地会有一个存储地址。当预定的条件发生时,就会发送一笔交易(transaction)到该合约地址,全网节点都会执行合约脚本编译生成的操作码,最后将执行结果写入区块链[。作为一种嵌入式程序化合约,智能合约可以内置在任何区块链数据、交易或资产中,形成可由程序自行控制的系统、市场或资产。智能合约不仅为金融行业提供了创新性的解决方案,同时也能在社会系统中的信息、资产、合同、监管等事务管理中发挥重要作用。
基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,还可以避免恶意行为对合约正常执行的干扰。智能合约可以应用到任何一种数据驱动的业务逻辑中,以太坊首先看到了区块链和智能合约的契合,发布了白皮书《以太坊:下一代智能合约和去中心化应用平台》,构建了内置有图灵完备编程语言的公有区块链,使得任何人都能够创建合约和去中心化应用。
智能合约与区块链的结合,丰富了区块链本身的价值内涵,其特性有以下3点:
- 用程序逻辑中的丰富合约规则表达能力实现了不信任方之间的公平交换,避免了恶意方中断协议等可能性;
- 最小化交易方之间的交互,避免了计划外的监控和跟踪的可能性;
- 丰富了交易与外界状态的交互,比如可信数据源提供的股票信息、天气预报等。