Pearl Quorum

the council chamber — m-of-n shared custody in PRL · no single key moves alone

Convene the council

Name the vault, seat 1–5 cosigners by their public keys (x-only 64-hex, or compressed 66-hex — normalized in-browser), and set the threshold m. The desk forges one CHECKSIGADD tapscript leaf (0 <K1> CHECKSIGADD … <Kn> CHECKSIGADD <m> EQUAL) sealed under a NUMS internal key — nobody knows its discrete log, so there is no keypath backdoor: coins move only through the quorum script. No secrets are collected here; keys stay with their owners.

Cosigner public keys slot order = script order. Distinct keys only.

Fill the treasury

Send PRL to the vault address. The desk reads the balance and UTXOs live from Blockbook (GET-only), or you can paste a UTXO list air-gapped. Use the recompute check to prove the address matches the descriptor before anyone funds it.

Air-gapped UTXO list

Draft the motion

Choose the vault's UTXOs to spend, name the recipients, and set a fee rate. The desk builds an unsigned bundle (pearl-quorum-unsigned:v1:) carrying a 64-bit fingerprint and the per-input BIP-341 script-path sighash (SIGHASH_DEFAULT). Change returns to the vault; dust change is absorbed into the fee and disclosed. Nothing is signed here.

Recipients

Gather the seals

Each cosigner signs the same per-input sighash with their own key — no MuSig ceremony, no key aggregation (this is script-path multisig, so the witness is larger; see Honest limits). Sign locally below, or import signature bundles from cosigners on other machines. Every imported signature is re-verified before it counts.

0/m

Sign locally

Collect cosigner signatures

Carry the motion

Broadcast waits behind a double-confirm gate. The desk posts the signed hex to Blockbook /api/sendtx and then tracks confirmations.

The council records

Vaults and carried motions are recorded locally in this browser. Nothing leaves the machine. Export as CSV for your own books.

Vaults

Spends

Honest limits