| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
Split `SignedBlock.proof` into `BlockProof { proposer_signature,
attestation_proof }`. The proposer's raw XMSS signature is now carried as
a standalone field and verified directly with the hash-based XMSS verifier,
while `attestation_proof` is a lean-multisig Type-2 over the block body's
attestations only.
Previously the proposer signature was wrapped as a singleton Type-1 and
merged into a single block Type-2 alongside every attestation, so even a
block with zero attestations needed a prover call. Decoupling the proposer
lets the attestation aggregate be built independently of the block root (a
prerequisite for proposer prebuild) and removes prover work from the
empty-attestation case.
before: block-proof = aggregate([prop-sig, att0, att1])
after: block-proof = (prop-sig, aggregate([att0, att1]))
before (no atts): aggregate([prop-sig])
after (no atts): (prop-sig, empty-proof)
Verification now checks the raw proposer signature against the proposer's
proposal pubkey, then verifies the attestation Type-2 over attestation
components only (and rejects a stray aggregate on an attestation-less block).
Reaggregation drops the proposer component from the split layout.
NOTE: this diverges from the leanSpec #799 single-merged-proof wire format,
so the signature/SSZ spec tests fail against the current cross-client
fixtures until those are regenerated for the new layout. Draft PR.
…re-outside-block-proof # Conflicts: # crates/blockchain/src/lib.rs
# Conflicts: # crates/blockchain/src/lib.rs # crates/blockchain/src/reaggregate.rs # crates/blockchain/src/store.rs # crates/common/types/src/block.rs
…re-outside-block-proof
…re-outside-block-proof
…re-outside-block-proof # Conflicts: # crates/blockchain/src/lib.rs # crates/blockchain/src/reaggregate.rs
The crypto timer started after the proposer signature check, so that verification landed between the two reported components and was counted in neither: an attestation-less block logged crypto_elapsed=0ns while total_elapsed showed ~370us of real work. That gap is exactly the cost this branch moves out of the aggregate, so leaving it unreported hides the effect of carrying the proposer signature outside the block proof. Start the crypto segment at the end of the structural one instead, so both verification steps are counted and the two components sum to total_elapsed. Slot narrowing moves above the boundary as well: it is a range check, so it belongs in the structural segment rather than in the gap.
…re-outside-block-proof # Conflicts: # crates/blockchain/src/store.rs
…proof The proposer signature moved out of the attestation aggregate but stayed inside `BlockProof`, so a failure there is still the spec's INVALID_BLOCK_PROOF rejection, not INVALID_SIGNATURE. Reusing the attestation-signature variants classified it as the latter, which the `test_corrupt_proof_rejected` and `test_proof_reused_under_different_message_rejected` fixtures reject now that the runner asserts the reason (#547). Separate variants keep the gossip attestation path on INVALID_SIGNATURE.
…re-outside-block-proof
…re-outside-block-proof
…re-outside-block-proof
| Back | FazBrowse Home | New Git URL |
Closes #471
What
Moves the proposer signature outside the block proof. SignedBlock.proof becomes a two-field BlockProof:
The proposer signature reuses the existing XmssSignature type (SszVector<u8, SIGNATURE_SIZE>) already carried by SignedAttestation.signature — no new wrapper type. sign_block_root already returns an XmssSignature, so propose_block carries it verbatim; genesis anchors use the existing blank_xmss_signature() placeholder.
Why
Previously the proposer signature was wrapped as a singleton Type-1 and merged into a single block Type-2 alongside every attestation, so even a block with zero attestations required a prover call, and the merge could only run once the block root was known.
Decoupling the proposer:
Changes
Test status
Open questions
🤖 Draft — opened for review of the restructure.