Create a Monero Multisignature (multisig) Wallet

By lab | January 4, 2018

Overview

In a previous post, we discussed WHAT a multisig wallet is. Now it’s time to create one.

Multisig in Monero

At the time of writing, multisig support is available in the development branch of the Monero source on Github but is not yet available in a released version. You will need to build the binaries yourself from source before proceeding.

Example:

Alice and Bob want to build a multisig wallet together. They will use the following steps.

Building a 2-of-2 Multisig Wallet

Both Alice and Bob will: 1. Create a new, empty wallet 1. Generate multsig information 1. Exchange multisig information 1. Generate a multisig wallet using each other’s multsig information.

It looks kind of like this:

Example multisig wallet generation

Alice Steps

Build Monero

Build the developmental version of Monero using the steps outlined on the Github repo.

Create a new wallet

In order to create a multisig wallet, the wallet MUST be empty, so we will just create a new one.

Start the Monero wallet CLI.

./monero-wallet-cli 

Start Monero wallet CLI

Create a new, empty wallet named alice-multisig-wallet.

Wallet file name (or Ctrl-C to quit): alice-multisig-wallet

Alice creates a new wallet

Generate multisig information

Each person will have to create the multisig information from within their own wallet.

[wallet 46RSHF (no daemon)]: prepare_multisig

Alice prepares her multisig information

The output will contain the multisig information. For our example, the multisig information is:

MultisigV18CNmQmowjZgBwEBS6NXvBHWUxUqAL66VmEVNeTTYLaKpbHpTzaaDCmegqwSWpdq1kb1LGriQ1LzMjAdSFta4o943VgDN6Vu7eTsaaUjDX4guWEcoSqGzaUpG2cCZEU6hLkcqdnzX1zfj3JgYk1Uf4N5DJPY4f9KCaiz9C34JFTvfXP6Z

Share the multisig information

Copy down the multisig information from the wallet generation process:

Securely share this information with Bob and Only Bob (e.g. save to text file, encrypt using PGP)

Bob Steps

Now it’s Bob’s turn to create a wallet. (Technically this can be done prior to, concurrently, or after Alices’s wallet. It doesn’t matter.)

Build Monero

Build the developmental version of Monero using the steps outlined on the Github repo.

Create a new wallet

In order to create a multisig wallet, the wallet MUST be empty, so he will just create a new one.

Start the Monero wallet CLI.

./monero-wallet-cli 

Start Monero wallet CLI

Create a new, empty wallet.

Wallet file name (or Ctrl-C to quit): bob-multisig-wallet

Bob creates a new wallet

Generate multisig information

[wallet 49sxf5 (no daemon)]: prepare_multisig

Bob prepares multisig information

The output will contain the multisig information. For our example, the multisig information is:

MultisigV1h6SMV2fXdLaJtdSVCfnNobK33V2FbncqDK1UzzvNwnYCgCVaSZoG1REUVGUrYtaDEAhNZuryg7BDFcbTUSbnRLFm13E1kcYasNi9DMGUCCi9nvDdtnCzLwefCGXZLNDrv4Ta9SdZhweqzo46yYPKBs1Snrj81QcKAUscVBVBc1RxSLRG

Share the multisig information

Copy down the multisig information from the wallet generation process:

MultisigV1h6SMV2fXdLaJtdSVCfnNobK33V2FbncqDK1UzzvNwnYCgCVaSZoG1REUVGUrYtaDEAhNZuryg7BDFcbTUSbnRLFm13E1kcYasNi9DMGUCCi9nvDdtnCzLwefCGXZLNDrv4Ta9SdZhweqzo46yYPKBs1Snrj81QcKAUscVBVBc1RxSLRG

Securely share this information with Alice and Only Alice (e.g. save to text file, encrypt using PGP)

Import Alice’s Multisig Information

Bob has to import the information Alice shared with him. Remember, Alice sent him her multisig information:

MultisigV18CNmQmowjZgBwEBS6NXvBHWUxUqAL66VmEVNeTTYLaKpbHpTzaaDCmegqwSWpdq1kb1LGriQ1LzMjAdSFta4o943VgDN6Vu7eTsaaUjDX4guWEcoSqGzaUpG2cCZEU6hLkcqdnzX1zfj3JgYk1Uf4N5DJPY4f9KCaiz9C34JFTvfXP6Z

so Bob creates a 2-of-2 multisig wallet.

[wallet 49sxf5 (no daemon)]: make_multisig 2 MultisigV18CNmQmowjZgBwEBS6NXvBHWUxUqAL66VmEVNeTTYLaKpbHpTzaaDCmegqwSWpdq1kb1LGriQ1LzMjAdSFta4o943VgDN6Vu7eTsaaUjDX4guWEcoSqGzaUpG2cCZEU6hLkcqdnzX1zfj3JgYk1Uf4N5DJPY4f9KCaiz9C34JFTvfXP6Z

Alice makes his wallet a multisig wallet

Alice Again

Now that Bob created all of his information and shared it with Alice, she also needs to import Bob’s information.

Import Bob’s Multisig Information

Alice has to import the information Bob generates when he created his wallet. Remember that his multisig information was:

MultisigV1h6SMV2fXdLaJtdSVCfnNobK33V2FbncqDK1UzzvNwnYCgCVaSZoG1REUVGUrYtaDEAhNZuryg7BDFcbTUSbnRLFm13E1kcYasNi9DMGUCCi9nvDdtnCzLwefCGXZLNDrv4Ta9SdZhweqzo46yYPKBs1Snrj81QcKAUscVBVBc1RxSLRG

With Bob’s multisig information, Alice creates a 2-of-2 multisig wallet.

[wallet 49sxf5 (no daemon)]: make_multisig 2 MultisigV1h6SMV2fXdLaJtdSVCfnNobK33V2FbncqDK1UzzvNwnYCgCVaSZoG1REUVGUrYtaDEAhNZuryg7BDFcbTUSbnRLFm13E1kcYasNi9DMGUCCi9nvDdtnCzLwefCGXZLNDrv4Ta9SdZhweqzo46yYPKBs1Snrj81QcKAUscVBVBc1RxSLRG

Alice makes her wallet multisig

Compare the addresses

If you compare the address generated when Alice created her multisig wallet:

49QQUR9DQFbCCQzLMMe2mCKmihhcc5LaTBYdqc9ymN8tDYnVoXWvjWhdQGuiNZ1eWXEEBQFk7iSbt2ig7MigEd8d3JpQ1sV

with the address generated when Bob created his multisig wallet:

49QQUR9DQFbCCQzLMMe2mCKmihhcc5LaTBYdqc9ymN8tDYnVoXWvjWhdQGuiNZ1eWXEEBQFk7iSbt2ig7MigEd8d3JpQ1sV

you will note they are the same. Huzzah.

Done

That’s it. The multisig wallet is complete. Funds sent to the address can be accessed by either Alice or Bob.

Now for the fun bits: spending from a multisig wallet (Coming Soon!).