Coinjoin Signer
Unattended coinjoin signing
Passport Prime as an unattended WabiSabi coinjoin signer for Wasabi Wallet. You approve one session policy on the device, then every round signs itself against that policy without another tap.
Submitted by Kevin Ravensberg · GitHub
Third-party submission. Not audited or verified by Foundation.

Waiting for Wasabi Wallet
Overview
A coinjoin signer for Passport Prime, aimed at the problem that makes hardware wallets awkward for coinjoin: a round needs a signature, and rounds keep arriving. Instead of a prompt per round, the device asks for one approval that covers the whole session, showing the coordinator, the account, a per-round fee cap, a round budget, and a 12-hour expiry. Slide to authorize once and the device signs the rounds that match, unattended, until the budget or the clock runs out. Revoking closes the session and clears the key from memory.
The signing engine is real. The app links wallet-rpc-core, the policy, session, and SLIP-0019 implementation from the developer’s KeyOS branch, so each round produces a genuine SLIP-0019 ownership proof for the next address index, bound to the coordinator and checked against the authorized policy. What is simulated is the plumbing on either side: the seed is the published SLIP-0019 test vector rather than a real wallet, and rounds are advanced with an on-screen button because the QuantumLink transport needs two new coinjoin messages that are proposed but not yet in KeyOS.
What it does
- One approval per session rather than one per round: coordinator, account, fee cap, round budget, and expiry, all shown before you slide to authorize.
- Each round produces a real SLIP-0019 ownership proof for the next address index, bound to the coordinator.
- Policy is re-checked per round, so a round that exceeds the fee cap or falls outside the authorization does not get signed.
- Outputs are constrained to your own wallet, and the session key is cleared from memory when it ends.
- Sessions expire on a 12-hour clock and can be revoked from the device at any time.
- Built on the developer’s proposed QuantumLink extension for ownership proofs and batched round signing, designed to be reusable by other coinjoin implementations.
- MIT licensed to match Wasabi Wallet, with the underlying engine dual-licensed so it can be contributed upstream to KeyOS.
Technical breakdown
How the proof-of-concept is built, for developers evaluating the platform.
One authorization, many rounds
A coinjoin needs a signature per round, which is exactly the interaction a hardware wallet is worst at. The device instead presents the session as a single policy: which coordinator, which account, the maximum fee per round, how many rounds, and how long the authorization lasts. Rounds that fit are signed without further interaction; the session ends on revoke, on the round budget, or on the 12-hour expiry.
Real proofs against a real policy
The app links wallet-rpc-core, the same policy, session, and SLIP-0019 engine from the developer’s KeyOS branch, covered by its own unit tests. Every round derives an ownership proof for the next index and binds it to the coordinator, then checks the round against the authorized policy before signing, so the approval you gave is enforced on-device rather than trusted to the desktop.
Waiting on a transport
The missing piece is the wire. The developer has proposed extending QuantumLink with two coinjoin messages, ownership proofs and batched signing of owned inputs, which are general enough to serve other coinjoin implementations and batched payment flows. Until those land, the app stands in for the transport with an on-screen button and runs on the published SLIP-0019 test vector rather than a user seed.
Dig into the source
README, architecture notes, and the wire protocol live in the repo.
