Skip to content

fix(runtime-verification): align proof-only multisig bounds and layout - #169

Merged
automergerpr-permission-manager[bot] merged 10 commits into
proofsfrom
codex/upstream/bootstrap-runtime-verification-max-signers-3
Mar 10, 2026
Merged

fix(runtime-verification): align proof-only multisig bounds and layout#169
automergerpr-permission-manager[bot] merged 10 commits into
proofsfrom
codex/upstream/bootstrap-runtime-verification-max-signers-3

Conversation

@Stevengre

@Stevengre Stevengre commented Mar 6, 2026

Copy link
Copy Markdown

Summary

This aligns the proof-only multisig contract under runtime-verification: use MAX_SIGNERS = 3 in the interface/layout, derive Multisig::LEN from MAX_SIGNERS, propagate the feature from program into spl-token-interface, and update the shared initialize-multisig harness to use the same proof-only signer bound.

Context

The proof-only multisig work moved to a 3-signer profile to keep state growth bounded, but the contract was still split across layers. The interface crate encoded the normal 11-signer layout, while the shared initialize harness still admitted 1..=11. That left the runtime-verification implementation and its spec exploring different domains.

Red vs Green

Red:

  • runtime-verification builds still used the normal 11-signer interface layout (MAX_SIGNERS = 11, Multisig::LEN = 355).
  • The shared initialize harness still accepted 1..=11, so impossible branches survived inside test_process_initialize_multisig / test_process_initialize_multisig2.

Green:

  • runtime-verification builds now use MAX_SIGNERS = 3.
  • Multisig::LEN is derived from MAX_SIGNERS, so pack/unpack and account-size checks stay consistent.
  • The shared initialize harness now enforces the same proof-only signer bound (3), so the harness domain matches the proof-only implementation domain in both inclusion contexts.
  • Non-proof builds keep the normal 11-signer behavior.

References

  • Rust Reference: conditional compilation
  • Repository reference for the proof-only multisig contract:
    • interface/src/instruction.rs
    • interface/src/state.rs
    • program/src/instruction.rs
    • program/src/entrypoint-runtime-verification.rs
    • p-token/src/entrypoint-runtime-verification.rs

@Stevengre Stevengre changed the title fix(runtime-verification): gate proof-only multisig max signers to 3 fix(runtime-verification): align proof-only multisig bounds and layout Mar 6, 2026
automergerpr-permission-manager Bot pushed a commit to runtimeverification/mir-semantics that referenced this pull request Mar 10, 2026
This PR makes the necessary changes in symbolic/p-token.md to have 3
`MAX_SIGNERS` instead of 11. It looks that this is something we are
working towards (e.g.,
runtimeverification/solana-token#169,
https://runtimeverification.slack.com/archives/C03QD0KTDMJ/p1772645076956859).
@dkcumming
dkcumming marked this pull request as ready for review March 10, 2026 18:01
@dkcumming
dkcumming requested a review from mariaKt March 10, 2026 18:04

@mariaKt mariaKt left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, just a minor comment. Approved.

Comment thread interface/src/instruction.rs Outdated
Comment thread p-interface/src/state/multisig.rs Outdated
@automergerpr-permission-manager
automergerpr-permission-manager Bot merged commit e1c1e64 into proofs Mar 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants