Solution: LP-0002 Private M-of-N Multisig - #125
Open
edenbd1 wants to merge 2 commits into
Open
Conversation
✅ Validation passedA reviewer will assess against the prize criteria. Automated check. See solution template and TERMS. |
The video is recorded and linked, so the two places that still said it was outstanding are gone. The security write-up is presented by what the design defends against rather than by the order in which it was built; every property and every test it refers to is unchanged.
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.
A threshold multisig for LEZ where an approval is unlinkable to the member who
gave it — including to the other members — and the chain records only that the
threshold was met.
solutions/LP-0002.mdWhat is verified on chain
Each
approvedeclares aChainedCallto a LEZ-native membership program, sothe privacy circuit composes it with a real
env::verifyand the sequencerchecks the receipt against the node-pinned
PRIVACY_PRESERVING_CIRCUIT_ID. Themember set and the threshold are folded into the PDA address, so neither can be
invented nor lowered — a forged configuration resolves to an address nobody ever
created.
Transactions — a 2-of-3 lifecycle on the current public testnet
membership_lezfb8eb10f7f394286c109cb6502a1c95294180523f30d06f707fc087a589bea98multisig_verifier517efe12a0b592abe4d21a03246866b95c4379483e87af62fd9f26f7b8fe45ffcreate_multisig2930c1db4521b7c0b912278f4025e430704cfb9a7ebfcb5d22c374fd7ce85b70create_proposal68d5127e1e5570936f8d78e9a2da4d485562566cd8b7487a59322bf059406978approve(member A, privacy tx)41f5bb99346a0bef6aa0c69243473a554b84f0f0ad65e460bbb6890b11644942approve(member B, privacy tx)ae006465f5f945b8ba2666f28a5357d0a2aab4af05508c9c2811e0101d0ac649executeb43e46505f571e31d6051f7da43563db605b6a74b90c670da2d3582d53412ecdCheck any of them:
The two deployment hashes are
SHA256(borsh(bytecode))of the binaries committedunder
artifacts/programs/, so they can be recomputed from the repositorywithout trusting this table.
The accounts, which are the stronger evidence
4wqJXoEhqqqYknt1s7gHcgBL6pkfwNJDfhbVVeAqwtnXE11Awng7j59dVft83VVrwftXp41roJPKY5QRMb45ZcoeDaG2Qan1ie5YhEpcti2LMCsvbkYi7WjWxnNKvxiqxi7BFMj5yL8cpcrQzN7xhENHC2vysTrNwbtokPbTYjr98rPtCpiuicNDii6uCeMXtjd1W6hek6Vq35HJ7k3mz1Q82Fui./scripts/verify-onchain.shreads all five and confirms the verifier programowns them. Each approval marker exists only because a membership proof was
verified on chain, and nothing in the pair names a member — read them and you
learn the threshold was met, and nothing about who met it.
On the explorer: none of the seven render at the moment. Its indexer is
behind the chain — its own front page listed block 4351 while
getLastBlockIdreturned 4496 — so anything submitted recently is affected, by anyone.
./scripts/check-explorer.pyre-measures that in a headless browser, with animpossible hash as the control, and prints what it finds rather than asserting.
Note on versions
The testnet was reset onto a newer chain in August, so everything here was
rebuilt against LEZ v0.2.4 and redeployed. That is also why the repository
vendors SPEL: no published SPEL release builds against a current LEZ, and
vendor/spel/PATCH.mddocuments every change, how to reproduce the directory,and when it should be deleted.
Against the criteria
61 tests, CI green on Linux and macOS, including a workflow that runs the whole
lifecycle against a real standalone LEZ sequencer with
RISC0_DEV_MODE=0. CUcosts are measured rather than estimated, per instruction and per machine. The
Basecamp module ships as a
.lgxwith darwin-arm64 and linux-amd64 variants andwas verified loading in Basecamp 0.2.2, not merely built.
Happy to address anything in review.