Skip to content

RFP-005: Multisig and Coordination - #113

Open
fryorcraken wants to merge 14 commits into
masterfrom
rfp/multisig
Open

RFP-005: Multisig and Coordination#113
fryorcraken wants to merge 14 commits into
masterfrom
rfp/multisig

Conversation

@fryorcraken

@fryorcraken fryorcraken commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Adds RFP-005 — Multisig and Coordination and its ecosystem-behaviour appendix.

What's here

  • RFPs/RFP-005-multisig-and-coordination.md — the RFP (tier L). Commissions a
    fresh M-of-N multisig program for LEZ, private by default, with an
    end-to-end-encrypted per-multisig coordination room built on the Logos chat
    module. Deliverables also include an SDK, a QML mini-app, a CLI on the Logos
    core headless framework, a SPEL IDL, and a registry for proposal code and
    target programs.
  • appendix/multisig-coordination-ecosystem.md — facts-and-observations
    appendix surveying Bitcoin, Ethereum, and Solana multisig behaviour. Leads
    with a data inventory: the ten distinct data and metadata items a multisig
    involves, whether each could be private on LEZ, and what Safe, Squads,
    ERC-4337, Bitcoin script, FROST, and MuSig2 do with each. Supporting context
    for reviewers; the RFP is self-contained and does not reference it.
  • README.md — RFP-005 registered in the index.

Design posture

  • Private by default. The multisig runs over LEZ private accounts, with
    operator-selectable public posture, selective disclosure to a defined
    audience, and ongoing assurance for parties joining later. Auditability needs
    are framed per use case: a corporate treasury typically needs a narrow
    audience, a DAO a wider one.
  • Approvals flow through the coordination room, with the program verifying
    the collected approvals at execution rather than writing each approval
    on-chain.
  • Platform mandates are Supportability requirements (S.1–S.3): runs on LEZ
    using private accounts, coordination room on the Logos chat module, and
    compatibility with Logos testnet 0.3 and 0.4.

Notes

  • The RFP states what is required rather than how to achieve it. It
    deliberately avoids describing LEZ internals, so applicants verify current
    platform behaviour themselves rather than scoping against claims in this
    document that could be wrong or go stale.
  • logos-co/lez-multisig is referenced as prior art only. Its architecture is
    incompatible with private accounts, so it is a reference for the public path
    and does not drive design decisions here.
  • Frontmatter dependency is LP-0002 only. That prize is open and unclaimed,
    and its anonymous-approval design differs from this RFP's attributed
    approvals (R.1), so it is adjacent work rather than a foundation.
  • Threshold cryptography (FROST-style) is out of scope; it remains in the
    appendix as ecosystem context.

🤖 Generated with Claude Code

Comment thread appendix/multisig-coordination-ecosystem.md
Comment thread appendix/multisig-coordination-ecosystem.md Outdated
Comment thread appendix/multisig-coordination-ecosystem.md
Comment thread appendix/multisig-coordination-ecosystem.md
Comment thread appendix/multisig-coordination-ecosystem.md
fryorcraken added a commit that referenced this pull request Aug 3, 2026
- Fresh code and architecture: drop 'hardens the sample app' framing; the
  PoC stays as prior art in Resources only
- Add value-in-custody figures (Safe US$60B+, Squads US$15B+, 2026-08-03)
- Remove unassigned references (A-multisig, LD-private-dao,
  SA-public-multisig, RD-chat); keep LP-0002 only
- Execution requirement specifies the what: run any arbitrary program in
  the given LEZ
- RFP is self-contained: no references to the appendix
- Settle decisions: private-by-default with auditability/transparency
  options (public posture, view-key selective disclosure, zk
  proof-of-holding soft req); approvals flow through the E2EE room
- Revisit quorum-model decision per LEZ shared-private-account (GMS)
  properties: N-of-N key semantics, no revocation, program/PDA vs
  group-account vs threshold-crypto vault options
- Appendix: cite original sources instead of the research vault; add
  custody figures, LEZ shared-private-account properties and treasury
  auditability configurations
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
fryorcraken added a commit that referenced this pull request Aug 3, 2026
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md
Comment thread RFPs/RFP-005-multisig-and-coordination.md
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
Comment thread RFPs/RFP-005-multisig-and-coordination.md Outdated
fryorcraken added a commit that referenced this pull request Aug 5, 2026
Strip implementation detail from the requirements, keeping them to what
is needed rather than how to achieve it. F.3 restored to "any arbitrary
program", F.7 and F.8 to the bare requirement, and the mechanism prose
removed from F.2, F.4, F.6, R.2 and P.2.

Express auditability per use case: a corporate treasury needs a narrow
audience, a DAO a wider one, and members joining later need current
evidence rather than a setup-time claim. Added ongoing assurance as a
requirement and left the disclosure mechanism to the implementer.

U.2 is a QML mini-app without forcing a C++ backend.

Removed the marclawclaw research reference; it is a data dump rather
than a citable source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fryorcraken and others added 10 commits August 5, 2026 15:24
Add the Multisig and Coordination RFP and its ecosystem-behaviour appendix,
and register RFP-005 in the README index.

The appendix (facts and observations only, product angle) leads with a data
inventory: the ten distinct data/metadata items a multisig involves, whether
each could be private on LEZ, and what existing multisigs (Safe, Squads,
ERC-4337, Bitcoin script, FROST) do with it. It then covers the LEE
public/private account model, the quorum-privacy spectrum, coordination
channels and what each leaks, roles/policies, composition, and hardware
support. Sourced from the research-multisig-sovereign vault.

The RFP hardens the existing public multisig sample app (logos-co/lez-multisig)
into production, adds an end-to-end-encrypted per-multisig coordination room via
the Logos chat module, and ends with three A/B/C decisions for review: privacy
posture, coordination channel, and quorum-model baseline.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Fresh code and architecture: drop 'hardens the sample app' framing; the
  PoC stays as prior art in Resources only
- Add value-in-custody figures (Safe US$60B+, Squads US$15B+, 2026-08-03)
- Remove unassigned references (A-multisig, LD-private-dao,
  SA-public-multisig, RD-chat); keep LP-0002 only
- Execution requirement specifies the what: run any arbitrary program in
  the given LEZ
- RFP is self-contained: no references to the appendix
- Settle decisions: private-by-default with auditability/transparency
  options (public posture, view-key selective disclosure, zk
  proof-of-holding soft req); approvals flow through the E2EE room
- Revisit quorum-model decision per LEZ shared-private-account (GMS)
  properties: N-of-N key semantics, no revocation, program/PDA vs
  group-account vs threshold-crypto vault options
- Appendix: cite original sources instead of the research vault; add
  custody figures, LEZ shared-private-account properties and treasury
  auditability configurations
Verified every platform claim against the LEZ codebase and corrected the
document where it diverged from reality.

Vault architecture: the settled baseline claimed k-of-N enforcement lives
at the program layer over a GMS-derived shared account. It does not. A
regular GMS-derived account carries no program binding, so any single
holder can spend it without the multisig program being invoked; such a
multisig would be advisory, not enforcing. The baseline is now a private
PDA derived under the multisig program's ID, where the one-way
program_owner latch means only that program's verified execution can
decrease the balance. What was Option A is now the baseline; the GMS is
demoted to coordination and viewing.

Corrected against source:
- Private throughput is ~4 tx/block, not one; ~220 KiB receipts make
  block size the binding constraint, and proving costs minutes per
  transaction client-side.
- No clock is readable from the private path. F.2, F.7 and F.8 must be
  built on timestamp validity windows.
- Proof of holding needs a second purpose-built circuit that does not
  exist; demoted to a soft requirement.
- The account nonce is an nsk-keyed hash chain, so R.2 replay binding
  must live in program account data.
- Added the private-account padding ceiling, the pre-initialisation
  window, and the third PDA binding path needed for vault funding.
- F.3 constrained to statically declared call graphs.

Resolved the custody contradiction: neither model is unambiguously
better, so both now state what they cost. All-members custody forfeits
F.6 execute separability; operator custody forfeits the
no-trusted-coordinator property.

LP-0002 is an open, unclaimed prize to build a private M-of-N multisig,
not a delivered capability, and its anonymous-approval design differs
from R.1's attributed approvals. Corrected the dependency reason and
added it to Resources as design-space reading. Also flagged that the
lez-multisig prior art is incompatible with private accounts.

Retier to XL to match the sixteen deliverables across five disciplines,
and drop the unfilled funding placeholder.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Strip implementation detail from the requirements, keeping them to what
is needed rather than how to achieve it. F.3 restored to "any arbitrary
program", F.7 and F.8 to the bare requirement, and the mechanism prose
removed from F.2, F.4, F.6, R.2 and P.2.

Express auditability per use case: a corporate treasury needs a narrow
audience, a DAO a wider one, and members joining later need current
evidence rather than a setup-time claim. Added ongoing assurance as a
requirement and left the disclosure mechanism to the implementer.

U.2 is a QML mini-app without forcing a C++ backend.

Removed the marclawclaw research reference; it is a data dump rather
than a citable source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
U.6 claimed to be the primary mitigation for the signing-layer attack
surface, contradicting the Risks section, which correctly names the
Logos module model: the UI is installed and verified once rather than
fetched from a remote server on every use. U.6 is a complement to that,
not a replacement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The section had grown into a description of how LEZ works internally,
which does not belong in an RFP. Reduced from 256 lines to a short list
of the platform components a proposer must build on.

State the components rather than their mechanics: LEZ private accounts,
shared private accounts, the Logos chat module, and testnet
compatibility. Using the chat module for the coordination room is now
explicitly mandatory, and compatibility with Logos testnet 0.3 and 0.4
is stated here and in Supportability.

Highlight the shared private account feature as something proposers must
study and account for, noting only that it distributes custody rather
than dividing it, without describing the derivation.

Removed the corresponding internals from Decisions and Resources so the
document no longer refers to mechanisms it no longer explains.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The requirement to use LEZ, the Logos chat module, and to be compatible
with Logos testnet 0.3 and 0.4 belongs in FURPS as testable
supportability requirements, not in a prose section. Added as S.1 to S.3
and renumbered the rest.

Platform Dependencies now carries only what is not a requirement: that
no end-to-end multi-party authorisation flow exists on LEZ yet, and that
shared private accounts are a feature proposers should study.

Removed the Signing-layer trust risk. Its content is already covered by
U.6 and the Overview.

Also removed references orphaned by the deletion of Decisions for
Review: the custody-model qualifier in Why This Matters, the pointer in
Timeline Expectations, and the custody wording in F.6.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Also drop references to platform constraints the RFP no longer
describes from the phased-proposal note.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every other RFP gained this note on master. RFP-005 is new on this
branch so the rebase did not bring it in; copied verbatim from a
sibling RFP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@fryorcraken
fryorcraken marked this pull request as ready for review August 5, 2026 05:24
The appendix was never run through mdformat, so CI failed on every push
to this branch. Reformatting only: table column padding and link
reflowing to the 80-column wrap. No content changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@fryorcraken

Copy link
Copy Markdown
Collaborator Author

Related: logos-co/ecosystem#121

invoke, without relying on a single trusted source. Note that Usability
requirement U.6 (decode the action before signing) can only be as complete
as this registry's coverage; proposers must state what a client displays
when a target program is not registered.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Not on this - we need to consider how to reliably and verifiably update the registry - IDL (needed for decoding) has no provable tie to the program (i.e. I can upload fake IDL to the program which will decode as something safe, but on actual execution the program instruction decoding will do something completely different). I do not have solution, but wanted to point it out

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Will add mention. But I expect code to be provided, so that one can verify bytecode and IDL.

action reaching quorum and becoming executable, enforced by the program. A
time lock of zero means immediate execution.
08. Support an optional spending-limit policy: a member or sub-quorum may
execute transfers up to a configured limit without the full M-of-N approval.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Transfers of a native token or any token? Because if it is any token then it would have to be bound to the token program Id, but there could be other token program implementations (or updated version). And if it is "any token program" then the question is how to limit this only for tokens and disallow execution of other instructions on other programs:)

human deliberation and machine coordination: proposals are published to the
room, member approvals are collected through it, and the resulting approval
package is presented to the program at execution. See the Coordination
Architecture section.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

AFAIU we do not have any global "Logos Identity" and Logos chat identities/keys have not relation to LEZ accounts, so not sure if it is reasonably possible to automatically create a chat room for multi-sig members

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

so not sure if it is reasonably possible to automatically create a chat room for multi-sig members

"automatically" can be interpreted here and may mean some "invite/accept" action if needed. @jazzz wdyt?

@jazzz jazzz Sep 4, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

"Automatically" is the potentially scary word here - I'm assuming thats aligning closer with "Given a multisig, a chat room can be created mechanically".

@vpavlin is right to point out the Identity binding issue between λ-Accounts and LEZ-Accounts. It's currently not defined. Thats largely depends on the logos-co/anoncomms-pm#71 - which is in progress and will result in more information.

This is a good use-case for λ-Accounts to work around, as it brings in an indexing requirement (LEZ-Accounts -> λAccountLogs) and the FURPS need updating

room, member approvals are collected through it, and the resulting approval
package is presented to the program at execution. See the Coordination
Architecture section.
10. Run the multisig private by default: the program runs over LEZ private

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

do we have a devinition of what a private multisig means? WHen I explored this there is kind of a matrix of things:

  1. Private membership
  2. Private actions
  3. Private funds

And then combination of these


#### Usability

1. Provide an SDK that can be used to build Logos modules for interacting with

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What do we mean by SDK here? In theory SDK is an FFI generated by SPEL from the LEZ program...or something else?

on-chain and which are not), so a multisig operator understands exactly what
an observer can see, including what becomes visible to an audience under each
disclosure mechanism.
6. Before a member signs an approval, the mini-app must display the exact action

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I do not understand this - the UI will still display a decoded instruction - the key is UI will do that, so what are we trying to emphasize here?

- **Human deliberation**: the discussion among signers about whether to approve.
- **Machine coordination**: proposals are published to the room, and members'
approvals (signatures over the proposal) are collected through it. Once M
approvals are gathered, the approval package is submitted for execution; the

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think this is the first time where "off-chain approval collection" is explicitly mentioned - are we saying we only collect approvals off-chain? Should it (or generally any notion of this) defined and required somewhere earlier?

@jazzz jazzz 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.

Overall reads easy, and defines the problem well.

I appreciated that the terms were clearly defined. Most of my questions could be answered with a simple `Ctrl-F'

Some open questions about the interdependence between LEZ and λChat, and a few suggestions on how to improve room requirements so that viability could be properly evuated

Comment on lines +283 to +285
social graph is not readable from chain state. Where identity is concerned, the
property in question is unlinkability between a user's account and its role in a
multisig, not concealment of the user.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This seems like a hard requirement that spans both the LEZ and Chat domain.

[Sand] Consider adding some +Privacy requirements to the FURPS to make Unlinkability explicit and defined.

"Role separation" unlinkability does not compose. LEZ, and λChat could achieve unlinkability over roles independently but be vulnerable to an intersection attack.

Comment on lines +248 to +249
- **Machine coordination**: proposals are published to the room, and members'
approvals (signatures over the proposal) are collected through it. Once M

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[?] Is there a data binding requirement here?

It seems like the coordination channel is a party of the the MultiSig process, and may need to have functional requirements. Human deliberation requires Confidentiality+data Integrity which is defined by λChat::GroupV*. However I'm curious if Machine coordination relies on any trust assumptions or a 'data veracity' property.

Comment on lines +267 to +268
change, and what a removed member can still observe in the room until that
reconciliation completes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

... what a removed member can still observe ...

[Sand] This requirement could be expressed clearer. Currently I'm uncertain what specifically needs to be defined and how that set could be bounded.

As worded I understand this to be "You MUST list/document all information a removed program::member can see in room, until it is removed from the room"

λChat state synchronization between members itself is eventually consistent. A Removed chat::member can see all the messages sent by Chat::members who have not seen the state update.

This requirement reads to me as a Tautology of sorts: If everyone knew it the program::member was removed from the program, it would also be removed from the room and they would be synchronized. If a member doesn't know how the change has occured, and operate as normal.

fryorcraken and others added 3 commits September 8, 2026 19:24
Applies the comments left on the "RFP Program - Drafting measures and spec
reviews" doc:

- Replace "production-ready" with an explicit audit deliverable and state
  that deployment/operation beyond devnet/testnet is out of scope, so the
  RFP does not imply a production deployment obligation.
- Add Supportability #13, an audit programme requirement, matching the
  pattern already used in RFP-008 and RFP-012.
- Neutralise procurement-flavoured wording: "this RFP is the vehicle for
  delivering that" and the three uses of "commissions" become invitations
  for proposals.
- Drop "will be viewed more favourably", which reads as a selection
  commitment, in favour of a direct instruction to proposers.
- Clarify that the module UI's developer signature is verified at install
  time, rather than the vaguer "installed and verified once".
- Clarify that teams publish modules through their own catalog built from
  the template repo, not into a Logos-maintained catalog.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Match the established pattern used by the other RFPs that carry an audit
programme requirement: name the example tier-1 firms, enumerate the
components in scope, and tie the audit timeline and report publication to
any mainnet recommendation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The review doc carried Google Docs suggestions in addition to comments.
These are tracked changes rather than comment threads, so they were missed
in the first pass. All three, from Noelle Laguea:

- Fix the disclaimer's verb agreement after "does not": "provides any
  advice or assumes any responsibility" becomes "provide any advice or
  assume any responsibility". The same wording appears in the other RFPs
  and the template, left for a separate pass.
- Reword the admin-authority sentence in Why This Matters to name who
  shares control.
- Replace "A proposal that omits it entirely is not penalised" with
  "Proposals may omit this soft requirement", removing wording that reads
  as a selection commitment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants