7个稳定版本

2.2.7 2023年12月20日
2.2.6 2023年12月18日
2.2.5 2023年11月26日
2.2.2 2023年10月26日

#882 in 魔法豆

Download history 8/week @ 2024-04-08 10/week @ 2024-04-15 18/week @ 2024-04-22 4/week @ 2024-04-29 6/week @ 2024-05-06 8/week @ 2024-05-13 15/week @ 2024-05-20 15/week @ 2024-05-27 12/week @ 2024-06-03 18/week @ 2024-06-10 7/week @ 2024-06-17 15/week @ 2024-06-24 5/week @ 2024-07-01 37/week @ 2024-07-08 23/week @ 2024-07-15 17/week @ 2024-07-22

85 每月下载次数
用于 6 个crate(3个直接使用)

Apache-2.0GPL-3.0 许可证

725KB
11K SLoC

snarkos-node-bft

Crates.io Authors License

snarkos-node-bft crate 提供了一个基于BFT的内存池的节点实现。

主要

主要角色是协调器,负责推进轮次和广播锚点。

触发轮次推进

每个轮次运行,直到满足以下两个条件之一

  1. 达到coinbase目标,或者
  2. 轮次达到其超时时间(目前设置为10秒)

推进轮次

如论文中所述,BFT在n - f个顶点被传递时推进轮次。

The problem in advancing rounds whenever n − f vertices are delivered is that parties
might not vote for the anchor even if the party that broadcast it is just slightly slower
than the fastest n − f parties. To deal with this, the BFT integrates timeouts into
the DAG construction. If the first n − f vertices a party p gets in an even-numbered round r 
do not include the anchor of round r, then p sets a timer and waits for the anchor
until the timer expires. Similarly, in an odd-numbered round, parties wait for either
f + 1 vertices that vote for the anchor, or 2f + 1 vertices that do not, or a timeout.

工作者

工作者是简单的条目复制器,从网络接收交易并将它们追加到其内存池中。

为了正常工作,工作者必须与最新轮次同步,并能够对其从其他验证者的工作者收到的条目进行验证。

测试案例

  • 两个验证者,一个有X个工作者,另一个有Y个工作者。检查它们是否兼容。
  • 如果主要看到f+1个其他主要验证者已经认证了这个轮次,它应该跳到下一个轮次,如果它尚未被认证。
  • 确保从工作者接收一定数量的传输后,剩余的传输仍然为下一个轮次保留。
  • 对于传输ID,发送回一个不匹配的传输,确保它能够捕获它。
  • 对于证书ID,发送回一个不匹配的证书,确保它能够捕获它。

未解决的问题

  1. 如何保证接受的交易和解决方案的数量不超过区块限制?
    • 我们需要为工作者设置传输次数限制,同时也为主要部分设置限制。

依赖项

~75MB
~1M SLoC