BitcoinでマルチシグアドレスのBTCを送金する手順

Bitcoin(ビットコイン)

BitcoinのマルチシグにあるBTCを送金する仕組みがいまいち理解できていなかったため、手順をまとめました。

Sponsored Link


1. シングルアドレス作成

# bitcoin-cli getaccountaddress multi-test1
1NVHY3UHtMgv5HP968ZdRxgbMYohX6Dc8C

# bitcoin-cli getaccountaddress multi-test2
1a7dtCLsX8NA3MftN9pc2yeEAJzVd5ERjf

# bitcoin-cli getaccountaddress multi-test3
1ZLzjqJ7fzL4bmnsgvzYPLWduQETCUdek5

2. 1 の公開鍵、秘密鍵を取得しておく

公開鍵

# bitcoin-cli validateaddress 1NVHY3UHtMgv5HP968ZdRxgbMYohX6Dc8C
{
  "isvalid": true,
  "address": "1NVHY3UHtMgv5HP968ZdRxgbMYohX6Dc8C",
  "scriptPubKey": "76a914513728d578c814b57f9bc9f22dea7ce643a6323c88ac",
  "ismine": true,
  "iswatchonly": false,
  "isscript": false,
  "pubkey": "03da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd6",
  "iscompressed": true,
  "account": "multi-test1",
  "timestamp": 1517390702,
  "hdkeypath": "m/0'/0'/34'",
  "hdmasterkeyid": "eab50acf12b5b9d86528017c5a19c42abc2f13e4"
}

# bitcoin-cli validateaddress 1a7dtCLsX8NA3MftN9pc2yeEAJzVd5ERjf
{
  "isvalid": true,
  "address": "1a7dtCLsX8NA3MftN9pc2yeEAJzVd5ERjf",
  "scriptPubKey": "76a914d0c080c2184e175d3891610a88ad6854632a678c88ac",
  "ismine": true,
  "iswatchonly": false,
  "isscript": false,
  "pubkey": "03483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424",
  "iscompressed": true,
  "account": "multi-test2",
  "timestamp": 1517390702,
  "hdkeypath": "m/0'/0'/35'",
  "hdmasterkeyid": "eab50acf12b5b9d86528017c5a19c42abc2f13e4"
}

# bitcoin-cli validateaddress 1ZLzjqJ7fzL4bmnsgvzYPLWduQETCUdek5
{
  "isvalid": true,
  "address": "1ZLzjqJ7fzL4bmnsgvzYPLWduQETCUdek5",
  "scriptPubKey": "76a914c84f31b97b6afd8067fe036a6e0200b53696d15188ac",
  "ismine": true,
  "iswatchonly": false,
  "isscript": false,
  "pubkey": "0285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da0",
  "iscompressed": true,
  "account": "multi-test3",
  "timestamp": 1517390702,
  "hdkeypath": "m/0'/0'/36'",
  "hdmasterkeyid": "eab50acf12b5b9d86528017c5a19c42abc2f13e4"
}

秘密鍵

# bitcoin-cli dumpprivkey 1NVHY3UHtMgv5HP968ZdRxgbMYohX6Dc8C
PRIVATEKEY1
# bitcoin-cli dumpprivkey 1a7dtCLsX8NA3MftN9pc2yeEAJzVd5ERjf
PRIVATEKEY2
# bitcoin-cli dumpprivkey 1ZLzjqJ7fzL4bmnsgvzYPLWduQETCUdek5
PRIVATEKEY3

3. マルチシグアドレス作成(createmultisig

2で取得した公開鍵を使用してマルチシグ作成する

# bitcoin-cli createmultisig 2 '["03da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd6","03483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424","0285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da0"]'
{
  "address": "3GcVmkXy99Xn9gXW4Y9DDsmXSJRSGySDUh",
  "redeemScript": "522103da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd62103483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424210285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da053ae"
}

4. 3のマルチシグアドレスに送金

# bitcoin-cli sendtoaddress 3GcVmkXy99Xn9gXW4Y9DDsmXSJRSGySDUh 100
9abce4a33e390f18d890454deeb74db9f368bf25db27e4f1e6487362ac6372ff

5. listunspentで3で送金したUTXOを特定しておく

# bitcoin-cli listunspent
 :
  {
    "txid": "9abce4a33e390f18d890454deeb74db9f368bf25db27e4f1e6487362ac6372ff",
    "vout": 1,
    "address": "3GcVmkXy99Xn9gXW4Y9DDsmXSJRSGySDUh",
    "account": "multisig-1",
    "redeemScript": "522103da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd62103483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424210285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da053ae",
    "scriptPubKey": "a91401a0b6776b8dcb6fdcbff86f19a75e2dc4e0075287",
    "amount": 100.00000000,
    "confirmations": 16,
    "spendable": true,
    "solvable": true,
    "safe": true
  },
 :

6. ブロックをあらかじめ同期しておく

テスト用に別ノードをたててbitcoindを同期

7. 受信用のアドレス作成しておく

# bitcoin-cli getaccountaddress multi-node2-1
1bEBfGrwJcCxqFsr4eUucsUWTXxYZjRkP8

8. createrawtransaction でトランザクション作成

手数料を50000satoshiとしたので、使うUTXOが100BTCなため、99.99950000を値に指定。手数料高すぎるとabsurdly-high-feeエラーが出る

# bitcoin-cli createrawtransaction '[{"txid":"9abce4a33e390f18d890454deeb74db9f368bf25db27e4f1e6487362ac6372ff","vout":1,"scriptPubKey":"a91401a0b6776b8dcb6fdcbff86f19a75e2dc4e0075287","redeemScript":"522103da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd62103483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424210285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da053ae"}]' '{"1bEBfGrwJcCxqFsr4eUucsUWTXxYZjRkP8":99.99950000}'
0200000001ff7263ac627348e6f1e427db25bf68f3b94db7ee4d4590d8180f393ea3e4bc9a0100000000ffffffff01b0200b54020000001976a914dcf5a69a4113806bc51c3db51929b847e364eda788ac00000000

9. signrawtransaction で署名

txidには5で見つけたtxid, vout も5で見つけたものに揃える。
scriptPubKey, redeemScript は3でつくった createmultisig のものを参照。
最後に2 of 3 の 2である秘密鍵を2つ指定

# bitcoin-cli signrawtransaction '0200000001ff7263ac627348e6f1e427db25bf68f3b94db7ee4d4590d8180f393ea3e4bc9a0100000000ffffffff01b0200b54020000001976a914dcf5a69a4113806bc51c3db51929b847e364eda788ac00000000' '[{"txid":"9abce4a33e390f18d890454deeb74db9f368bf25db27e4f1e6487362ac6372ff","vout":1,"scriptPubKey":"a91401a0b6776b8dcb6fdcbff86f19a75e2dc4e0075287","redeemScript":"522103da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd62103483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424210285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da053ae"}]' '["PRIVATEKEY1", "PRIVATEKEY3"]'
{
  "hex": "0200000001ff7263ac627348e6f1e427db25bf68f3b94db7ee4d4590d8180f393ea3e4bc9a01000000fdfd0000483045022100ac4312a9d1c2ce895b41d0d6755bae123663cdd4fb1dbe11622352cab743446b02207d7918e99bdbd226c6b7a46fc63562453f0dde97d431dc17256ea2079006ddb70147304402206443c08b10e285c22e598073fd35ef43aacc4b535ac3a1ed4c12bc72979a34640220758ad3a159d72292941741cf494c3055f00875423c8f8801abb198185dca7051014c69522103da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd62103483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424210285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da053aeffffffff01b0200b54020000001976a914dcf5a69a4113806bc51c3db51929b847e364eda788ac00000000",
  "complete": true
}

10.sendrawtransactionで送金

# bitcoin-cli sendrawtransaction 0200000001ff7263ac627348e6f1e427db25bf68f3b94db7ee4d4590d8180f393ea3e4bc9a01000000fdfd0000483045022100ac4312a9d1c2ce895b41d0d6755bae123663cdd4fb1dbe11622352cab743446b02207d7918e99bdbd226c6b7a46fc63562453f0dde97d431dc17256ea2079006ddb70147304402206443c08b10e285c22e598073fd35ef43aacc4b535ac3a1ed4c12bc72979a34640220758ad3a159d72292941741cf494c3055f00875423c8f8801abb198185dca7051014c69522103da3c452aa94b634255c6878a6c88e77381806397a3e7515f9eb7c0fd6b80bfd62103483e0e5684e30fb79aae7c84d10abac9017d7177f11d73427f1ca6f075738424210285d67f76b8a6b24f5496e76b69d91a51f258cbb81b129f30210b8c6a4f8b1da053aeffffffff01b0200b54020000001976a914dcf5a69a4113806bc51c3db51929b847e364eda788ac00000000
eb19370d8b6b06581f11fe233e017db37cfcbde714cf0e159e7a64ca81533ab2

残高確認

# bitcoin-cli listaccounts
{
  "": 0.00000000,
  "multi-node2-1": 99.99950000
}
Sponsored Link
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …