Knot
Knot lets a group of people authorize actions on Dusk together: M of N members must sign before something happens on-chain.
It ships as:
- on-chain registry (who is in the group, and how many must sign)
- on-chain proposals (propose an action, collect signatures, then run it)
- shared encoding (everyone signs the same bytes)
- a local Lab (CLI + browser UI on your machine to create identities and sign)
- an optional collector (a shared mailbox for proposal files and partial signatures - it never holds keys)
Status: testnet · mock
Authorization is Prove mode - the chain checks membership, threshold, and signatures itself on every write. The Lab helps you sign; it is not the final authority.
Source: GitHub - Nocturne-Standards/knot. Live contract IDs: Deployments (nocturne-deployments).
Prediction-market council resolve uses the registry, but its message format and tooling live in wen (pm-council-tool), not in Knot.
Try it
Hosted mock, or run Knot locally.
Who calls whom
Each member keeps keys on their own machine. The Lab talks to the registry and proposals contracts. If you use a collector, it only passes proposal data and partial signatures between people - never secret keys.
| Piece | What it does |
|---|---|
| Registry | Stores each group (members + threshold) and checks quorums |
| Proposals | Propose an action, collect approvals, then run it on-chain |
| Encoding | Builds the exact bytes everyone signs |
| Lab / CLI | Local tool for identities, accounts, proposals, optional collector |
| Collector | Optional shared mailbox for proposals (AGPL-3.0-only) |
Most of Knot is Apache-2.0. The collector is AGPL on purpose - self-host it only if you accept that license (or buy a commercial one; see crates/knot-collector/LICENSING.md in the repo). Signing always stays in the Lab on your machine.
Another layer: Atlas
Knot is complete on its own. Atlas is a separate product: a named service directory, roles, and a consistent admin gate. It can sit on the same councils - another layer, not a second copy of Knot.
Atlas can delay its own admin actions too. Two delays on one intent means two waits. If Knot already delays, leave Atlas timelock_blocks at 0 so people wait once. Knot does not depend on Atlas.
Domain strings
These labels are baked into the bytes people sign (v3):
| What | Domain string |
|---|---|
| A proposal | nocturne.knot.multisig.proposal.v3 |
| Changing a group's members | nocturne.knot.multisig-registry.change_account.v3 |
Current digests use v3. Older v2 labels still exist in the encoding crate for history.
Council resolve for prediction markets uses nocturne.wen.prediction-market.council-resolve.v3 - that belongs to wen, not Knot.
Next
- Concepts - how quorum, proposals, delay, and signing fit together
- Architecture - pieces of the suite and how they connect
- Contracts - what the on-chain contracts do
- Collector - optional shared mailbox and its limits
- Security - who to trust, and integrator checklist
- Run locally - cold start; deep Lab detail on GitHub
- Deployments - live testnet contract IDs
- Atlas - named services and roles as a layer on a council