我正在阅读有关基于 DAG 的共识和 BFT 的内容。但是,我无法理解验证器如何将其 DAG 解释为块列表。在 BFT 中,像 Tendermint 一样,领导者是唯一在每轮提出区块的验证者,因此其他验证者可以就该区块达成一致并将其存储在自己的存储中,而不必担心该区块中会有重复的交易。另一方面,在像Narwhal这样的DAG中,他们在正常的区块链内存池中说:
提交给一个验证器的交易会被传播给所有其他验证器。这导致了细粒度的双重交易:大多数交易首先由内存池共享,然后矿工/领导者创建一个重新共享它们的块。
因此,为了防止出现这种独角鲸,减少领导者提出区块时的双重传输需求,通过广播区块而不是交易,并让领导者提出区块的哈希值,依靠 Mempool 层提供其完整性保护的内容。
在这里,我很困惑。如果我们有一个领导者,这是有意义的,所以当选择领导者时,我们可以只选择该轮的领导者区块,并丢弃同一轮中的其他区块。但是,我认为他们不会这样做。例如,在 Bullshark 中,领导者块是一个锚,他们还使用一些确定性规则提交除锚之外的其他块。
牛鲨 https://www.youtube.com/watch?v=aW1-XcGzJ8M
我的问题是:
我知道这是 6 个月后的事了,我不是独角鲸内部结构的专家,但我可以尝试一下。
独角鲸中的“区块”是协议中进行“交易”传播的最小单位。换句话说,从来没有独角鲸工人共享单个交易的实例。 “执行”将负责验证和处理交易的重播,因为它应该包含随机数。如果验证器正在重播交易,它将在此处处理
为每个验证器分配一个索引,当您可以提交领导者时,返回并按每个槽从最小到最大的索引从验证器获取事务
感觉像但不确定是否有其他方面的权衡