区块链架构与关键技术详解

使用比特币和以太坊的区块链架构为实例,详细描述区块链技术的基础架构、基本原理以及核心技术。比特币和以太坊是 2种具代表性的区块链技术应用,一个是区块链技术的起源,另一个是区块链2.0 的代表应用,市面上其他使用区块链技术的数字货币大都与之雷同,所以,比特币和以太坊的基础架构是研究学习区块链技术的重要实例。比特币和以太坊的基础架构如图 1 所示。

图 1 中虚线表示的是以太坊与比特币的不同之处。总体来说,数字货币的区块链系统包含底层的交易数据、狭义的分布式账本、重要的共识机制、完整可靠的分布式网络、网络之上的分布式应用这几个要素。底层的数据被组织成区块这一数据结构,各个区块按照时间顺序链接成区块链,全分布式网络的各个节点分别保存一份名为区块链的分布式账本,网络中使用 P2P 协议进行通信,通过共识机制达成一致,基于这些基础产生相对高级的各种应用。在该架构中,不可篡改的区块链数据结构、分布式网络的共识机制、工作量证明机制和愈发灵活的智能合约是具代表性的创新点。

1 底层数据

在区块链系统中,底层数据并不是存储在区块链中的数据,这些原始数据需要进一步加工才能被写入区块内。底层数据最根本的是交易记录,其他的数据只是为了对消息记录进行封装。

交易数据:交易数据是带有一定格式的交易信息,以比特币为例,一条比特币交易信息应包含以下字段:4 B 的版本信息,用来明确这笔交易参照的规则;1~9 B 的输入计数器,表示被包含的输入数量;变长字节的输入,表示一个或多个交易输入(地址);1~9 B 的输出计数器,表示被包含的输出数量;变长字节的输出,表示一个或多个输出(地址);4 B 的时钟时间,表示一个 UNIX 时间戳或区块号。

时间戳:时间戳被用来加盖在区块头中,确定了区块的写入时间,同时也使区块链具有时序的性质,时间戳可以作为区块数据的存在性证明,有助于形成不可篡改不可伪造的分布式账本。更为重要的是,时间戳为未来给予区块链技术的互联网和大数据增加了时间维度,使通过区块数据和时间戳来重现历史成为可能。

SHA256 算法:区块链不会直接保存明文的原始交易记录,只是将原始交易记录经过散列运算,得到一定长度的散列值,将这串字母与数字组成的定长字符串记录进区块。比特币使用双 SHA256 散列函数,将任意长度的原始交易记录经过 2 次 SHA256 散列运算,得到一串 256 bit 的散列值,便于存储和查找。散列函数具有单向性、定时性、定长性和随机性的优点。单项性指由散列值无法反推得到原来的输入数据(理论上可以,实际几乎不可能),定时性指不同长度的数据计算散列值所需要的时间基本一样,定长性指输出的散列值都是相同长度,随机性指 2 个相似的输入却有截然不同的输出。同时,SHA256 函数也是比特币所使用的算力证明,矿工们寻找一个随机数,使新区块头的双 SHA256 散列值小于或等于一个目标散列值,并且加入难度值,使这个数学问题的解决时间平均为 10 min,也就是平均每 10 min 产生一个新的区块。

Merkle 树:Merkle 树是区块链技术的重要组成部分,将已经运算为散列值的交易信息按照二叉树形结构组织起来,保存在区块的块体之中。 Merkle 树的生成过程:将区块数据分组进行散列函数运算,将新的散列值放回,再重新拿出 2 个数据进行运算,一直递归下去,直到剩下唯一的“Merkle 根”。比特币采用经典的二叉 Merkle 树,而以太坊采用了改进的 Merkle Patricia 树。Merkle树的优点:良好的扩展性,不管交易数据怎么样,都可以生成一颗 Merkle 树;查找算法的时间复杂度很低,从底层溯源查找到 Merkle 根部来验证一笔交易是否存在或合法,时间复杂度为 lb N,极大降低运行时的资源占用;使轻节点成为可能,轻节点不用保存全部的区块链数据,仅需要保存包含 Merkle 根的块头,就可以验证交易的合法性。

2 分布式记账本

这里使用分布式记账本来代替区块链,是为了区别狭义的区块链和广义的区块链技术,前者是分布式记账本这一时序链式数据结构,后者是个完整的带有数学证明的系统框架。狭义的区块链结构如图 2 所示:

图二.png

每个区块分为块头和块体两部分,所有区块按照时序相链接,形成狭义上的区块链。

区块头:区块头的内容有上一区块头的散列值、时间戳、当前 PoW 计算难度值、当前区块 PoW 问题的解(满足要求的随机数),以及 Merkle 根。以比特币为例,具体的数据格式为:4 B 的版本字段,用来描述软件版本号;32 B(256 bit)的父区块头散列值;32(256 bit)字节的 Merkle 根;4 B 的时间戳;4 B 的难度目标;4 B 的 Nonce (随机数,问题的解)。区块头设计是整个区块链设计中极为重要的一环,区块头包含了整个区块的信息,可以唯一标识出一个区块在链中的位置,还可以参与交易合法性的验证,同时体积小(一般不到整个区块的千分之一),为轻量级客户端的实现提供依据。

区块体:区块体包含了一个区块的完整交易信息,以 Merkle 树的形式组织在一起。如图 2 所示,Merkle 树的构建过程是一个递归计算散列值的过程,以图中为例,交易 1 经过 SHA256 计算得到 Hash 1,同样算得 Hash 2,将 2 个散列值串联起来,再做 SHA256 计算,得到 Hash12,这样一层一层地递归计算散列值,直到最后剩下一个根,就是 Merkle 根。可以看到,Merkle 树的可扩展性很好,不管交易记录有多少,最后都可以产生 Merkle 树以及定长的 Merkle 根。同时,Merkle树的结构保证了查找的高效性,N 个叶子节点的 Merkle 树最长查找路径长度为 lb N,这种高效在大交易规模中异常明显。

链式结构:除了创世区块以外,所有区块均通过包含上一区块头的散列值的方法构成一条区块链。同时,由于包含了时间戳,区块链还带有时序性。时间越久的区块后面所链接的区块越多,修改该区块所花费的代价也就越高,这里借用一个形象的比喻,区块链就好比地壳,越往下层,时间越久远,越稳定,不会轻易发生改变。区块链在增加新区块的时候,有很小的概率发生“分叉”现象,即同一时间挖出 2 个符合要求的区块。对于“分叉”的解决方法是延长时间,等待下一个区块生成,选择长度最长的支链添加到主链,“分叉”发生的概率很小,多次分叉的概率基本可以忽略不计,“分叉”只是短暂的状态,最终的区块链必然是唯一确定的最长链。创世区块:每一个区块链都有一个特殊的头区块,不管从哪个区块开始追溯,最终都会到达这个头区块,即创世区块。这里不得不提到比特币的创世区块,它在北京时间 2009 年 1 月 4 日 02:15:05 被中本聪生成,是比特币诞生的里程碑,也是数字货币的新纪元。中本聪在比特币创世块中留下了一句话“The Times 03/Jan/2009 Chan-cellor on brink of second bailout for bank”,是当天的头版文章标题。中本聪的引用,既是对该区块产生时间的说明,也是对旧有银行系统面对金融危机脆弱表现的冷嘲。

3 组网方式和核心机制

狭义的区块链,即分布式账本的内容上面已经介绍完毕,将这个账本用起来才是区块链技术的关键所在。基于分布式账本之上的区块链网络,采用对等式网络——P2P 网络(peer-to-peer net-work)将所有节点连接在一起,设计 PoW 或其他共识机制使无信任基础的双方在不需要第三方的情况下建立互信,使用广播的方式传播交易信息,加上激励机制来保证节点提供算力以维持整个网络的顺利运行。

P2P 网络:区块链网络的去中心化来自于采用 P2P 组网方式,网络中每个节点均地位对等且以扁平式拓扑结构相互连通和交互,不存在任何中心化的特殊节点和层级结构,每个节点均会承担网络路由、验证交易信息、传播交易信息、发现新节点等工作。

广播机制:区块链网络公布交易信息的方式是广播,生成交易信息的节点先将信息广播到相连接的节点,节点验证通过后就会再进行广播,信息会以极快的方式被全网中的节点接收。实际上,并不需要全部节点都保留这条交易信息,只要保证大多数(51%)节点接收到,就可以认为交易通过。如果这条交易信息有问题,如交易者的余额不足以支付,接收到错误消息的节点验证不通过,就会废弃该交易数据,不会对它再进行广播。新区块的生成也是通过广播来确认的,找到满足条件的随机数后进行广播,记过验证后确认新区块的记账权,生成新的区块,全网进行同步,将该块添加到主链上。

共识机制:分布式网络的核心难题是如何高效地达成共识,就好比现有的社会系统,中心化程度高的、决策权集中的社会更容易达成共识,像独裁和专制,但是社会的满意度很低;中心化程度低的、决策权分散的社会更难达成一致,像民主投票,但是整个社会的满意度更高。“任何基于网络的数据共享系统,都最多拥有以下 3 条中的 2 条:1) 数据一致性(C);2) 对数据更新具备高可用性(A);3) 能容忍的网络分区(P)”,即 CAP 理论,分布式网络已经带有了 P,那么C 或 A 只能在两者中选择一条。如何在一致性和可用性之间进行平衡,在不影响实际使用体验的前提下还能保证相对可靠的一致性,是研究共识机制的目标。早期的比特币采用高度依赖节点算力的 PoW 机制来保证比特币网络分布式记账的一致性,随着各种竞争币种的发行,更多相似的共识机制得以出现,PoS 就是一种基于 PoW 并且进行改进的共识机制。

PoW 共识机制:PoW 机制是由中本聪所设计的适用于比特币系统的共识机制,其核心思想是通过引入分布式节点的算力竞争来保证数据一致性和共识的安全性。在比特币中,所有参与“挖矿”的节点都在遍历寻找一个随机数,这个随机数使当前区块的区块头的双 SHA256 运算结果小于或等于某个值,找到符合要求的随机数的节点获得当前区块的记账权,获得一定数额的比特币作为奖励。另外,引入动态难度值,使求解该数学问题所花费的时间在 10 min 左右。PoW 共识机制具有十分重要的意义,将比特币的发行、交易和记录完美地联系起来,同时还保证了记账权的随机性,确保比特币系统的安全和去中心化。GHOST(Greedy Heaviest Observed Subtree)协议:GHOST 协议是为了解决比特币使用 PoW算力竞争引起的高废块率带来的算力浪费问题。废区块指的是在新块广播确认的时间里“挖”出的符合要求的区块。GHOST 协议提出在计算最长链时把废区块也包含起来,即在比较哪一个区块具有更多的工作量证明时,不仅有父区块及其祖先区块,还添加其祖先区块的作废后代区块来计算哪个块拥有最大的工作量证明。在以太坊中,采用了简化版 GHOST 协议,废区块只在五代之间参与工作量证明,并且废区块的发现者也会收到一定数量的以太币作为奖励。

PoS 共识机制:PoW 共识机制有明显的缺点,算力资源被过多地浪费掉,PoS 共识机制是为了解决 PoW 的缺陷而提出的替代方案。PoS 本质上是采用权益证明来代替 PoW 的算力证明,记账权由最高权益的节点获得,而不是最高算力的节点。权益证明就是资源证明,拥有最多资源的节点挖矿的难度最小。以太坊目前采用的仍然是 PoW,但是正在开发的下一版本将会转为 PoS 共识机制。

激励机制:激励机制是区块链技术中的重要一环,以比特币为例,开采出新的区块的节点会得到一定数量的比特币和记账权,记账权使节点在处理交易数据的时候得到交易费用。比特币的交易费用基于自愿原则,提供交易费用的交易会被优先处理,而不含交易费用的交易会先放在交易池中,随时间的增加而增加其优先级,最终还是会被处理。激励机制保证了整个区块链网络的保持向外扩张,促使全节点提供资源,自发维护整个网络。以比特币为例,目前整个比特币网络的算力已经达到 800 000 000 Gh/s,超过了全球Top 500 超级计算机的算力总和,想要对整个比特币网络做出影响几乎不可能。

4 区块链节点

在最初的区块链网络设计中,不存在任何中心化的特殊节点和层级结构,每个节点完全对等,承担着网络路由、验证交易信息、传播交易信息、发现新节点等工作。但是实际上物理设备是存在明显性能差距的,以比特币网络为例,可作为节点的设备有个人计算机、服务器、专为比特币挖矿设计的矿机,以及移动端,它们提供的算力相差了几个数量级,并且存储空间也不同。目前市面上可见的移动端存储空间最大不过 100 GB 左右,而存有全部数据的区块链数据总量已经超过60 GB,想要将移动端作为全节点无疑是不现实的。于是有了全节点和轻型节点,全节点是传统意义上的区块链节点,包含有完整的区块链数据,支持全部区块链节点的功能。全节点通常是高性能的计算设备,比特币刚面世时依靠 CPU 来提供算力,后来使用 GPU,发展到现在是专门设计将SHA256 算法固化到硬件的矿机,算力成几何增长趋势。轻型节点是依靠全节点存在的节点,不用为区块链网络提供算力,只保存区块链的区块头,由于区块头包含了 Merkle 根,可以对交易进行验证。轻型节点多为移动端,如智能手机、平板电脑、移动计算机等。 

5  智能合约 

区块链技术的智能合约是一组情景——应对型的程序化规则和逻辑,是部署在区块链上的去中心化、可信息共享的程序代码。签署合约的各参与方就合约内容达成一致,以智能合约的形式部署在区块链上,即可不依赖任何中心机构自动化地代表各签署方执行合约。智能合约具有自治、去中心化等特点,一旦启动就会自动运行,不需要任何合约签署方的干预。智能合约的运行过程如下。智能合约封装预定义的若干状态、转换规则、触发条件以及对应操作等,经过各方签署后,以程序代码的形式附着在区块链数据上,经过区块链网络的传播和验证后被记入各个节点的分布式账本中,区块链可以实时监控整个智能合约的状态,在确认满足特定的触发条件后激活并执行合约。智能合约对区块链有重要的意义,智能合约不仅赋予了区块链底层数据可编程性,为区块链2.0 和区块链 3.0 奠定了基础;还封装了区块链网络中各节点的复杂行为,为建立基于区块链技术的上层应用提供方便的接口,拥有了智能合约的区块链技术前景极为广阔。例如,对互联网金融的股权招募,智能合约可以记录每一笔融资,在成功达到特定融资额度后计算每个投资人的股权份额,或在一段时间后未达到融资额度时将资金退还给投资人。还有互联网租借的业务,将房屋或车辆等实体资产的信息加上访问权限控制的智能合约部署到区块链上,使用者符合特定的访问权限或执行类似付款的操作后就可以使用这些资产。甚至与物联网相结合,在智能家居领域实现智能自动化,如室内温度湿度亮度的自动控制、自动门允许特定的人进入等。现有水平的智能合约及其应用本质逻辑上还是根据预定义场景的“IF-THEN”类型的条件响应规则,能够满足目前自动化交易和数据处理的需求。未来的智能合约应具备根据未知场景的“WHAT-IF”推演、计算实验和一定程度上的自主决策功能,从而实现由目前“自动化”合约向真正“智能”合约的飞跃。

6  上层应用

前文系统地介绍了区块链技术,有了一个比较全面的系统性概念之后,可以更为深入地研究基于区块链技术的上层应用。目前的区块链应用都具有相似的架构,各家的重心在于研发不同的上层应用。比特币是经典区块链应用,所使用的区块链技术十分具有研究学习价值。然而,比特币本身作为一种数字货币来说存在局限性,虽然可以用很低的成本开发出其他的数字货币(实际市面上存在很多类似的竞争币),但是很难开发出除了数字货币之外的应用。以太坊是另一个使用区块链技术的产品,不仅在底层解决了区块链原有的一些问题,更是把区块链技术进行封装,降低区块链和具体上层应用的耦合性。以太坊提供功能强大的智能合约语言来进行上层应用的设计,开发者们通过部署智能合约可以方便快捷地开发区块链应用。以太坊的最终目标是将所有节点连接起来,成为一台拥有恐怖算力的虚拟机,虚拟机上运行着各种各样的分布式应用,彻底改变现有的网络架构。

综述

自 2009 年到 2018 年,区块链技术已经走过了 9 个春秋,经历了区块链 1.0 时代,目前处于区块链2.0,正在向区块链3.0 稳步迈进。区块链1.0 更适合被称作狭义区块链技术的时代,其代表为比特币;区块链2.0 是功能强大的智能合约时代,可以实现更为高级更为复杂的功能,大大扩宽区块链技术的应用场景;至于区块链3.0,是将区块链技术的去中心化和共识机制发展到新的高度、影响全人类意识形态的时代。目前,受到较多关注的研究方向是去中心化自治社会(DAS),这是一个从去中心化应用(Dapp)逐渐发展到去中心化自治组织/公司(DAO/DAC),最后实现 DAS 的发展方向。区块链技术天然契合分布式社会系统的概念,其中每个节点都将作为分布式系统中的一个自治的个体,随着区块链生态体系的逐步完善,自治节点通过更为复杂的智能合约参与各种 Dapp,形成特定组织形式的DAO 和 DAC,最终形成 DAS。

你可能感兴趣的:(区块链架构与关键技术详解)