Skip to content

Instantly share code, notes, and snippets.

@UMU618
Last active March 28, 2019 09:29
Show Gist options
  • Save UMU618/a4371496f48ba951a7462b7e901c6248 to your computer and use it in GitHub Desktop.
Save UMU618/a4371496f48ba951a7462b7e901c6248 to your computer and use it in GitHub Desktop.
翻译

eosio 插件 bnet_plugin

bnet_plugin 提供了一个 P2P 协议,使用一个非常简单的算法持久地同步两个区块链:

  1. 找到远程对等端知道的本地链上的最后一个块 ID
  2. 如果我们有下一个块发送给他们
  3. 如果我们没有下一个块,则向他们发送最旧的未到期事务

有几个输入事件:

  1. 当地链接受的新区块
  2. 被当地链认为是不可逆转的
  3. 本地链接受的新块头
  4. 本地链接受的交易
  5. 从远端收到的块
  6. 从远端收到的事务
  7. 套接字准备下次写

每个会话都负责维护以下内容

  1. 我们当前最好的链条上的最新块,我们确切地知道远端有。
  • 这可能是节点最后不可逆转的区块
  • 对端通知我们的 LIB(last irreversible block)之后的块 ID
  • 我们发送给远端的区块
  • 对端发给我们的一个区块
  1. 我们从远端收到的块 ID,以便我们可以断开对端,如果其中一个块被认为是无效的
  • 一旦区块变为可逆,我们就可以清除这些 ID
  1. 我们从远端收到的交易,以便我们不向他们发送他们已经知道的东西。
  • 这包括作为区块的一部分发送的事务
  • 我们在应用了包含事务的块之后清除了这个缓存,因为我们知道控制器不应该再次通知我们(它们会被欺骗)

假设

  1. 我们发送给对端的所有块都是有效的,并且将保存在节点分叉数据库中,直到它们变得不可逆转或被不可逆转的替代方案替换。
  2. 我们不关心对端处于哪个分叉,只要我们知道他们有早于我们想发送的区块。对端将使用其分叉数据库对其进行排序,并得出和我们一样的结论。
  3. 对端将以相同的基础向我们发送区块。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment