Lazy loaded image
⛓️BTC 共识协议与区块写入
字数 4552阅读时长 12 分钟
2025-1-13
2026-8-17
← 返回总目录 · 区块链技术与应用笔记(BTC)
签名是我用我自己的私钥加密,你用我的公钥验证;加密则是我用你的公钥加密,你用你的私钥解密
在区块链中,区块(Block) 由两个主要部分组成:区块头(Block Header) 和区块体(Block Body) 。这两部分各自包含不同的信息。
区块头包含关于该区块的元数据,主要用于识别区块的属性以及进行验证。常见的字段包括:
  • 版本(Version) :区块的版本号,标识该区块遵循的协议规则。
  • 前一区块哈希(Previous Block Hash) :指向前一个区块的哈希值,这使得区块链形成了一个链条。
  • 梅克尔根(Merkle Root) :该区块内所有交易的哈希值根,用于快速验证该区块中的交易是否被篡改。
  • 时间戳(Timestamp) :区块被生成的时间。
  • 难度目标(Target) :工作量证明算法中的目标值,确定挖矿的难度。
  • 随机数(Nonce) :矿工用来挖矿的随机数,改变此值以满足目标值。
  • 区块哈希(Block Hash) :区块头的哈希值,是区块的唯一标识符,生成时会根据区块头的所有字段计算。
区块体包含区块的实际数据,通常包括所有的交易和其他相关信息。主要字段包括:
  • 交易(Transactions) :区块体内包含的所有交易数据。每一笔交易都记录了参与者、交易金额等信息。
  • 交易计数(Transaction Count) :区块中包含的交易数量。
 
区块哈希是通过计算区块头的内容生成的,而不包括区块体(即交易数据),因为merkle root hash就已经保证了区块体中数据的真实性不被篡改,因为merkle root hash的值就跟区块体有关
CAP定理(也叫Brewer定理)描述了分布式系统中三大关键特性之间的权衡关系。CAP定理的核心是,在分布式系统中,无法同时实现一致性、可用性和分区容错性。分布式系统最多只能同时保证其中的两个特性,而必须在三个特性之间做出选择。
CAP定理表明,分布式系统在设计时,不能同时满足以下三个特性:
  1. 一致性(Consistency):所有节点在同一时刻看到的数据是相同的,即每次读取操作都能返回最新的写入结果。换句话说,系统的所有副本都保持一致。
  1. 可用性(Availability):每个请求都会得到响应,无论请求是否成功,系统都会回应,保证系统持续可用,能够提供服务。
  1. 分区容错性(Partition Tolerance):即使系统发生网络分区(某些节点或网络无法相互通信),系统仍然能继续运行并提供服务,不会中断。
可能的组合:
  1. 一致性 + 可用性(CA)
      • 系统保证一致性和可用性,但在发生网络分区时无法容忍分区。例如,在没有网络问题的情况下,系统会保持一致且可用,但如果发生分区,系统可能会拒绝部分请求。
  1. 一致性 + 分区容错性(CP)
      • 系统保证一致性和分区容错性,但可能在发生网络分区时牺牲可用性。即系统保持一致性,尽管部分节点不可用,但不会让不一致的数据进入系统。
  1. 可用性 + 分区容错性(AP)
      • 系统保证可用性和分区容错性,但可能在网络分区时不保证一致性。即使发生分区,系统仍会回应请求,但数据可能不一致,直到分区解决。
网络分区是指在分布式系统中,网络故障导致部分节点之间无法通信,形成了若干个互相隔离的子网络。换句话说,网络中的一些节点因为通信中断而无法与其他节点交换信息,这种状态被称为“网络分区”。
网络分区的影响:
  1. 节点隔离:分区会导致某些节点无法访问其他节点的数据或服务,甚至无法知道其他节点的状态。
  1. 一致性问题:在分区状态下,系统的多个子集(分区)可能会继续执行操作,但由于无法通信,它们可能会对相同的数据进行不同的更新,导致数据的不一致性。
  1. 可用性影响:虽然分区后的子网络仍然可以响应请求,但系统的一部分可能会因为无法通信而无法正常工作。
网络分区的例子:
  • 数据中心之间的网络中断:假设一个分布式系统的不同数据中心之间发生了网络问题,导致某些数据中心不能与其他数据中心通信。
  • 节点故障导致的分区:如果某些节点由于硬件或软件问题失去连接,也会发生网络分区。
分布式系统中的应对:
根据CAP定理,当发生网络分区时,系统需要在一致性可用性之间做出选择:
  • 如果选择一致性(CP),系统会拒绝一部分请求,直到网络恢复连接,确保在分区状态下的数据一致性。
  • 如果选择可用性(AP),系统会继续响应请求,即使可能返回不一致的数据,直到网络恢复。
区块链系统中通常会保证分区容错性一致性
  1. 分区容错性(Partition Tolerance) :区块链系统必须能够容忍网络分区,即使部分节点或网络无法互相通信,系统仍然能够继续运行,并最终恢复一致性。这是分布式系统的基本需求,尤其在去中心化的环境中,分区容错性至关重要。
  1. 一致性(Consistency) :区块链系统通过共识机制(如Proof of Work、Proof of Stake等)来确保所有节点在同一时刻看到相同的数据。这意味着即使存在网络分区或延迟,最终所有合法节点都会达成一致,确保区块链的数据不会发生冲突。
通常,区块链系统在面对网络分区时,会选择牺牲可用性(Availability)来保持一致性和分区容错性。例如,在分区发生时,可能会暂停一些交易操作,直到网络恢复并重新达成一致。
账本的内容要取得分布式的共识
比特币共识(consensus in bitcoin)
在比特币中共识机制(Consensus Mechanism)是用来确保网络中所有节点对区块链的状态达成一致的规则。比特币采用的是一种称为工作量证明(Proof of Work, PoW)的共识机制。这个机制通过矿工的计算能力来确保区块链的可靠性、数据一致性和去中心化。
1.工作量证明(PoW)
工作量证明是比特币和其他许多加密货币使用的核心共识机制。它要求网络中的矿工通过解决复杂的数学难题(哈希运算)来获得新区块的创建权。这个过程有以下几个关键步骤:
  • 计算哈希:矿工不断尝试调整区块头的Nonce值,计算区块头的哈希值,直到找到一个满足特定要求(通常是哈希值低于某个目标值)的哈希。
  • 竞争:矿工与其他矿工竞争,谁先找到有效的哈希值,谁就有权将该区块添加到区块链中。
  • 区块的广播:当矿工找到符合条件的区块时,他们将该区块广播到整个比特币网络中。网络中的其他节点会验证该区块是否合法(是否符合工作量证明的要求)。
2. 分布式网络中的共识
比特币网络是去中心化的,没有一个中央权威来验证交易或维护账本。网络中的每个节点都可以加入或退出,且节点间通过协议确保一致性。共识机制的作用是确保网络中所有的节点在没有信任的情况下对账本的内容达成一致。
3. 分叉和最长链规则
在比特币中,区块链的分叉可能发生,当两个矿工几乎同时找到有效区块时,网络中会出现两条相同长度的链。为了解决这一问题,比特币采用了最长链规则
  • 最长链规则:网络中的节点总是认为拥有最多工作量的链(即包含最多区块的链)是有效链。因此,分叉链中的较短链会被网络自动丢弃,节点会选择将新区块添加到最长链上。
  • 这个机制通过持续的竞争确保了比特币网络的最终一致性,并避免了网络分裂或无效区块的生成。
4. 矿工的激励
为了激励矿工参与工作量证明并维护网络安全,比特币为成功挖出新区块的矿工提供奖励。这些奖励包括:
  • 区块奖励:每成功挖掘一个新区块,矿工会得到一定数量的比特币。最初的区块奖励为50比特币,但每四年减半,截至2024年区块奖励为6.25比特币。
  • 交易费用:矿工还会收到该区块内所有交易的手续费。随着比特币区块奖励逐渐减少,交易费用将成为矿工的重要收入来源。
5. 网络安全与去中心化
通过工作量证明和矿工的竞争,整个比特币网络实现了去中心化的共识。没有任何单一实体可以控制整个网络。为了篡改区块链中的数据,攻击者需要重新计算并重做所有后续区块的工作量证明,这在算力充足的比特币网络中几乎是不可能完成的任务。
新区块写入链中的全流程
1. 交易的生成和广播:
  • 用户发起比特币交易,将交易信息(如发送者、接收者、交易金额等)广播到比特币网络。
  • 所有比特币网络中的节点都会接收到这些交易,并进行验证,确保交易的有效性(例如,确认发送者有足够的比特币余额)。
2. 矿工收集交易并组成区块:
  • 一旦交易经过验证,矿工会选择一些未被确认的交易(这些交易还没有被包含在任何区块中),将其打包成一个候选区块。
  • 该候选区块除了包含交易数据外,还包含了一个区块头(block header),其中包括:
    • 上一个区块的哈希(Previous Block Hash)
    • 该区块的时间戳(Timestamp)
    • 默克尔根(Merkle Root):所有交易的哈希值的压缩表示
    • 难度目标(Difficulty Target)
    • Nonce:一个随机数,用于调整区块头的哈希值
3. 矿工开始挖矿:
  • 矿工会不断调整Nonce的值,以计算区块头的哈希值。哈希值是通过对区块头信息(包括上一个区块的哈希、时间戳等)进行加密计算得到的。
  • 矿工的目标是使区块头的哈希值小于或等于设定的目标值(target) 。这个目标值通常是一个很小的数值,要求哈希值必须非常小,才能符合条件。
4. 验证工作量证明:
  • 每当矿工调整Nonce并计算出一个新的哈希值时,他会检查这个哈希值是否满足目标条件。如果满足条件(即哈希值小于或等于目标值),矿工就成功地完成了工作量证明。
  • 此时,矿工可以将他计算得到的区块广播到整个比特币网络。
5. 网络验证新区块:
  • 其他节点会验证该区块中的交易和区块头的哈希值是否有效。如果区块是合法的(例如,哈希值确实满足条件,且交易有效),区块会被添加到本地的区块链副本中。
  • 验证通过后,该新区块就成为比特币区块链的一部分。
6. 矿工获得奖励:
  • 成功写入新区块的矿工将获得区块奖励,这通常包括新生成的比特币(即区块奖励)和该区块内交易的交易费用。这笔奖励鼓励矿工继续挖矿,并保持比特币网络的运行。
7. 重复过程:
  • 每当新区块被添加到区块链后,矿工开始使用新区块的哈希作为下一个区块的“前一个区块哈希”,开始新的挖矿过程。这确保了比特币区块链的连贯性和不可篡改性。
区块链出现分叉怎么办
当比特币网络中出现两个矿工同时算出新区块的情况,导致多个同样长度的链并存时,会发生一种称为分叉(Fork)的情况。即在同一时刻,两个不同的区块链版本存在于网络中,且它们具有相同的长度。以下是出现分叉后的处理过程:
1. 分叉的产生
  • 假设两个矿工几乎同时找到符合条件的区块,并将这两个新区块广播到比特币网络中。
  • 由于网络的传播延迟,部分节点可能会先收到一个新区块,而其他节点收到的是另一个新区块。在这种情况下,网络中会同时出现两个区块链的分支,节点会各自添加他们接收到的区块,形成两个具有相同长度的链。
2. 长链规则(Longest Chain Rule)
  • 比特币网络通过最长链规则(Longest Chain Rule)来解决分叉问题。当网络中的节点发现区块链分叉时,它们会选择最长的链作为有效链。
  • 长链规则的含义是,网络中的节点总是认为具有最多工作量的链是有效链。因为工作量证明的过程是消耗计算资源的,链中包含的工作量越大,表示在该链上的计算过程越长,可信度也就越高。
也就是说,即使当前出现两条同样长的区块链,但是随着时间的推移,总有一条链变的更长,于是短的那条链被抛弃,长的那条链留下了
3. 解决分叉(回滚较短链)
  • 由于网络延迟,节点最终会收到另一个新区块,该新区块附加到分叉较长的那一侧。随着新区块的产生,整个链的长度将发生变化。
  • 网络中的节点会发现另一条链变得比它们目前的链长,因此它们会“放弃”当前的链,回滚到较长的链,并接受长链上的区块。这个过程保证了最终每个节点都有一个唯一的、连续的区块链副本。
4. 孤立区块(Orphan Block)
  • 被“抛弃”的较短链上的区块会成为孤立区块(Orphan Block),这些区块的交易仍然有效,且已经完成了验证。因此,孤立区块中的交易会重新进入交易池,待处理,最终可能会被包含在下一个区块中。
  • 这种情况不会导致资金的丢失,因为在比特币的设计中,交易只会在被确认后生效。如果一个区块被回滚,意味着它的交易也没有被确认。
5. 最终一致性
  • 通过这种方式,分叉最终会被解决,网络会保持一致性,并且区块链将只有一条有效链。
  • 在这个过程中,矿工竞争通过工作量证明达成共识,确保最终每个节点都达成一致,接受长链作为网络的唯一合法版本。
上一篇
BTC 交易方式与原理
下一篇
BTC 密码学原理与数据结构

评论
Loading...