-
Notifications
You must be signed in to change notification settings - Fork 11.3k
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
[fastpath] send certified transactions to fast path #20021
base: main
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
3 Skipped Deployments
|
8ea4bce
to
7068af0
Compare
7068af0
to
ab25d1a
Compare
91fa8d3
to
f1b0d1b
Compare
f1b0d1b
to
a23deb9
Compare
a23deb9
to
c74c272
Compare
c74c272
to
38fd8b5
Compare
38fd8b5
to
03dd704
Compare
03dd704
to
32bbf8c
Compare
32bbf8c
to
53c14dc
Compare
53c14dc
to
5690c52
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Haven't finished reviewing but leaving some first comments here.
if self | ||
.accept_votes | ||
.stake() | ||
.checked_sub(reject_votes.stake()) | ||
.unwrap() | ||
< committee.quorum_threshold() | ||
{ | ||
return None; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The rejected_votes.stake()
refers to the single transaction of index idx
. Why can't the block be certified in this case? Am I missing something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I using certified block
to mean not just the block is certified, but all its transactions are certified to be accepted or rejected. Added comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok got it, it makes sense.
Looking on the evolution of the code I start getting the feeling that the certificate
term gets overused in different flows (commit rule, fast path txes) and it could result to confusions - especially in the future or new people looking into this.
I would like your view on this , but I believe we might need to somehow differentiate the "fast path certificates" from the "consensus certificate". For example maybe we can introduce the "transactions" concept.
take_certified_output
->take_tx_certified_output
ortake_transactions_certified_output
certified_output
->transactions_certified_output
BlockOutputBatch::Certified
->BlockOutputBatch::TransactionsCertified
, orBlockOutputBatch::TxCertified
orBlockOutputBatch::WithCertifiedTransactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree certificate
is already overloaded, for example it can mean certified block in Narwhal, certified transaction in Sui and certified leaders in Mysticeti commit rule.
For a given class of entities (one of blocks, transactions, leaders), do we ever certify them in different ways? I think we do not, so we may just need to be precise on what is being certified. For example in commit rules, we need to use CertifiedLeader / LeaderCertificate instead of just certificate.
7b5a8fb
to
b6e2da7
Compare
b6e2da7
to
a77408d
Compare
a77408d
to
66c96ea
Compare
66c96ea
to
f0833c8
Compare
f0833c8
to
3323a0d
Compare
Through prototyping, I start to think that we should explore the alternative where votes are not enforced to be in the causal history of the voter, and total votes are tracked in a data structure ( |
3323a0d
to
d77372a
Compare
This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days. |
Description
Keep track of accept and reject votes from blocks. For certified blocks where every transaction has a quorum of accept or reject votes, send them to fastpath.
Test plan
CI
Release notes
Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required.
For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates.