bitcoind.app
CommandsGuidesContact ↗
Home/Guides/Setting Up Multisig Wallets with Bitcoin Core
Wallet

Setting Up Multisig Wallets with Bitcoin Core

How to create and manage multisignature wallets using Bitcoin Core RPC. Covers key generation, address creation, spending from multisig, and operational best practices.

In this guide
What is Multisig?Creating a Multisig AddressSpending from MultisigOperational Best Practices

What is Multisig?

A multisignature (multisig) address requires M of N keys to authorize a transaction. For example, a 2-of-3 multisig requires any 2 of 3 designated keys to sign.

Multisig serves two primary purposes: security (no single compromised key can move funds) and shared control (multiple parties must agree to spend). Common configurations include 2-of-3 (single user with redundant backup), 2-of-2 (two-party escrow or joint account), and 3-of-5 (organizational treasury).

Bitcoin natively supports multisig through P2SH (Pay-to-Script-Hash) and P2WSH (Pay-to-Witness-Script-Hash) script types.

Creating a Multisig Address

There are two ways to create multisig addresses in Bitcoin Core:

createmultisig is the standalone utility — it takes the required signature count and an array of public keys, returning the address and redeem script. This works without any wallet.

addmultisigaddress does the same but also imports the address into your wallet, enabling automatic tracking of received funds and participation in signing.

For descriptor wallets, you can import multisig configurations using importdescriptors with multi() or sortedmulti() descriptor expressions. sortedmulti() is preferred because the key ordering is deterministic regardless of the order you provide them.

Spending from Multisig

Spending from a multisig address requires collecting enough signatures from the designated key holders. The PSBT workflow is the standard approach:

1. Create the PSBT with walletcreatefundedpsbt, specifying the multisig UTXO as input.

2. Distribute the PSBT to each signer. Each signer processes it with walletprocesspsbt on their own node, adding their signature.

3. Collect the partially signed PSBTs from each signer and merge them with combinepsbt.

4. Once enough signatures are collected (M of N), finalize with finalizepsbt and broadcast the resulting transaction.

This workflow supports geographically distributed signers, hardware wallets, and air-gapped signing machines.

Operational Best Practices

Key generation — generate each key on a separate device. Never create all keys on the same machine, as this defeats the security purpose of multisig.

Backup the redeem script — without the redeem script, you cannot spend from the multisig address even if you have all the private keys. Store it alongside (but separately from) your key backups.

Test before funding — always send a small test amount to your multisig address and practice the full spending workflow before depositing significant funds.

Key rotation — plan for key compromise. Use N > M+1 (for example, 3-of-5 instead of 3-of-4) so you can rotate a compromised key without moving funds under emergency conditions.

Document everything — record which key belongs to which device/person, the derivation paths used, and the exact descriptor expression. Multisig recovery without documentation is extremely difficult.

Related RPC Commands

createmultisigCreates a multi-signature address with n signature of m keys required.addmultisigaddressAdd an nrequired-to-sign multisignature address to the wallet. Each key is a bitcoin address or hex-encoded public key.createpsbtCreates a transaction in the Partially Signed Transaction format.walletcreatefundedpsbtCreates and funds a transaction in PSBT format. Inputs will be added if supplied inputs are not enough.combinepsbtCombine multiple partially signed Bitcoin transactions into one transaction.finalizepsbtFinalize the inputs of a PSBT. Signs and finalizes where possible.decodescriptDecode a hex-encoded script.importdescriptorsImport descriptors. This requires a new wallet backup. Only for descriptor wallets.
← Previous Guide
Working with Raw Bitcoin Transactions
Next Guide →
Parsing and Analyzing Bitcoin Blocks

bitcoind.app — Bitcoin Core RPC Reference

Contact ↗