
免责声明。 我承认我对对等层还有很多需要学习的地方;我很乐意获得更深入的资源,例如ethereum.org上关于网络层的文档。
背景。 据我所知,P2P协议需要非常谨慎地限制传播的消息,以避免拒绝服务攻击。因此,节点采用各种规则和启发式方法来决定何时传播谣言。但是,我们确实需要经常允许消息跨越整个网络,即使一些消息对当前节点来说似乎是错误或不可信的(我想到了Holesky Pectra部署失败的情况,我们需要少数链成员能够相互到达)。
因此,我们希望每个不可信的消息都被视为以下两种方式之一:
- 基本上不传播;拒绝。
- 以尽可能少的通信量传播到网络上的几乎每个节点。
例如,对于每条消息,我们可以根据网络当前的负载情况和消息的可信度来抛硬币,如果硬币正面朝上,则传播该消息。
问题。 关键点是,如果每个节点都试图独立地采用这种过滤方法,我们将(我认为)无法在上述(1)和(2)之间达到平衡。如果每个节点随机拒绝,那么消息通常会在几跳后死亡,无法到达整个网络。如果这不是真的(即随机拒绝概率很低),那么大多数消息都会到达整个网络,但这意味着我们容易受到拒绝服务攻击。
建议。 我们可以使用一种协调机制,节点不是独立抛硬币,而是协调抛同一枚硬币。如果硬币正面朝上,每个节点都会传播这个不可信的消息(根据合理的谣言传播协议;我并不是说他们必须向所有对等方广播)。如果硬币反面朝上,每个诚实的节点都同意不传播这条消息。
我们如何一起抛硬币?我们可以做一些类似于哈希消息和最近区块链头部的事情,如果最后一位是1,就传播消息。由于大部分网络都会同意最近的区块,这将具有相当好的协调属性。
扩展。 假设节点想要协调,但每个节点都想使用自己的启发式方法来判断消息的可信度,并自行决定何时传播。我们可以要求每个节点根据可信度和传播意愿,为每条消息计算一个介于0和2^{64}264之间的分数。节点然后使用上述协调哈希的最后64位来确定一个介于0和2^{64} - 1264−1之间的阈值。如果消息的可信度高于我的个人阈值,那么我就传播这条消息。这个系统仍然会有这样的属性,即它会传播大多数可信的消息,而不太可信的消息很少被传播,但有时也会允许看似不可信的消息传播。
问题。 这样的想法已经存在了吗?这是一个合理或潜在有用的想法吗?我对P2P层还有什么重要的地方没有理解?