未使用アウトプットに基づくトランザクションの生成/署名/送信
Mastering Bitcoinの「未使用アウトプットに基づくトランザクションの生成/署名/送信」を実際にコマンドを実行しながら確認します。
環境は前回作成したDocker環境を使用します。
Bitcoin Coreを試すためのDocker環境を作った。 - DC4
Raw Transaction の受取先アドレスを作成します。
# アドレスの作成 root@56451b900162:/# bitcoin-cli -regtest getnewaddress testuser1 mrmcNKkhippXe8WTm7BbLNSoy5CydCZHhV
Raw Transaction に含めるUTXOを選択
#未使用のアウトプット(UTXO)を確認 bitcoin-cli -regtest listunspent ... { "txid": "5f76f24fe419f09e7da5010d8e3d110db4189f3b51f797026d619a7ca95416f8", "vout": 0, "address": "mzLCAPscRZtYZysh2RjUz8XEgXZuAU7e9v", "scriptPubKey": "2103562423e4bd01816ee0e06df4b327970b6f5f04ac817ad9e66ab039d20bd34db7ac", "amount": 50.00000000, "confirmations": 147, "spendable": true, "solvable": true, "safe": true } ...
Raw Transaction の作成
# > bitcoin-cli createrawtransaction "[{\"txid\":\"myid\",\"vout\":0}]" "{\"address\":0.01}" # `txid` 、`vout` に 上記のUTXO、受取先アドレス、送金額(10BTC) / お釣り(39.9995BTC) (手数料: 0.0005) を指定する。 root@56451b900162:/# bitcoin-cli -regtest createrawtransaction "[{\"txid\":\"5f76f24fe419f09e7da5010d8e3d110db4189f3b51f797026d619a7ca95416f8\",\"vout\":0}]" "{\"mrmcNKkhippXe8WTm7BbLNSoy5CydCZHhV\":10, \"mzLCAPscRZtYZysh2RjUz8XEgXZuAU7e9v\":39.9995}" 020000000100cc5d9cf910e58d423e4e686d67c9719e6e300eb93be1ecdc92ab53e274b2310000000000ffffffff0200ca9a3b000000001976a9145e4973ba22b718b8336c53cc70504ed16e07caf688acb0646aee000000001976a914ce6164048e09beba6beb0ea63fc9a7edc501393e88ac00000000
vout・・・1つのトランザクションを分割する際の番号
出力された16進数をデコードして内容を確認します。
bitcoin-cli -regtest decoderawtransaction 020000000100cc5d9cf910e58d423e4e686d67c9719e6e300eb93be1ecdc92ab53e274b2310000000000ffffffff0200ca9a3b000000001976a9145e4973ba22b718b8336c53cc70504ed16e07caf688acb0646aee000000001976a914ce6164048e09beba6beb0ea63fc9a7edc501393e88ac00000000 { "txid": "086065375607d9afd95a105eda40c362dec067bff7d2ba1cedc7002a5b27ce1e", "hash": "086065375607d9afd95a105eda40c362dec067bff7d2ba1cedc7002a5b27ce1e", "size": 119, "vsize": 119, "version": 2, "locktime": 0, "vin": [ { "txid": "31b274e253ab92dcece13bb90e306e9e71c9676d684e3e428de510f99c5dcc00", "vout": 0, "scriptSig": { "asm": "", "hex": "" }, "sequence": 4294967295 } ], "vout": [ { "value": 10.00000000, "n": 0, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 5e4973ba22b718b8336c53cc70504ed16e07caf6 OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a9145e4973ba22b718b8336c53cc70504ed16e07caf688ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mp7VodBS75f57jFgGWHb6NHNCrDH54CxNr" ] } }, { "value": 39.99950000, "n": 1, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 ce6164048e09beba6beb0ea63fc9a7edc501393e OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a914ce6164048e09beba6beb0ea63fc9a7edc501393e88ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mzLCAPscRZtYZysh2RjUz8XEgXZuAU7e9v" ] } } ] }
scriptSig
がnullなので、署名が行われていないことが確認できます。
署名の実施
root@56451b900162:/# bitcoin-cli -regtest signrawtransaction 020000000100cc5d9cf910e58d423e4e686d67c9719e6e300eb93be1ecdc92ab53e274b2310000000000ffffffff0200ca9a3b000000001976a9145e4973ba22b718b8336c53cc70504ed16e07caf688acb0646aee000000001976a914ce6164048e09beba6beb0ea63fc9a7edc501393e88ac00000000 { "hex": "020000000100cc5d9cf910e58d423e4e686d67c9719e6e300eb93be1ecdc92ab53e274b23100000000484730440220171a3a74c11ce5e7ffcc2a3ee6cf86957edfa955dd0ca3052ea3d1631eb616f5022054a24b3201cbf3d3b979c4d3074ef490be5cf89b8857056021933201d1f2b7e501ffffffff0200ca9a3b000000001976a9145e4973ba22b718b8336c53cc70504ed16e07caf688acb0646aee000000001976a914ce6164048e09beba6beb0ea63fc9a7edc501393e88ac00000000", "complete": true }
もう一度デコードして内容を確認します。
{ "txid": "7c7f41ccd1d0df0f3ab1009ab7993ec32ff161b9edaa3c196e6644dda54c8efb", "hash": "7c7f41ccd1d0df0f3ab1009ab7993ec32ff161b9edaa3c196e6644dda54c8efb", "size": 191, "vsize": 191, "version": 2, "locktime": 0, "vin": [ { "txid": "31b274e253ab92dcece13bb90e306e9e71c9676d684e3e428de510f99c5dcc00", "vout": 0, "scriptSig": { "asm": "30440220171a3a74c11ce5e7ffcc2a3ee6cf86957edfa955dd0ca3052ea3d1631eb616f5022054a24b3201cbf3d3b979c4d3074ef490be5cf89b8857056021933201d1f2b7e5[ALL]", "hex": "4730440220171a3a74c11ce5e7ffcc2a3ee6cf86957edfa955dd0ca3052ea3d1631eb616f5022054a24b3201cbf3d3b979c4d3074ef490be5cf89b8857056021933201d1f2b7e501" }, "sequence": 4294967295 } ], "vout": [ { "value": 10.00000000, "n": 0, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 5e4973ba22b718b8336c53cc70504ed16e07caf6 OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a9145e4973ba22b718b8336c53cc70504ed16e07caf688ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mp7VodBS75f57jFgGWHb6NHNCrDH54CxNr" ] } }, { "value": 39.99950000, "n": 1, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 ce6164048e09beba6beb0ea63fc9a7edc501393e OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a914ce6164048e09beba6beb0ea63fc9a7edc501393e88ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mzLCAPscRZtYZysh2RjUz8XEgXZuAU7e9v" ] } } ] }
今回は scriptSig
が設定されている事が確認できます。
この状態で 署名されたhex
を sendrawtransaction
等を使用してブロードキャストすることができます。