Pybitcointools Multisig Tutorial

There has been a large amount of interest in multisignature transaction technology in the past year, especially with the recent announcement of CryptoCorp. If you want to play with multisig technology yourself on the command line, here are the gritty details of how to do it. First, run sudo pip install bitcoin to install the Python Bitcoin library. Then, to generate the three private keys, run the following:

> k1=`pybtctool random_key`
> k2=`pybtctool random_key`
> k3=`pybtctool random_key`
> p1=`pybtctool privtopub $k1`
> p2=`pybtctool privtopub $k2`
> p3=`pybtctool privtopub $k3`

You now have three private keys and three public keys; run echo $k1, echo $p3, etc to see these values in the raw form. Now, we make the multisig script and address:

> script=`pybtctool mk_multisig_script $p1 $p2 $p3 2 3`
> address=`pybtctool scriptaddr $script`

Let’s see what these values are:

> echo $script
5241045f4af45e3a7a86393c4ab9540cca382d46f10345b3ffcbb058089788550d167b7c079870d00da9728f8589fa5bbe0a8d62eadd56d37f3be6bc8145fe9a27437b4104509394eade56d900e90146e4bdf14f567b845ab0da986476253fe438f12032a248bbf2c16d28409b2961b3a3f797832ad195a8cef96589371271e2df6195cf804104ef6c434a854996e63cf650c0ba813993e90eef564bc78ad14768de51ac6b1bb00c5fe3381a923567162e8821e86ee28fbe4a25325f59cf6ede87c15d5af2881e53ae
> echo $address
3DDifvXMEQBEvn7dVR1wF5RXveA5MxEXek

Due to randomness, your values will be different, but of the same general form. Notice the 3 at the start of the address. Now, send some BTC to your address, and run the following to make sure you actually received the funds.

> pybtctool unspent $address
[{"output": "9e123938b7625ef7807f31ad61c3b818484fed93eb951d981abd83413005080f:0", "value": 20000}]

Now, we can make the transaction, sending the funds to the Methuselah Foundation‘s donation address:

> tx=`pybtctool mktx 9e123938b7625ef7807f31ad61c3b818484fed93eb951d981abd83413005080f:0 1GRF5cmvAqQPNVPRHe1TpMZGS1mYFHFQHu:10000`
> echo $tx
01000000010f0805304183bd1a981d95eb93ed4f4818b8c361ad317f80f75e62b73839129e0000000000ffffffff0110270000000000001976a914a91f9f763b29340b7d15fddd8b6ee41ac56fc88d88ac00000000

Now, let’s sign it with keys 1 and 3:

> sig1=`pybtctool multisign $tx 0 $script $k1`
> sig2=`pybtctool multisign $tx 0 $script $k3`
> tx2=`pybtctool apply_multisignatures $tx 0 $script $sig1 $sig2`

The final transaction looks like this:

> echo $tx2
01000000010f0805304183bd1a981d95eb93ed4f4818b8c361ad317f80f75e62b73839129e00000000fd5f01004930460221009e4cc93850d3d7ed6fcdd416f13b4f652d80c00d6c76f7594645540fb7ece79d022100f9cb6ec2ca973c2ef52aa541bbe28aa038189116de94df68fc29b0901b472f2f0148304502201bd655c130e6f47567f8e7d7b769d974d8b543ec53bf99d2232d07253af832c0022100f49d1f0564c9b0b192bd178b36ab04818ed1673feae380c46ce5c8dbaa622f1f014cc95241045f4af45e3a7a86393c4ab9540cca382d46f10345b3ffcbb058089788550d167b7c079870d00da9728f8589fa5bbe0a8d62eadd56d37f3be6bc8145fe9a27437b4104509394eade56d900e90146e4bdf14f567b845ab0da986476253fe438f12032a248bbf2c16d28409b2961b3a3f797832ad195a8cef96589371271e2df6195cf804104ef6c434a854996e63cf650c0ba813993e90eef564bc78ad14768de51ac6b1bb00c5fe3381a923567162e8821e86ee28fbe4a25325f59cf6ede87c15d5af2881e53aeffffffff0110270000000000001976a914a91f9f763b29340b7d15fddd8b6ee41ac56fc88d88ac00000000

And now we push:

> pybtctool eligius_pushtx $tx2
77afa6140a678f4791e4566e2f15a41e7d9236c79b0abc6388e73e055af0aeec

And there we go, we’re 0.0001 BTC closer to at least mitigating the effect of the single most deadly disease on the planet.

Leave a Reply

Your email address will not be published. Required fields are marked *