概述

  • Block的结构
  • 节点类型
  • 谁可以发布比特币
  • 如何验证交易的有效性(分布式共识)

Block的结构

  • version
  • hash of previours block header
  • merkle root hash
  • target
  • nonce

挖矿的过程就是寻找一个 nonce 使得 \(Hash(Header) \leq target\)。

Body

  • transcation list

节点类型

Full node

  • 一直在线
  • 在本地硬盘上维护完整的区块链信息
  • 在内存中维护UTXO集合以便快速检测交易的合法性
  • 监听比特币网络上的交易信息并验证每笔交易的合法性
  • 决定哪些交易会被打包到区块里
  • 监听别的矿工挖出来的区块并验证其合法性
  • 挖矿
    • 决定沿着哪条链挖下去
    • 当出现等长的分叉时选择哪一个分叉(缺省状态下选择先监听到的分叉)

Light node

  • 无需一直在线
  • 不保存整个区块链而只保存每个区块的 Header
  • 不保存全部的交易而只保存与自己相关的交易
  • 无法检验大多数交易的合法性而只能检验和自己相关的交易的合法性
  • 无法检测系统中发布的区块的正确性
  • 可以验证挖矿难度
  • 只能检测哪个是最长链而不知道哪个是最长合法链

谁可以发布比特币

比特币系统中唯一可以发布比特币的途径就是区块被接受后获得的奖励。奖励初始为 \(50BTC\),每接受21万个区块后奖励减半。

当奖励已经很少的时候获取BTC主要是靠交易的手续费。

如何验证交易的有效性(分布式共识)

获取记账权

挖矿的过程就是寻找一个 nonce 使得 \(Hash(Header) \leq target\),优先完成这个工作的节点就获得了这个区块的记账权。节点无法欺骗其它节点说自己完成了工作,因为其它节点可以轻松地验证上述条件是否成立。

接受区块

  1. 验证区块的信息,如难度是否正确,交易信息是否没有篡改等。
  2. 通过查看Header确定当前区块是否在扩展最长链,如果是扩展最长链则接受该区块,反之则不接受。
  3. 下列情况下可能会导致几乎同时出现两个最长的链
    • 两个人几乎同时取得了记账权。
    • 由于网络等原因一部分节点接受了一个区块,另一部分节点接受了另一个区块,以及类似的情况。
    • 其它情况。
  4. 出现这种情况的时候接受哪条链实际上是这些链各个对应的矿工的算力比拼,如果其中一条链的矿工的算力可以让该链最快地扩展,则最终该链会被其它节点接受成为最长链。

激励机制

那么凭什么让矿工来拿出算力来维持这个共识?

  • 一旦一个区块被接受,则拥有者可以获得奖励。奖励初始为 \(50BTC\) ,每接受21万个区块后奖励减半。这在奖励比较多的时候可以大大激发矿工的挖矿热情。
  • 一个区块是可以记账的,每当一笔交易被记录到一个区块内的时候,区块的拥有者就可以收取一定手续费。

参考资料