Repository navigation
feat(node): sign an inconclusive when no V2 verdict can reach the threshold - #5145
Draft
haiyuechen-nearone wants to merge 9 commits into
Conversation
An acting leader whose attempts show a disagreement, or transient errors from enough nodes, runs up to three inconclusive rounds. Each round sends the signed node outcomes as evidence right after the Start, and signers join only for an acting leader with valid evidence. A signed inconclusive raises a metric labelled with its cause, its chain and the nodes involved.
…and the evidence sender of a round
… abandoned attempts
This was referenced Nov 12, 2026
…adline' into 5126-sign-an-inconclusive-for-v2-foreign-tx-requests # Conflicts: # crates/e2e-tests/tests/read_rpc.rs # crates/node/src/mpc_client/verify_foreign_tx_v2.rs # crates/node/src/network.rs # crates/node/src/network/node_outcomes.rs # crates/node/src/providers/verify_foreign_tx.rs # crates/node/src/providers/verify_foreign_tx/attempt_evidence.rs # crates/node/src/providers/verify_foreign_tx/attempt_outcomes.rs # crates/node/src/providers/verify_foreign_tx/leader_attempts.rs # crates/node/src/providers/verify_foreign_tx/leader_attempts/tests.rs # crates/node/src/providers/verify_foreign_tx/node_outcome_statement.rs # crates/node/src/providers/verify_foreign_tx/open_requests.rs # crates/node/src/providers/verify_foreign_tx/sign_v2.rs # crates/node/src/providers/verify_foreign_tx/sign_v2/tests.rs # crates/node/src/providers/verify_foreign_tx/sign_v2/tests/follower.rs # crates/node/src/providers/verify_foreign_tx/sign_v2/tests/leader.rs
…eshold An acting leader signs an inconclusive once the counting rule shows that no verdict can reach t, even counting the supporters not heard from yet. The round uses an asset among the supporters that signed exactly one outcome, the leader included, and the retries of the verdict rounds. A signer joins only when the evidence proves the rule and holds one outcome of every round participant. Each signed inconclusive raises a metric labelled with its cause and chain. Open requests are indexed by yield id.
…adline' into 5126-sign-an-inconclusive-for-v2-foreign-tx-requests # Conflicts: # crates/node/src/providers/verify_foreign_tx/open_requests.rs # crates/node/src/providers/verify_foreign_tx/sign_v2/signer.rs # crates/node/src/providers/verify_foreign_tx/sign_v2/signer/tests.rs
…adline' into 5126-sign-an-inconclusive-for-v2-foreign-tx-requests
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #5126
When the signed outcomes show that no verdict can reach t, even counting every supporter not heard from yet, an acting leader gets the network to sign
Inconclusive, with those outcomes as evidence. Signers check the same counting rule before they join.Reviewer notes:
counting_rule.rsdecides the inconclusive and its cause. Leaving statements out only makes it harder to prove, so a leader cannot force it while t nodes agree on one verdict.The asset is drawn among nodes that sent an outcome and did not sign two different ones, the leader included. Every round participant must have one statement in the evidence. Retries and the round cap are shared with verdict rounds.
A node that signed two outcomes counts as heard for no verdict. The leader keeps both statements in the evidence, so the evidence bound is twice the supporter count.
The metric
mpc_num_verify_foreign_tx_inconclusiveshas labels cause and chain only, published for every configured chain. An e2e test covers a disagreement.The transient quorum and separate inconclusive task of the old model are gone.
sign_v2/leader.rsis 550 lines.