Skip to content

Commit

Permalink
update learn-solana-3
Browse files Browse the repository at this point in the history
  • Loading branch information
gengteng committed Dec 25, 2024
1 parent af7b458 commit 9c2b0f2
Showing 1 changed file with 64 additions and 1 deletion.
65 changes: 64 additions & 1 deletion source/_posts/learn-solana-3.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,67 @@ tags: ['solana', 'web3', 'white paper', 'PoH', 'PoS']

> 无利害关系问题(Nothing at Stake Problem): 在权益证明系统中,验证者不需要消耗物理资源(如电力),而是依赖于其押金(Stake)。因此,如果网络分叉,验证者可以选择在多个分支上投票,因为这样不会有额外成本。他们会试图最大化收益,而不关心网络的最终一致性。
### 5.3 绑定
### 5.3 质押

用户将代币转账到一个自己名下的质押账户,这笔押金在赎回之前需要保持不动。

质押账户有锁定期,锁定期结束才能赎回。

超级多数确认了质押交易之后,质押才有效。

### 5.4 投票

1. PoH 生成器会在预定义好的周期内发布一个自身状态的签名。
2. 每个质押的身份需要发布一份状态的签名,作为投票。
3. 投票只有同意票,没有反对票。
4. 如果在超时时间内,绝对多数达成了共识,这个分支就会被认为是合法的。

### 5.5 解质押

如果用户未能按时参与投票,质押的币会被标记为“过期”,旨在强制参与者保持活跃,否则将失去投票资格。

N 作为投票失效的次数阈值,会随着过期投票的数量增加而增长,N 的动态调整也可以为网络的自愈能力提供支持,减少对投票延迟的影响。

### 5.6 选举

1. 检测到 PoH 生成器故障时,新 PoH 生成器选举就会发生。
2. 拥有最高投票权重、更高的公钥地址的验证者会被选为新的 PoH 生成器。
3. 需要超级多数确认,如果在完成确认前新的生成器故障,就重新选择下一个新的 PoH 生成器。
4. 切换选票时,投票的验证者需要在一个更高的 PoH 序列计数器上投票,否则会触发惩罚。
5. 会选择一个次级生成器,用于主生成器故障时快速切换。

### 5.7 选举触发条件

#### 5.7.1 分叉的 Proof of History 生成器

1. 只有当 PoH 生成器的标识被攻破时,才可能发生分叉。
2. 分叉的检测依据是同一个 PoH 标识发布了两个不同的历史记录。

#### 5.7.2 运行时异常

1. Bug、硬件故障、人为错误可能导致生成器生成无效状态,并发布与本地验证者不一致的签名。
2. 验证者将通过 Gossip 协议发布正确的签名,这一事件将触发新的选举。
3. 接收无效状态的验证者将收到惩罚。

#### 5.7.3 网络超时

### 5.8 惩罚

1. 恶意投票:对两个不同的序列投票,受质押削减惩罚。
2. 非恶意的竞选序列冲突,投票会被撤销,不会惩罚。
3. 对 PoH 生成器的无效哈希进行投票,受质押削减惩罚。

### 5.9 次级选举

1. 次级选举是在主序列上被提出的。
2. 在超时时间内通过绝对多数投票,次级生成器就当选了。
3. 主生成器通过在序列中插入指示交接的消息,来实现软交接。
4. 如果主生成器发生故障,已当选的次生成器会被作为第一备选。

### 5.10 可用性

1. CAP 中 Solana 选择 A 可用性。
2. 最终一致性:在合理的人类时间范围内保持一定程度的一致性。
3. 利用 PoH(Proof of History)机制提供了时间的客观测量,结合 PoS 投票记录,可以动态地取消不可用验证者的质押,调整网络的活性和一致性需求。
4. 在合理的时间内,随着不可用验证者被逐步取消质押,网络可以逐步恢复到满足 2/3 共识的状态,从而达成一致性。

0 comments on commit 9c2b0f2

Please sign in to comment.