本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
免责声明:本文仅从技术角度翻译、分析Solana,不构成任何的投资建议。 原创翻译,转载请注明出处。
4.3 验证
多核计算机验证序列时所需的时间比生成序列要少很多。
例如:
Core 1 | ||
---|---|---|
Index | Data | Output Hash |
200 | sha256(hash199) | hash200 |
300 | sha256(hash299) | hash300 |
Core 2 | ||
---|---|---|
Index | Data | Output Hash |
300 | sha256(hash299) | hash300 |
400 | sha256(hash399) | hash400 |
给定⼀定数量的内核,比如具有 4000 个内核的现代 GPU,验证器可以将哈希序列及其索引拆分为 4000 个切⽚,并确保每个切⽚从起始哈希到最后⼀个哈希都是正确的⽚。
图 4:使⽤多核进⾏验证
见图4,每个内核都能够并⾏验证序列的每个切⽚。由于所有输⼊字符串都记录到输出中,并带有附加到它们的计数器和状态,因此验证器可以并⾏复制每个切⽚。红⾊hash表⽰序列被数据插⼊而导致修改。
4.4 ⽔平缩放
可以通过将每个⽣成器的序列状态混合到其他⽣成器来同步多个历史证明⽣成器,从⽽实现历史证明⽣成器的⽔平缩放。这种缩放无需分片即可完成。两个⽣成器的输出对于重建系统中事件的完整顺序是必要的。
PoH Generator A | PoH Generator B | ||||
---|---|---|---|---|---|
Index | Hash | Data | Index | Hash | Data |
1 | hash1a | 1 | hash1b | ||
2 | hash2a | hash1b | 2 | hash2b | hash1a |
3 | hash3a | 3 | hash3b | ||
4 | hash4a | 4 | hash4b |
给定⽣成器 A 和 B,A 从 B (hash1b) 接收⼀个数据包,其中包含来⾃⽣成器 B 的最后⼀个状态。⽣成器 A 中的下⼀个状态哈希取决于来⾃⽣成器的⽣成器 B的状态,因此我们可以推导出 hash1b 发⽣在 hash3a 之前的某个时间。此属性可以传递,因此如果三个⽣成器通过单个公共⽣成器同步A ↔ B ↔ C,我们可以追踪 A 和 C 之间的依赖关系,即使它们没有直接同步。
通过定期同步⽣成器,每个⽣成器然后可以处理⼀部分外部流量,因此整个系统可以处理⼤量事件以进⾏跟踪,但代价是由于⽣成器之间的⽹络延迟⽽导致的真实时间准确性。
见图 5,两台生成器互相插⼊输出状态并记录运⾏情况。颜⾊变化表明来⾃对等⽅的数据修改了序列。混合到每个流中的⽣成hash以粗体突出显⽰。
同步是可传递的。 在 A 和 C 到 B 之间存在可证明的事件顺序。
以这种⽅式扩展是以牺牲可⽤性为代价的。10× 1 gbps 连接按照0.999的可用性计算,将有0 . 999的10次方,也就是约0.99的可⽤性。
图 5:两台生成器同步