未使用アウトプットに基づくトランザクションの生成/署名/送信
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 等を使用してブロードキャストすることができます。