{"author":{"address":null,"user":"https://learnblockchain.cn/people/22109"},"content":{"body":"我们通过具体步骤来解释用户 A 提交一笔 SOL-RAY 交易时，Solana 确认交易的过程。\r\n\r\n## 1. Solana 网络选举领导节点（Epoch 和 Slot）\r\n\r\n1/ Solana 共识过程中，有两个重要时间单位：Epoch（周期）和 Slot（间隔）。 每个 Epoch 周期包含 43.2万个 Slot。而 Slot 约为 400毫秒，也就是0.4秒。 \r\n\r\n2/ Solana 节点主要分两类：Leader 领导者，也是当前 Slot 出块者和 Validator 验证者。 每个新 Epoch 周期开始时，按 SOL 质押权重抽选 Leader 轮换顺序，当前 Epoch 内，轮换顺序一定。每 4个 Slot，更换一次 Leader，其他节点则成为 Validator 验证者。 \r\n\r\n3/ 相比之下，PoW、PoS 共识则需要进行哈希计算，或对区块投票达成共识。Solana 直接将共识成本降到尽可能最低。 好处是速度极快，坏处是，因为领导节点顺序一定，可以对出块节点定向攻击。\r\n\r\n![Image](https://img.learnblockchain.cn/attachments/migrate/1723108464650) \r\n\r\n\r\n\r\n## 2. 用户 A 提交交易（Gulf Stream 交易转发协议） \r\n\r\n交易创建：\r\n1/ 用户 A 在其钱包中创建一笔将 SOL 交换为 RAY 的交易，并将该交易提交到 Solana 网络。 \r\n\r\n2/ Solana 采用 Gulf Stream 交易转发协议，而非 Ethereum 一样的 Mempool 设计。\r\n\r\nMempool 是在本地客户端存储的待处理交易池，用户提交到以太坊链上的交易，在正式上链确认前，会先进入 Mempool，节点会对交易进行过滤、筛选。 而 Solana 则采用 Gulf Stream 取代了 Mempool。 \r\n\r\n3/ Gulf Stream 机制是将用户交易，直接转发给当前，以及未来多个领导节点。 \r\n如果当前 Slot 是 25，交易会被推送给 Slot 25 的领导节点，以及 Slot 26、27、28 等未来的领导节点。\r\n\r\n未来领导节点接收交易后，可预先对交易进行验证和缓存，从而在自己成为领导节点时，快速打包这些交易。 \r\n\r\n4/ Gulf Stream 好处是，进一步削减节点间的共识延时，进一步提升网络速度。 \r\n坏处是，节点们直接将交易转发给领导节点，在极端情况下，如用户多次重复提交同一笔交易，领导节点承压过大，容易宕机。 这也是为何，Solana 在去年 NFT Mint 和今年 MEME 币交易暴涨时，会出现交易迟迟不确认，或直接宕机情况。 \r\n\r\n5/ 以太坊是保证了网络最差情况下的可用性，而 Solana 倾向于网络最佳情况下的效率。 \r\n\r\n## 3. Sealevel 并行处理分析 \r\n\r\n在 Slot 开始时，领导节点使用 Sealevel 引擎来并行处理和执行交易。 \r\n\r\nSealevel 分析交易的依赖关系，确定哪些交易可以并行执行，哪些交易需要按顺序执行。 通过并行执行无冲突的交易，Sealevel利用多核处理器的能力，提高了交易处理的速度和效率。 \r\n\r\n## 4. 生成时间戳链（PoH, Proof of History）\r\n\r\n1/ Proof of History (PoH) 是 Solana 引入的一种时间证明机制，为每个交易创建一个唯一且可验证的时间戳。交易一旦提交，PoH 会为这笔交易生成一个时间戳 T1。 \r\n\r\n这个时间戳包含了前一个时间戳的哈希值，形成一个连续的时间链（例如，T0 -\u003e T1 -\u003e T2 -\u003e ...）。\r\n\r\n![Image](https://img.learnblockchain.cn/attachments/migrate/1723108464653) \r\n\r\n2/ PoH 实际是提供了 Solana 全网唯一且一致的时间排序方式。 \r\n\r\n## 5. 提议新区块\r\n\r\n1/ 领导节点收集交易 \r\n\r\n在当前 Slot 中，节点从交易池中收集交易，包括用户 A 的 SOL-RAY 交易 T1，以及其他待处理的交易，并根据 PoH 历史证明打时间戳。 \r\n\r\n2/ 打包区块\r\n\r\n节点根据 PoH 时间戳链，打包这些交易，生成一个新区块。新区块包含了交易T1、T2、T3等。 \r\n\r\n## 6. 广播和验证、投票、达成共识（Turbine 与 Tower BFT） \r\n\r\n### 1/ 广播新区块（Turbine）： \r\n\r\n1）节点将打包好的新区块广播给网络中的其他验证节点。 \r\n2）广播过程，采用 Turbine 技术，区块分成多个更小的数据片（Shards）。每个数据片包含区块的一部分数据。 \r\n3）举个通俗的例子。大学教授需要将一份 10GB的 大型学习资料分发给全班的100名学生。直接将整份资料发送给每个学生，会非常耗时且容易导致网络拥堵。 \r\n\r\n于是教授将资料分为 10份，用 PoH 排序为 A、B、C、D、E、F、G、H…等等，每份仅 1GB。 又将学生分为 10个组。先根据权重，每个给组长发送不同的 1GB文件，注意每个组长收到的 1GB文件是不同的。 然后，资料在小组内、跨小组交互传递。每个人迅速收到 10GB完整文件，再根据 PoH，将顺序复原。\r\n\r\n![Image](https://img.learnblockchain.cn/attachments/migrate/1723108464715) \r\n\r\n（图片来自 Solana RPC 供应商 Helius Blog） \r\n\r\n### 2/ 节点验证区块、投票、达成共识（Tower BFT）：\r\n\r\n所有接收到新区块的节点使用 PoH 时间戳链验证区块中的交易顺序和哈希值。而 Tower BFT主要在区块验证和投票阶段发挥作用。 Tower BFT 是一种渐进式共识，共识过程是逐步进行的。随着新区块的传播和验证，节点逐渐收集投票并更新自己的状态。 也就是说，由于 PoH 的存在，Solana 的节点，可以一边同步区块，一边达成共识。 而不是像其他区块链一样，需要先达成共识，之后，才能产生新区块。 \r\n\r\n## 7. 区块确认和状态更新 \r\n\r\n达成共识后，新区块被确认并添加到区块链中。\r\n所有节点将新区块添加到各自的区块链中，并更新状态。\r\n \r\n## 8. 处理分叉和容错（如有必要） \r\n \r\n分叉处理：如果在同一Slot中有多个区块提议，Tower BFT将根据时间戳链和投票结果选择最长的合法区块链分支。 \r\n\r\n容错机制：Tower BFT 设计了容错机制，即使部分节点作恶或离线，整体网络仍能保持一致性和安全性。 此外，Solana 还用到了 Pipelining 流水线处理，提高交易处理速度；Cloudbreak 水平扩展的数据结构，优化存储性能；Archivers 去中心化存储，提高存储效率。","title":"Solana 共识过程及关键名词（以实际交易为例）"},"history":null,"timestamp":1723109768,"version":1}