Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace queue of future messages with some other catch-up mechanism #130

Closed
anorth opened this issue Mar 19, 2024 · 5 comments
Closed

Replace queue of future messages with some other catch-up mechanism #130

anorth opened this issue Mar 19, 2024 · 5 comments
Labels
design-question gossipbft Relates to core GossipPBFT protocol

Comments

@anorth
Copy link
Member

anorth commented Mar 19, 2024

#124 (for #122) added a queue of messages for future instance, but opens up lots of DOS risk (#12) because they can't be validated. This should be removed before production use.

Brief thoughts about what to do instead:

  • Nodes can queue the messages that they have received and validated for the current instance and make them available for fetching by lagging nodes, until the instance completes. After a decision, the finality certificate can catch a node up.
  • Nodes might be able to skip rounds in a multi-round evaluation by fetching/observing evidence that a strong quorum of other nodes have reached a particular round. The evidence attached to a CONVERGE message is close to this, but not quite right yet. Perhaps we can tweak it to make it self-contained. Then we'll only need refetching of messages for a single round.
@Kubuxu
Copy link
Collaborator

Kubuxu commented Mar 26, 2024

An alternative to the in-instance catchup mechanism could be speculatively starting a new instance.
Handling it without power table delay is challenging, as we would need to be able to re-verify all decisions we verified speculatively when the power table is available.
With power table delay, we could passively listen, progressing through stages and rounds until we 1. get confirmation that the last instance was completed successfully and 2. we know what chain we want to vote on.

@anorth
Copy link
Member Author

anorth commented Mar 26, 2024

@Kubuxu and I discussed, and concluded that with a power table delay we don't need speculative execution. We can just check signatures and queue messages. I think it will be safe to drop equivocations at QUALITY too, or in any phase that proceeds from a timeout regardless of messages received.

@anorth
Copy link
Member Author

anorth commented May 7, 2024

See #151. These probably need to be done together:

  • Implement delayed power tables, maintaining a list of the table for the most recent N instances
  • Use these power tables, with offset, instead of getting from the host with every new chain?
    • Perhaps receive resulting power table in response to notifying a decision
  • Drop messages for which the power table isn't available (10 instances ahead of current), thus bounding the queue

The host should fetch finality certificates to skip over instances to get within 10 of the currently executing one.

@jennijuju
Copy link
Member

AI captured in #169 - @anorth ok for us to close?

@anorth
Copy link
Member Author

anorth commented May 16, 2024

This issue is about messages for future instances, not future rounds in this instance. But it's tightly coupled to #151 so I'll expect scope there and close this one.

@anorth anorth closed this as completed May 16, 2024
@anorth anorth closed this as not planned Won't fix, can't repro, duplicate, stale May 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
design-question gossipbft Relates to core GossipPBFT protocol
Projects
None yet
Development

No branches or pull requests

3 participants