比特币区块链系统架构

背景:比特币系统作为世界上第一个大规模成功运营的区块链系统,也建立了区块链系统体系结构的标准——P2P体系结构,即对等网络结构。

  • 每个节点都通过底层的P2P网络协议发现、连接其它区块链网络节点,并提供P2P网络的路由功能;

  • 个节点可以通过PoW共识机制竞争计算新区块的出块权(俗称“挖矿”);

  • 每个节点都可以存储完整的区块链与账本数据,每个节点都可以发起和监听比特币网络上的交易信息,验证每个交易和区块的合法性

关于节点

节点总体上可以分为“全节点”、“轻节点”等两大类,其中发挥核心作用的是全节点。

全节点

  • 全节点是比特币系统中功能最完整的节点,全节点一般要求保持一直在线,主要负责执行以下功能:

  • 参与区块记账权的竞争,通过PoW共识机制竞争下一个新区块的出块权,获得出块权的节点将获得系统激励,激励的方式就是奖励一定数量的比特币,也是比特币这种加密货币的唯一产生来源。

  • 存储完整的区块链与账本数据,每个全节点都保存了一个相同区块链与账本数据副本,自2009年比特币系统上线运行至今,每个全节点的区块链与账本数据存储容量已超过500GB。

  • 提供P2P网络路由与同步服务,监听系统网络上的交易、区块及事件信息,对接收到的交易和区块数据进行验证,并通过Gossip协议进行数据分发与同步。

轻节点

  • 轻节点主要负责提供交易和钱包功能,不参与出块权的竞争计算,不会存储完整的区块链,只需要保存每个区块的区块头信息,以及与节点自身相关的交易信息,可以发起简单支付验证请求SPV(Simplified Payment Verification),向全节点请求数据来验证交易,也提供P2P网络的路由功能。

系统逻辑架构

1.png

  1. 比特币系统的存储层主要采用文件系统和LevelDBKey-Value数据库

  2. 比特币系统的数据层是系统核心功能层级之一。

    主要功能

    • 对比特币系统核心的区块、区块链、交易、账本、地址等关键数据结构进行定义和处理
    • 负责将交易打包进区块,由区块组成区块链
    • 没有采用传统的账户/余额模型,而是采用特殊的UTXO模型构建账本数据,并基于底层的存储服务提供对比特币区块链数据的安全读写访问管理。
  3. 比特币系统的网络层是系统核心功能层级之一,主要采用非结构化P2P网络,基于Gossip数据分发协议

    主要功能

    • 实现网络节点快速发现与连接,以及区块、交易数据的分发与同步
    • 为比特币系统各网络节点之间提供节点发现与安全连接通信机制
    • 为交易、区块信息在区块链网络所有节点之间提供高效传播与有效性验证机制。
  4. 比特币系统的共识层是系统核心功能层级之一,采用PoW工作量证明共识机制

主要功能

  • ​ 让所有的比特币网络节点都认可每次计算产生的新区块
  • ​ 并且协调保证所有比特币网络节点数据记录一致性,使比特币系统的整体状态达成一致。
  1. 比特币系统的激励层在共识层的功能基础上,提供了总量有限的比特币发行和出块激励机制,对于加入比特币网络的节点,都能公平地通过参与PoW工作量证明竞争计算,都有一定机率被区块链系统增发奖励一定数量的比特币。

  2. 比特币系统的合约层没有提供真正意义的智能合约功能,而是基于一种非图灵完备的、基于逆波兰表示法的Script脚本语言开发技术,提供交易相关锁定脚本/解锁脚本的定制。


什么是锁定脚本/解锁脚本?


  1. 比特币系统的接口层提供了基于JSON RPC的SDK接口和命令行接口。

  2. 比特币系统的应用层基于接口层提供的SDK接口,可以基于比特币区块链实现面向电子支付等多种应用场景和业务逻辑的公有链应用

比特币系统数据层

区块与区块链

在比特币系统中,区块(Block)是区块链系统中最基本的数据单元,用于表示和记录区块链系统一段时间内发生的交易和状态结果的数据结构,是区块链系统各节点竞争完成一次共识计算的结果,多个区块采用链式结构链接在一起就构成了区块链(Blockchain)。每个区块又由区块头(Block Head)和区块体(Block Body)两部分组成。

2.png

在区块链系统的所有区块中,第一个区块被称为“创世区块”。每个区块中存储了一定数量的交易数据,都由交易发起人的数字签名来保证其真实性和合法性,从第二个区块开始,每个区块都保存了前一个区块(父区块)的区块头的哈希值,区块之间首尾相互连接就构成链式结构,因而先前区块里的任何数据都不可被篡改

3.png

5.png

账本数据

在一个传统的具有支付功能的系统中,每个用户都有一个资金账户,支付系统会对每个账户的余额进行单独地记录和管理。当系统中有用户之间发生了支付的交易,系统会分别对参与交易的账户的余额信息进行检查和修改。

(例如,甲向乙转账50元,首先需要检查甲的账户中有50元的余额,再从甲的账户中扣除50元,并向乙的账户中添加50元。可以看到,为了保证整个系统的正确性,系统需要确保对应的支付前提条件,如甲的账户中至少有50元的余额,同时也需要保证整个支付交易过程的原子性、一致性、隔离性及持久性(ACID),即保证从甲账户扣减金额和向乙账户增加相同数量的金额这两个操作必须同时执行和完成,一旦受其他事件影响中断,甲和乙的账户必须恢复到交易前的状态。)

在比特币系统中没有直接的“账户”概念,而是用“账户地址”来代表用户的账户,相当于银行卡卡号,任何人都可以通过你的账户地址给你转账比特币。

(1) 账户地址

比特币的账户地址就是用户的公钥经过哈希计算及Base58编码运算后生成的160位(20字节)的字符串,账户地址计算生成流程。

4.png

UTXO

(2) 账本数据模型

比特币系统账本没有采用传统的“账户/余额”模型,而是提出了一种独特的UTXO(Unspent Transaction Output)未消费的交易输出模型,简称比特币UTXO模型。UTXO是一个包含交易数据和对应的执行代码的数据结构,所有的UTXO条目构成了比特币系统的“账本”。

UTXO模型的本质是通过交易记录来构成系统账本,而不是通过账户信息构成账本。在比特币的每一笔支付交易中,都有“交易输入”(标识资金来源)和“交易输出”(标识资金去向),且每个交易都可以有多个交易输入和多个交易输出,交易之间按照时间戳的先后顺序排列,且任何一个交易中的交易输入都是其前序的某个交易中产生的“交易输出”,而所有交易的最初的交易输入都来自比特币系统节点生成区块得到的激励(比特币)。

比特币系统中的每个“账户”可以视为对应着某个地址,比特币区块链不会直接跟踪每个地址的比特币余额,而是在区块链中存储交易数据的整个历史,比特币系统通过“交易池”跟踪区块链网络中所有UTXO的集合,而某个地址在某个时间点所具有的“余额”,是通过检查、求和与该地址相关的所有UTXO来计算。当使用UTXO时,它将从交易池中被删除,这将实时在计算余额时反映出来。

交易数据结构

​ 在比特币的每一笔交易数据中,都包含一个或多个“交易输入”(标识资金来源)、一个或多个“交易输出”(标识资金去向)、交易时间戳等信息。

6.png

交易输入数据结构
交易输出数据结构

状态数据

在比特币系统中,交易表示一次价值转移操作,会导致账本状态的一次改变,如增加了一条交易记录;区块表示记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识和确认;链是由一个个区块按照发生时间顺序串联而成,可以看作是整个区块链状态变化的日志记录。

在一个比特币区块的区块头中包含了Merkle树根的哈希值,在区块体中包含了所有经过验证的交易数据。区块体中所有交易数据的哈希值构成了一棵Merkle树,每个叶子节点是每个交易信息的哈希值,将该Merkle树的根节点的值,称根哈希(Root Hash)或主哈希(Master Hash),存入区块头。

比特币系统网络层

P2P网络结构

比特币系统采用的P2P网络属于非结构化P2P网络,不存在中心服务器,比特币网络中存在“全节点”、“轻节点”等不同类型的节点,不同类型的节点在网络中扮演的角色也有所不同,其中发挥核心作用的是全节点。

全节点

全节点要一直在线,是比特币P2P网络中功能最完整的节点,全节点要竞争计算新区块的出块权,会存储完整的区块链数据,要监听比特币网络上的交易信息,验证每个交易的合法性,并提供P2P网络的路由功能。

轻节点

轻节点不需要一直在线,不参与出块权的竞争计算,不会存储完整的区块链,只需要保存每个区块的区块头信息,以及与自己相关的交易信息,可以发起简单支付验证请求SPV,向全节点请求数据来验证交易,并提供P2P网络的路由功能。轻节点除了主要提供交易功能外,还常常提供钱包功能。

​ 比特币系统的P2P网络基于TCP构建,默认RPC通信服务端口是8332,默认数据同步端口是8333,比特币系统的P2P网络主要采用了Gossip协议来实现节点发现、节点连接、区块广播、交易广播等功能。

节点发现管理

交易广播

在比特币系统中,节点为了向比特币系统发送一笔交易,需要向邻近的对等全节点发送Inv消息。如果接收到对等节点返回的GetData消息,节点再使用Tx消息向对等节点发送交易信息。对等节点接收到交易信息后,将以同样的方式向其它邻近节点转发交易信息。

7.png

交易池

比特币网络中每个节点都会维护一个未确认交易列表,称为“交易池”。节点使用交易池记录并跟踪等待被区块链系统确认的交易。例如,具有钱包功能的节点会使用交易池来记录那些已发送到网络但还未被确认的,只与该节点上的钱包相关的预支付交易信息。

某些节点还维护一个单独的“孤立交易池”。所谓“孤立交易”是指,如果一个交易的输入与某未知的交易有关,如与缺失的父交易相关,该孤立交易就会被暂时存储在孤立交易池中直到父交易的信息到达。当一个交易被添加到交易池时,会同时检查孤立交易池,看是否有某个孤立交易引用了此交易的输出(子交易)。任何匹配的孤立交易会被进行验证。如果验证有效,它们会从孤立交易池中删除,并添加到交易池中。

区块广播与同步

比特币系统共识层

PoW工作量证明共识机制

比特币系统通过共识机制竞争计算生成新区块的过程,被称为“挖矿(Mine)”,因此比特币网络节点又被称为“矿工(Miner)”,后续如以太坊等其它区块链系统都延用了这种说法。

8.png

PoW共识机制的特点

比特币系统的PoW共识机制具有两大特点

(1) 比特币系统PoW共识机制采用的“难题”具有难以解答,但很容易验证答案的正确性的特点,同时求解难题的“难度”,即比特币网络节点平均解出一个难题所消耗时间,是可以通过调整难题中的部分参数来进行控制的,因此比特币系统可以很好地控制链增长的速度;

(2) 通过控制区块链的增长速度,保证了如果一个节点成功解出难题完成了新区块的创建,该区块能够以更快的速度在所有节点之间传播,并且得到其他节点的验证,再结合比特币系统所采取的“最长链有效”的评判机制,就能够在大多数(超过比特币网络51%算力)节点都是诚实的情况下,避免恶意节点对区块链的控制。

竞争出块冲突

比特币系统激励层

激励机制

在比特币系统中,比特币网络约每10分钟生成一个不超过1MB大小的区块,用于记录这10分钟内发生的验证过的交易内容,并将区块串联到最长的链尾部,每个区块的成功提交者可以得到系统一定数量的比特币的奖励(该奖励将作为区块内的第一个CoinBase交易,并将在一定区块数后才能使用),以及用户附加到交易上的支付服务费用。因此,即使没有任何用户交易,比特币网络也可以自行产生合法的区块并生成奖励。每个区块的奖励最初是50个比特币,每隔21万个区块(约4年时间)自动减半,最终比特币总量稳定在2100万个

比特币系统的激励机制主要包括以下要点:

(1)加密货币总量固定:比特币总量不超过 2100 万个。

(2)出块激励:每当有节点获得一个区块的记账权,比特币系统就会发行出新的比特币作为对节点的奖励。一个区块产生的比特币数量都会按几何级数递减,每产出 21 万个区块,获得奖励的比特币数量就会减少 50% 。截至2022年,每个区块的奖励已降低为6.25个比特币,是比特币系统上线时的八分之一。

(3)交易激励:用户会在交易中包含交易费,作为处理交易的服务费支付给获得区块记账权的节点。

比特币系统合约层

比特币系统的交易脚本

比特币系统没有账户机制,而采用了一种比较特别的 UTXO交易模型,类似于财务会计记账方法,每一笔交易数据主要包括两部分:交易输入记录和交易输出记录。

(1)交易输出记录中除了包含输出比特币金额外,还包含了称为“锁定脚本”的一段脚本代码。

(2)交易输入记录中除了包含对前一个交易输出部分的引用外,还包含了称为“解锁脚本”的一段脚本代码。

交易脚本执行机制

图灵完备性

逆波兰表示法

交易标准脚本

(一)填空题

1. 在比特币系统中,每个区块又由 和 两部分组成。

2. 年 月,随着比特币区块链系统生成了第一个区块,标志着世界上第一个区块链系统的诞生。

3. 比特币的标准单位是 ,最小单位是 ,1个标准单位的比特币等于 个最小单位的比特币。

4. 比特币系统的发行量每四年减半,总量上限为 万枚,并且无法被超发。

5. 比特币网络中存在 、 等不同类型的节点,不同类型的节点在网络中扮演的角色也有所不同。

6. 比特币系统每个区块的区块体所包含的交易记录列表,实际上就是可以用于唯一标识与检索指定交易的交易哈希值列表,区块头中将存储由所有交易哈希值构造的 树的根哈希值。

(二)选择题

1. 在区块链系统的所有区块中,第一个区块被称为( )。

A. 初始区块 B. 创世区块 C. 元区块 D. 头区块

2. 在比特币系统区块链的每个区块的区块头中会保存多个哈希值,但没有保存( )。

A. 当前区块整体的哈希值 B. 当前区块的区块头的哈希

C. 前一个区块的区块头的哈希值 D. 下一个区块的区块头的哈希值

3. 比特币系统采用( )模型,通过交易记录来构成系统账本。

A. UTXO B. 账户 C. 数据库 D. 会计

4. 比特币的账户地址就是( )经过一系列哈希计算及Base58编码运算后生成的160位(20字节)的字符串。

A. 用户私钥 B. 用户公钥 C. 随机数 D. 节点IP地址

5. 在比特币系统中,每一笔交易数据中不包含的是( )。

A. 交易输入 B. 交易输出 C. 交易哈希 D. 交易金额

三)简答题(任选3道)

1. 请简述比特币系统的区块链中各个区块是怎么链接的

2. 请简述比特币系统的“账户地址”是怎样计算生成的

3. 请简单分析比特币系统PoW共识机制节点竞争计算生成新区块的过程

4. 请简述比特币系统的出块激励规则

5. 请简述比特币系统如何处理竞争出块冲突和孤块

6.什么是比特币区块链系统的Layer2技术,请分析一个典型的比特币Layer2项目?