Solana白皮书(三)

532 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

免责声明:本文仅从技术角度翻译、分析Solana,不构成任何的投资建议。 原创翻译,转载请注明出处。

4.3 验证

多核计算机验证序列时所需的时间比生成序列要少很多。

例如:

Core 1
IndexDataOutput Hash
200sha256(hash199)hash200
300sha256(hash299)hash300
Core 2
IndexDataOutput Hash
300sha256(hash299)hash300
400sha256(hash399)hash400

给定⼀定数量的内核,比如具有 4000 个内核的现代 GPU,验证器可以将哈希序列及其索引拆分为 4000 个切⽚,并确保每个切⽚从起始哈希到最后⼀个哈希都是正确的⽚。

⽣成序列的预期时间=hash总数单内核1s内处理的hash⽣成序列的预期时间 = \frac{ hash总数}{单内核1s内处理的hash数}

验证序列的预期时间=hash总数单内核1s内处理的hash可验证的核数验证序列的预期时间 = \frac{ hash总数}{单内核1s内处理的hash数 * 可验证的核数}

图 4:使⽤多核进⾏验证

见图4,每个内核都能够并⾏验证序列的每个切⽚。由于所有输⼊字符串都记录到输出中,并带有附加到它们的计数器和状态,因此验证器可以并⾏复制每个切⽚。红⾊hash表⽰序列被数据插⼊而导致修改。

4.4 ⽔平缩放

可以通过将每个⽣成器的序列状态混合到其他⽣成器来同步多个历史证明⽣成器,从⽽实现历史证明⽣成器的⽔平缩放。这种缩放无需分片即可完成。两个⽣成器的输出对于重建系统中事件的完整顺序是必要的。

PoH Generator APoH Generator B
IndexHashDataIndexHashData
1hash1a1hash1b
2hash2ahash1b2hash2bhash1a
3hash3a3hash3b
4hash4a4hash4b

给定⽣成器 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:两台生成器同步