Bittensor · Multisig Guide
A plain-English guide to shared-key accounts on Bittensor — why they exist, how they work, and how you create a transaction on one.
A normal wallet has one key. Whoever holds that key controls everything — and if it leaks, everything is gone, irreversibly. A multisig ("multi-signature") fixes that by requiring several keys to agree before anything moves. This guide walks through the whole idea in three short steps.
A single key is a single point of failure — in both directions:
A compromised laptop, a phished seed phrase, one bad dependency — and an attacker drains the account. There's no undo, no support line, no chargeback.
Lose the one key — dead drive, forgotten phrase — and the funds are frozen forever. Same finality, opposite cause.
A multisig removes that single point of failure. Funds live at an address controlled by a group of keys, and a transaction only goes through once enough of them approve. Concretely, that buys you:
A multisig is described by two numbers, written M-of-N:
N = the total number of member keys (the whole group).
M = the threshold — how many of them must approve before anything happens.
A 2-of-3 multisig has three member keys and needs any two of them to sign. A 3-of-5 has five members and needs any three.
Two things are worth knowing about how this works under the hood — both matter in practice:
There's no "create a multisig" button and no key that unlocks it. The address is pure math over the member set plus the threshold: feed in the same keys and the same M, and you always get the same address, on any machine. Nobody holds "the multisig key" because no such key exists — only the members' own individual keys, working together.
Raising the threshold M makes you harder to attack but easier to lock yourself out of. The gap between N and M is your safety net — how many keys you can lose and still transact.
| Setup | Thief needs | Keys you can lose | Good for |
|---|---|---|---|
| 2-of-3 | 2 | 1 | The classic. One rogue or one lost key, no problem. |
| 2-of-4 | 2 | 2 | Keys spread across places/people; survives two losses. |
| 3-of-5 | 3 | 2 | Strongest balanced choice for a bigger team treasury. |
When someone kicks off a multisig transaction, they choose how much of it is visible on the public blockchain while it waits for the other signatures. This is the one real choice you make each time, and it's just a trade-off between transparency and privacy.
The full transaction goes on-chain immediately.
Technically: asMulti. The moment it's opened, everyone can read exactly what's being proposed straight from the chain. Co-signers just look it up and approve — nothing needs to be sent around.
Only a fingerprint of the transaction goes on-chain.
Technically: approveAsMulti with a hash — a one-way fingerprint of the call. The public chain sees "a transaction with this fingerprint is pending" but not what it does, until it actually executes.
A hash is a short, unique fingerprint of the transaction. You can compute the fingerprint from the transaction, but you can't work backwards from the fingerprint to the transaction — it's one-way. So in the private flow, the chain only ever sees the fingerprint. The actual transaction has to be handed to the other signers separately (a copy-paste, a link, a shared file).
Private hides the details of the transaction while it waits — but only if those details aren't guessable. Here's the catch: since anyone can compute a fingerprint from a transaction, an observer who can guess what you're doing can hash their guess and check whether it matches the pending one. So if you always do the exact same thing — say, 50 TAO to the same wallet every Thursday at noon — the "private" version isn't really hidden; a watcher just tries the obvious call and sees it matches. The chain's fingerprint is doing its job; the leak is that your transaction itself is predictable.
remark with some random text) — that changes the fingerprint every time, so no one can guess it; and/or (2) use the MEV shield when the transaction finally executes, so it can't be front-run at the moment it goes through. The random note protects the waiting period; the shield protects the execution — two different moments, two different tools.
| Public asMulti | Private approveAsMulti | |
|---|---|---|
| On the chain while pending | The whole transaction | Only its fingerprint (hash) |
| Co-signers get the details from… | the chain (automatic) | you, sent separately |
| Visible to the public before it runs? | Yes | No |
| Extra step for signers | none | paste in the transaction to verify the fingerprint |
| Best when | simplest & most transparent — the default | you don't want the pending action public early |
Either way, it becomes public in the end. Once the final signer executes, the transaction runs on-chain and is visible to everyone. "Private" only means it's hidden while it's waiting for signatures, not forever. And on both paths, the fingerprint-check is the safety gate — the private path just makes it explicit.
Worked examples from the chain — real multisig operations, decoded, showing exactly what public and private look like on-chain.
Wallet securitySecuring a wallet: Ledgers, multisig & proxies — how multisig fits alongside hardware wallets and proxy accounts to protect a treasury.
RaoFoundation/subtensor docs & pallet-multisig. Draft — Taostats internal.