Jason C.


Bitcoin

Using Multi-Signature Wallets

2017-09-28

Introduction

A multi-signature wallet is controlled by multiple private keys. This allows those private keys to be stored separately, or even controlled by different people. A multisig wallet does not necessarily need all keys to sign a transaction in order for it to be valid. The number of keys and the number of keys required are variables which can be set to any values.

Creating a Multisig Wallet

First you have to decide the number of signatures and the number of signatures required. For this tutorial I will use a 2of3 wallet. This means it will have 3 keys, and 2 will be required to sign a transaction.

To create a multisig wallet, first create three standard wallets, one for each key. If you don't know how to create a standard wallet, read using Electron Cash.

Open each standard wallet in Electron Cash and get their master public keys (MPK). To view the master public key of a wallet, go to the menu Wallet > Master Public Keys. For increased security you can create wallets on different computers.

This opens the Master Public Keys window.

Get all three public keys. If you are creating wallets on separate computers, you will need to transfer the public keys to a common computer. This can be done via email, pen drive, or any other method (even writing it down if using an offline computer).

Now that you have all 3 public keys, create a new wallet in Electron Cash. Instead of choosing a Standard wallet, choose a Multi-signature wallet. Set the From cosigners to 3 and Require cosigners to 2.

Next add the cosigners. Choose Use public or private keys.

On the next screen enter the first public key.

For the rest of the cosigners, there is a slightly different menu. Choose Enter cosigner key.

Do this a third time and enter the last cosigner public key. After you've entered all three public keys it will create the multisig wallet.

Receiving with a Multisig Wallet

Receiving Bitcoin with a multisig wallet is basically the same as with a regular wallet. Go to the Receive tab and copy the Receiving address.

Notice that this address starts with a 3. Standard bitcoin addresses start with a 1. A 3 indicates this is a "pay to script hash" (P2SH) address. P2SH is generic and can be used to create many different kinds of wallets, not just multi-signature ones.

The transaction will remain Unconfirmed until it is included in a block.

Sending with a Multisig Wallet

Sending transactions with multisig wallets differs significantly from normal wallets. The transaction first needs to be created with the 2of3 watch only wallet.

Go to the Send tab. Enter the address of the wallet you're paying to in the Pay to field. Enter the Amount and Fee. Note that fees can be higher for multisig wallets.

Once everything is set correctly, click Preview.

This is a watch only wallet, so you cannot Sign with it. Save the transaction. If using a Linux VM, I recommend saving to the Desktop (~/Desktop/).

Copy the unsigned transaction file to the machine with the first wallet. If you're using a Linux VM, you can just copy the file's contents. Gedit should have been installed if you followed the using VMs tutorial. If not, install it with sudo apt-get install gedit in your terminal.

These transaction files do not contain secrets and can be shared over any channel, such as email or instant message.

Once you have the transaction on the machines with the first wallet, open it from Tools > Load transaction > From file.

Find the unsigned.txn file and open it (e.g. ~/Desktop/unsigned.txt).

Now that you have the transaction opened with one of the original wallets, Sign it.

Once the transaction is signed, Save it. I usually name it partially-signed.txn, (e.g. ~/Desktop/partially-signed.txn).

Copy the partially signed transaction to a machine with another one of the wallets. Open it and Sign it.

Now the transaction has been signed with enough keys and is ready to broadcast. If your second wallet is online, you can broadcast immediately. If you're using an offline wallet, you can Save the signed transaction and copy it to the watch only wallet.

Open the signed transaction from the watch only wallet the same way (Tools > Load transaction > From file). The send address now shows up as green because it is connected to this wallet.

Broadcast the transaction to the Bitcoin (Cash) network.

And your payment is sent. The transaction will remain Unconfirmed until it is included in a block.

And that's it!

Conclusion

You can now create a multi-signature wallet, receive payments, and send payments. A 2of3 multisig wallet is just an example. You can create a wallet using any combination of signatures, depending on your use case.

Return to top or back to Bitcoin.