DC4

未使用アウトプットに基づくトランザクションの生成/署名/送信

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が設定されている事が確認できます。

この状態で 署名されたhexsendrawtransaction 等を使用してブロードキャストすることができます。