A Monero Multisig User’s Guide
A complete guide to using M/N multisig wallets in Monero doesn’t yet exist since it’s very new. This guide aims to gather into one place all the information needed to use M/N multisig.
Multisig wallets are very important for people and organizations that need to store cryptocurrencies securely. They provide security against theft of private keys and redundancy in case of loss. Multisig wallets are an industry standard security practice used by most exchanges, web wallets, crypto funds, foundations, and other custodians of significant amounts of cryptocurrency.
This post is about Monero, but most people probably had their first encounter with multisig addresses from Bitcoin. Under the hood, Monero works very differently from Bitcoin, so the Monero developers had to come up with a new system to implement multisig. It can’t depend on the Bitcoin scripting language, and it has to play nice with the crypto systems that Monero uses to safeguard user privacy.
There have been two stages to Monero’s multisig launch. First, Monero introduced N/N and N-1/N multisig at the end of 2017, enabling multisig schemas like 2-of-2 and 2-of-3 wallets. Second, Monero introduced M/N wallets for arbitrary M less than N in late 2018. This includes wallet schemas like 3-of-5.
Let’s get started with initial setup of a Monero multisig wallet.
Monero Multisig Wallet Setup
Disclaimer: There was a bug in the M/N multisig implementation that sometimes prevents spending from M/N wallets. It was fixed after the latest release version of Monero (v0.13.0.4), so be sure to test your wallet workflow before storing significant funds with it. The process in this guide works reliably on the Monero master development branch.
Setting up a multisig wallet by hand in Monero is a tedious process because the participating wallets need to share several rounds of data with each other to create the multisig keys that will be used to see and sign transactions. Each of the three wallet types has its own setup process: N/N, N-1/N, and M/N. Out of those three, M/N is the most complex — setting up a 3-of-5 wallet takes 25 wallet operations. I found it easiest to automate the process to avoid mistakes and save time.
For any multisig setup, the Monero command line programs include a utility for generating wallets called
monero-gen-trusted-multisig. If you want to generate all the participating multisig wallets on a single trusted machine, it gets the job done. It can be invoked as follows, setting scheme to be whatever you’d like to use:
$ monero-gen-trusted-multisig --scheme=3/5 --filename-base=wallet
If that doesn’t cover your use case, you’ll need to do a more involved setup. In this document, we’ll give a brief overview of the process for each type, but we’ll only go into detail for M/N wallets (N/N and N-1/N wallets already have a good guide).
The following are the commands that need to be run to generate a multisig wallet for each type. These commands can be run either at the command line through the
monero-wallet-cli program or using the JSON-RPC server
monero-wallet-rpc. Each command is run once for every participating wallet. Refer to the Monero Wallet RPC guide for which parameters need to be passed for each command.
Be sure to create new wallets or use empty wallets as participants in the multisig wallet. If you convert a single signature wallet with funds into a multisig wallet, the funds will be lost.