Private M-of-N Multisig: Difference between revisions

From Local Area Network
New tool page, source-checked against the project README
 
Second check: fixes to facts, dates (UTC), glosses and attribution
Line 8: Line 8:
| build      = https://github.com/pramadanif/lp-0002-private-multisig#quickstart
| build      = https://github.com/pramadanif/lp-0002-private-multisig#quickstart
| verified_on = 4 November 2026
| verified_on = 4 November 2026
| verified_against = README and commit of 10 September 2026
| verified_against = README and commit of 9 September 2026
}}
}}
'''Private M-of-N Multisig''' is a multisig wallet in which shielded members approve without revealing who voted, and it runs on the Logos Execution Zone (LEZ) with a Basecamp app. The code is published by the GitHub account pramadanif. The README does not say whether it is an official Logos project.
'''Private M-of-N Multisig''' is a multisig wallet in which shielded (private) members approve without revealing who voted. It runs on the Logos Execution Zone (LEZ), the Logos layer that runs on-chain programs, with a Basecamp app. The code is published by the GitHub account pramadanif. The README does not say whether it is an official Logos project.


== What it does ==
== What it does ==
* It lets M of N shielded members approve a proposal without showing which members approved.
* It lets M of N shielded members (for example 2 of 3) approve a proposal without showing which members approved.
* On-chain state records a threshold and nullifiers, never member identities.
* The README says on-chain state records a threshold and nullifiers, never member identities. A nullifier is a one-time tag that marks an approval as used without saying who gave it.
* Approvals use privacy-preserving execution, never public re-execution.
* Approvals use privacy-preserving execution, in which the approval is proved privately and the chain checks the proof.
* It keeps one nullifier per member and proposal, so a member cannot approve twice.
* It keeps one nullifier per member and proposal, so a member cannot approve twice.
* Execution is public and permissionless, and the recipient and amount are fixed in the proposal.
* Execution is public and permissionless, and the recipient and amount are fixed in the proposal.
* A CLI named pmsig covers create, propose, approve, execute and status. Status prints the count and nullifiers, never who approved.
* A CLI named pmsig covers create, propose, approve, execute and status. Status prints the count and the nullifiers, never who approved.
* A Basecamp app reads the deployed multisig. The README says its Approve page does not submit approvals on purpose, so approvals go through the CLI or SDK.
* A Basecamp app reads the deployed multisig. The README says its Approve page does not submit approvals on purpose, so approvals go through the CLI or SDK.


Stage: Prototype. The README status table marks the public testnet lifecycle as "Done", with a full 2-of-3 run on the LEZ testnet. The version in metadata.json is 0.1.0.
Stage: Prototype. The README, last changed on 9 September 2026, marks the public testnet lifecycle as "Done" in its status table, with a full 2-of-3 run on the LEZ testnet. It says the multisig was "Redeployed 2026-09-08 after a testnet reset". The version in metadata.json is 0.1.0.


The README says it was "Built for λPrize LP-0002".
The README says it was "Built for λPrize LP-0002".
Line 34: Line 34:


== Build it ==
== Build it ==
* Build the guests with <code>./scripts/build-guests.sh --docker</code>. The README says this is required before deploying.
* <code>./scripts/build-guests.sh --docker</code> builds the guests. The README says this is required before deploying.
* Build the Basecamp package with <code>./scripts/build-basecamp.sh</code>.
* <code>./scripts/build-basecamp.sh</code> builds the Basecamp package.
* The README pins LEZ v0.2.4, Rust 1.94.0 and risc0 3.0.6.
* The README pins LEZ v0.2.4, Rust 1.94.0 and risc0 3.0.6.


Line 49: Line 49:


== Sources ==
== Sources ==
* [https://github.com/pramadanif/lp-0002-private-multisig lp-0002-private-multisig README], GitHub, last commit 10 September 2026
* [https://github.com/pramadanif/lp-0002-private-multisig lp-0002-private-multisig README], GitHub, last commit 9 September 2026 (UTC)
* [https://github.com/pramadanif/lp-0002-private-multisig/blob/main/app/metadata.json app/metadata.json], GitHub
* [https://github.com/pramadanif/lp-0002-private-multisig/blob/main/app/metadata.json app/metadata.json], GitHub
* [https://github.com/pramadanif/lp-0002-private-multisig/blob/main/docs/VERSIONS.md docs/VERSIONS.md], GitHub
* [https://github.com/pramadanif/lp-0002-private-multisig/releases releases], GitHub


{{Page status|Stub}}
{{Page status|Stub}}

Revision as of 21:01, 4 November 2026

Private M-of-N Multisig
What it does: A private M-of-N multisig for the Logos Execution Zone where shielded members approve without revealing who voted
Stage: Prototype
Licence: MIT OR Apache-2.0
Verified on 4 November 2026 against README and commit of 9 September 2026.

Private M-of-N Multisig is a multisig wallet in which shielded (private) members approve without revealing who voted. It runs on the Logos Execution Zone (LEZ), the Logos layer that runs on-chain programs, with a Basecamp app. The code is published by the GitHub account pramadanif. The README does not say whether it is an official Logos project.

What it does

  • It lets M of N shielded members (for example 2 of 3) approve a proposal without showing which members approved.
  • The README says on-chain state records a threshold and nullifiers, never member identities. A nullifier is a one-time tag that marks an approval as used without saying who gave it.
  • Approvals use privacy-preserving execution, in which the approval is proved privately and the chain checks the proof.
  • It keeps one nullifier per member and proposal, so a member cannot approve twice.
  • Execution is public and permissionless, and the recipient and amount are fixed in the proposal.
  • A CLI named pmsig covers create, propose, approve, execute and status. Status prints the count and the nullifiers, never who approved.
  • A Basecamp app reads the deployed multisig. The README says its Approve page does not submit approvals on purpose, so approvals go through the CLI or SDK.

Stage: Prototype. The README, last changed on 9 September 2026, marks the public testnet lifecycle as "Done" in its status table, with a full 2-of-3 run on the LEZ testnet. It says the multisig was "Redeployed 2026-09-08 after a testnet reset". The version in metadata.json is 0.1.0.

The README says it was "Built for λPrize LP-0002".

Use it

  1. Install the toolchain: Rust 1.94 or later and risc0 r0vm, as listed in docs/VERSIONS.md. On Linux, also install pkg-config and libpcsclite-dev.
  2. Build the guests with ./scripts/build-guests.sh --docker.
  3. Run the local demo with ./demo.sh. The README says it takes about 40 to 50 minutes or more and needs about 9 GB of free RAM for each approval.
  4. For the public testnet, run the fund, deploy and verify scripts listed in the README.
  5. Use the CLI with cargo run -p pmsig-cli --bin pmsig -- --help.
  6. For Basecamp, run ./scripts/build-basecamp.sh, then use Install Local Package with app/private_multisig.lgx. The package is for darwin-arm64 only. The README says to start Basecamp with QT_ENABLE_REGEXP_JIT=0.

Build it

  • ./scripts/build-guests.sh --docker builds the guests. The README says this is required before deploying.
  • ./scripts/build-basecamp.sh builds the Basecamp package.
  • The README pins LEZ v0.2.4, Rust 1.94.0 and risc0 3.0.6.

Releases

  • The repository has no tags and GitHub lists no releases.
  • Version in app/metadata.json: 0.1.0 (module name private_multisig).

See also

Sources

Page status: Stub. Stub · Outline · Usable · Guide · Star. Anyone can improve this page and change its status.