Skip to content

Commit

Permalink
finish reorg-orphan-51attack.md
Browse files Browse the repository at this point in the history
  • Loading branch information
KaKeimei committed May 29, 2024
1 parent 1ac48b3 commit 72a71ff
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_position: 1

本文介绍挖矿究竟是一种怎样的过程,哈希算法是如何工作的。

MVC类的POW挖矿是一种数学运算,矿工通过不断尝试不同的随机数来计算[区块头的哈希值](../../blockchain/bitcoin-basics/block/block-hash.md)
MVC的POW挖矿是一种数学运算,矿工通过不断尝试不同的随机数来计算[区块头的哈希值](../../blockchain/bitcoin-basics/block/block-hash.md)
,直到找到一个符合[难度目标](../../blockchain/bitcoin-basics/block/bits.md)
的哈希值,找到难度目标的哈希值的矿工会获得区块奖励以及交易手续费奖励。这个通过哈希计算获取奖励过程就是POW挖矿。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ sidebar_position: 6

# 挖矿奖励成熟期

出块之后多久可以花费奖励。

MVC挖矿奖励成熟期(maturity period)是指新挖出的MVC在区块链网络上可用于交易或转账之前必须等待的时间。在MVC网络中,这个成熟期通常是100个区块。也就是说,矿工在成功挖到一个区块并获得MVC奖励后,必须等待大约100个区块的时间,这些MVC才能被认为是成熟的并可以使用。

MVC的成熟期设置原因同其他POW区块链网络一样,主要是为了维护网络的安全性和稳定性。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,131 @@ sidebar_position: 8
---

# 重组,孤立与51攻击

POW解决冲突形成共识中的重要机制。

POW过程中,矿工们会竞争解决一个数学难题,以获得挖矿奖励。这个数学难题的解决过程是随机的,因此不同矿工可能会在同一时间内找到不同的解。当不同矿工在同一时间内找到不同的解时,就会出现分叉。

此时为了保证区块链的唯一性,共识网络会选择其中一个分叉作为主链,而将其他分叉作为孤立分叉。

## 区块重组

区块重组(block reorganization,简称重组)是指区块链中已有的区块被新的一条更长链所替代的过程。这种现象发生在两个或多个矿工几乎同时挖出有效区块,并且这几个区块都被添加到了链的末端,但由于网络传播的延迟,不同的节点可能会接收到不同的区块。这就会暂时形成多个分叉链。

POW遵循最长链原则,或者最大工作量原则。因此如果同时存在两个或者多个分叉,共识网络会选择其中工作量最大的分叉作为主链,而其他分叉则被孤立,孤立之后的分叉中所有的交易都会被回滚(如果交易同时存在于多个分叉,那最终只会生效一次)。

### 为什么会产生区块重组

区块重组的产生主要有以下几个原因:

1. **同时发现新块**:如果两个矿工几乎同时找到有效区块,这些区块会被添加到链的末端,但由于网络传播延迟,部分节点会接收到其中一个区块,而其他节点会接收到另一个区块。这就形成了链的临时分叉。

2. **网络延迟**:由于MVC网络是分布式的,网络延迟会导致不同节点在不同时间接收到新的区块,从而导致临时分叉。

3. **网络攻击**:在一些情况下,恶意矿工可能试图通过重组区块链来实现双重支付攻击。攻击者会尝试挖出一个分叉链,并且希望这条链能够超过原链的长度,从而使其成为主链。

### 区块重组的过程

1. **形成分叉**:假设在高度为 `N` 的区块之后,矿工A和矿工B几乎同时找到两个新的有效区块 `N+1A``N+1B`。此时,部分节点会接收到 `N+1A`,而其他节点会接收到 `N+1B`

2. **传播与确认**:随着时间的推移,矿工继续工作并挖掘新的区块。假设矿工C在 `N+1A` 的基础上找到了 `N+2A`,而矿工D在 `N+1B` 的基础上找到了 `N+2B`

3. **选择最长链(工作量最大)**:MVC协议规定,节点会选择接收到的最长链作为主链。如果 `N+1A` 链和 `N+1B` 链都各自生成了一个新的区块,这时两个链的长度相同,没有优先级。直到某个时刻,比如 `N+1A` 链上多了一个新的区块 `N+3A`,此时 `N+1A` 链变得更长。节点会将 `N+1A` 链视为主链。

4. **重组**:在 `N+1A` 链被确认为主链后,所有持有 `N+1B` 链的节点会抛弃 `N+1B``N+2B`,并接受 `N+1A` 链及其后续区块。这一过程称为区块重组。

### 区块重组的影响

1. **交易确认**:在重组过程中,一些已经在被弃链上确认的交易可能会失效。这些交易会重新返回到内存池,等待在新链上重新确认。

2. **网络安全**:频繁的区块重组可能影响网络的稳定性,但由于MVC网络设计了难度调整机制和挖矿奖励成熟期,这些措施可以防止频繁的区块重组并提高网络的安全性。

总之,区块重组是MVC网络正常运行的一部分,通过这种机制,网络能够在面对临时分叉时保持最终的一致性和安全性。

## 孤立区块

### 什么是孤立区块

孤立(orphan)是指在区块链中被抛弃的区块。当一个区块被抛弃时,它所包含的交易也会被回滚,这些交易可能被主链打包,也可能因为交易冲突等原因被丢弃。

矿工应当极力避免孤立区块的产生,因为孤立区块的产生会导致矿工的劳动成果被抛弃,从而浪费了矿工的算力和时间。

### 孤立区块可能的原因

由于MVC的区块大小不设上限,因此在网络情况不佳的情况下,孤立区块的产生是难以避免的。以下是可能导致孤立区块产生的原因:

1. 矿工网络延迟:矿工发现区块之后由于网络或者同步延迟无法及时将区块发送给其他矿工
2. 过大区块:如果区块过大,可能导致部分矿工无法及时接收到区块,从而产生孤立区块
3. 内存池费率不一致:由于不同的矿工采用不同的费率策略,导致内存池同步上的不一致,这回加重同步区块的难度,从而产生孤立区块

### 如何尽量避免孤立区块

如果矿工或者矿池遭遇孤立区块的情况,可以通过以下方法尽量避免孤立区块的产生:

1. 增强连通性:增加多个其他矿工的节点,提高网络连通性,减少网络延迟。
2. 提高手续费率:提高打包费率和relay费率,这样可以确保内存池的交易大概率在其他矿工的内存池中。
3. 降低打包交易的体积:尽量减少交易的体积,减少区块的大小,提高区块的传播速度。

### 双刃剑

从上面避免孤块的方法可以看出,方案2和3都会降低矿工的潜在手续费收益,而只有方案1可以兼顾网络的稳定性和矿工的收益。

所以孤块的存在并不只是网络问题,也是一种激励机制。它可以激励矿工在连通性上投入更多,以赚取更高的手续费收益。为了避免孤块,矿工会自发形成链接更紧密的[小世界网络](little-world-model.md),从宏观角度来看可以有效促进和提高整个MVC网络的性能以及吞吐量,为实现更高的TPS和MVC的宏大愿景提供了激励基础。


## 51%攻击

### 什么是51%攻击

51%攻击是指一个矿工或矿工集团(矿池)控制了MVC网络中超过50%的计算能力(哈希率),从而能够操纵区块链网络。通过控制多数哈希率,攻击者可以对区块链网络执行一系列恶意操作,这种情况在任何基于工作量证明(PoW)机制的区块链网络中都有可能发生。

### 如何实现51%攻击

实现51%攻击的步骤包括:

1. **积累计算能力**:攻击者需要积累足够的计算能力,使其哈希率超过网络总哈希率的50%。这通常需要大量的资源和硬件设备。

2. **分叉区块链**:控制多数哈希率后,攻击者可以开始私下挖掘一个独立的区块链分叉,而不是将其发现的新区块广播到网络中。

3. **攻击时刻**:当攻击者的分叉链长度超过主链长度时,他们会将自己的分叉链广播到网络中。由于MVC网络规定最长链为有效链,其他节点会接受攻击者的分叉链,抛弃原有的主链。

实际执行过程中,51%的算力只是理论上的要求,实际上攻击者可能需要更多的算力(例如超过全网90%以上)才能成功发动成功的攻击。


### 51%攻击的危害

51攻击可以带来的危害主是双花攻击以及交易回滚等:

1. **双重支付攻击**:攻击者可以通过51%攻击实现双重支付(double spending)。他们在主链上进行一笔交易,并在自己的分叉链上不包括这笔交易。当攻击者的链成为主链时,原来已经确认的交易被撤销,攻击者可以重新花费这些资金。

2. **阻止交易确认**:攻击者可以故意阻止特定交易或所有交易的确认,通过不在区块中包括这些交易,从而进行审查。

3. **阻碍其他矿工**:攻击者可以拒绝其他矿工的区块,只接受自己的区块,从而独占区块奖励。

4. **破坏网络信任**:频繁的51%攻击会破坏用户对网络的信任,导致币价下跌和用户流失。

注意,51攻击仅可以进行双花和交易回滚等攻击,但无法篡改区块链上的历史交易记录,也无法窃取用户的私钥或密码,无法未经许可动用用户资产。

一般51攻击的攻击对象主要是交易所以及资产桥等对双花交易及其敏感的服务。通过双花来进行假充值,然后在交易所提现,从而实现攻击者的利益。

### 如何避免51%攻击

1. **增加网络哈希率**:更高的网络总哈希率使得控制51%变得更加困难和昂贵。吸引更多矿工参与挖矿可以提高网络安全性。

2. **分散矿池**:鼓励矿工使用不同的矿池,避免单个矿池积累过多的哈希率,从而降低集中化风险。

3. **硬分叉与共识机制变更**:在极端情况下,网络开发者和社区可以通过硬分叉改变共识机制或实施新的安全措施来抵御攻击。

4. **经济激励**:维持一个健康的经济激励机制,使得攻击成本高于潜在收益。例如,确保MVC的市值和交易量足够大,从而使得攻击成本极高。

5. **监控和警告系统**:建立监控系统,实时监控哈希率分布,当发现某个实体的哈希率接近或超过50%时,及时发出警告并采取行动。

6. **提高确认数**:对于交易所和资产桥等服务,增加交易的确认数可以有效提高双花攻击的代价,降低被攻击的概率。

总之,51%攻击对区块链网络构成重大威胁,但通过增加网络哈希率、分散矿池、调整共识机制和建立监控系统等方法,可以有效降低这种攻击的风险。

### 诚实矿工

由于51攻击时,攻击者很难保持持续性的高算力。只是短期内爆发一波算力进行攻击。而如果MVC网络遭遇了严重的双花攻击,被攻击的受害者可以联合诚实矿工,标记攻击者的区块为无效区块,并且持续性地投入算力挖没有被双花的链,最终会使得累计工作量超过攻击分叉,使得攻击者的分叉链被重组,挽回损失。

这样的矿工也被称为诚实矿工。诚实矿工会监听双花交易,对有潜在双花风险的交易进行标记,以及对双花交易进行确认。这样可以有效的保护MVC网络的安全性。

0 comments on commit 72a71ff

Please sign in to comment.