dBFT inevitably relies on eventual message delivery, so in presence of some communication issues it can be delayed, but not subverted. Yet the degree of this delay can be somewhat impractical (as in #2803), so we may want to improve our retransmission mechanisms.
There is a concept of recovery messages already, it can be extended to re-request messages more often (wrt regular dBFT timeouts). That's the first option, using a new set of P2P messages.
Another one is to retransmit in a fashion somewhat similar to transactions, where we just repeat ExtensiblePayloads we have in a pool. It's somewhat more efficient network-wise, but it's hard to formulate strict conditions for when this should happen (dBFT timers and stages are hidden in the consensus process).
dBFT inevitably relies on eventual message delivery, so in presence of some communication issues it can be delayed, but not subverted. Yet the degree of this delay can be somewhat impractical (as in #2803), so we may want to improve our retransmission mechanisms.
There is a concept of recovery messages already, it can be extended to re-request messages more often (wrt regular dBFT timeouts). That's the first option, using a new set of P2P messages.
Another one is to retransmit in a fashion somewhat similar to transactions, where we just repeat
ExtensiblePayload
s we have in a pool. It's somewhat more efficient network-wise, but it's hard to formulate strict conditions for when this should happen (dBFT timers and stages are hidden in the consensus process).