-
Notifications
You must be signed in to change notification settings - Fork 47
feat: F3 e2e lifecycle #1469
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
base: main
Are you sure you want to change the base?
feat: F3 e2e lifecycle #1469
Conversation
fbaa095 to
b34142d
Compare
b34142d to
31feb85
Compare
91db005 to
cbce51c
Compare
39e59d6 to
bfdc6f7
Compare
93a1066 to
1747f78
Compare
…t and execute logic
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.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
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.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
| // | ||
| // Note: the first epoch proven in a certificate does not have a previous cursor. |
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.
We should be able to initialize the cursor from the base tipset's storage commitment (used only as parent here), which is the same as the last tipset in the previous cert (used as child there). WDYT?
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.
As a workaround, maybe we could fetch parent tipsets (which are not very useful anyway) right in generate_proof_for_epoch, call it for the base tipset, get the nonces from the resulting proof bundle and discard the proof. Perhaps, we can do this only once and then maintain the cursor in ProofGeneratorService struct.
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 think the best way here is to store it on L2 ledger...
Closes #1441 and #1442
Note
High Risk
Touches consensus-critical topdown finality, genesis bootstrapping, and on-chain F3 light client state encoding; misconfiguration or state transition bugs could stall syncing or lead to incorrect finality/proof handling.
Overview
Enables an F3 proof-based topdown finality path alongside legacy vote-based topdown, with startup now selecting mode based on config+genesis consistency and bootstrapping a persistent proof cache + optional proof generator service.
Updates the
f3-light-clientactor to store the power table in a HAMT (exposingpower_table_root), trackprocessed_instance_idwith monotonic/skip guards, and adjust constructor/update/get APIs and tests accordingly. Genesis-from-parent now fetches the F3 certificate to derivebase_epoch+base_epoch_eth_block_hash, and parses power values as big integers (encoded big-endian bytes) instead ofu64.Adds
fendermint_vm_evm_event_utilsand a new interpreterevent_extractionmodule to decode Solidity event proofs (NewTopDownMessage,NewPowerChangeRequest) from proof bundles using shared helpers; also refactors node topdown startup intoservice/topdown.rs, expands settings/default config docs for F3, and updates dependencies/lockfile to include new crates.Written by Cursor Bugbot for commit 9d26e91. This will update automatically on new commits. Configure here.