トランザクションの生成からビットコインの送信まで

今日は、いよいよビットコインを送信してみます! 送信するには、bitcoin-cliコマンドでは、ちょっと手間がかかります。 メインのマシンのノードからサブのマシンのノードへの送金が目標。

1.トランザクションの生成

ビットコインの送信をするために、まずは、トランザクションを作ります。

$ bitcoin-cli createrawtransaction '[{"txid":"c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc", "vout":1}]' '{"2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC":0.05, "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy":0.03}'
0200000001cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000

見た目があれですけどJSON形式でトランザクションを記述します。

ここでは、受け取ったビットコイントランザクションtxid:c967...を使って、送り先アドレス"2NDgA..."に0.05bitcoinを送ります。 おつりにあたる0.03bitcoinを自分のアドレス"2MsfC..."に送るつまり自分に戻します。 そして、余った分は、手数料としてとられるようです。

念のために作ったトランザクションを確認してみます。

$ bitcoin-cli decoderawtransaction 0200000001cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000
{
  "txid": "d56e33021bc4125eed6ea3826ea3b1cb0d710bc11a21c12de180a24aed72cec5",
  "hash": "d56e33021bc4125eed6ea3826ea3b1cb0d710bc11a21c12de180a24aed72cec5",
  "version": 2,
  "size": 115,
  "vsize": 115,
  "weight": 460,
  "locktime": 0,
  "vin": [
    {
      "txid": "c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc",
      "vout": 1,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.05000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 e01a2276131210a6fe444ead747cbead075c4e4e OP_EQUAL",
        "hex": "a914e01a2276131210a6fe444ead747cbead075c4e4e87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC"
        ]
      }
    },
    {
      "value": 0.03000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_HASH160 04885a6a6d1dab5e30bd54d04fdb9f5927e3825f OP_EQUAL",
        "hex": "a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy"
        ]
      }
    }
  ]
}

2.トランザクションの署名

送信するためには、ウォレットの秘密鍵で署名する必要があります。

まずは、暗号化されているウォレットをパスワードで一時的に(360秒)復号化しておきます。

$ bitcoin-cli walletpassphrase xxxxxxxx 360

signrawtransactionメソッドで署名っと。

$ bitcoin-cli signrawtransaction 0200000001cc139b4e770fcc
60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02404b4c0000
00000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a9140488
5a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000
error code: -32
error message:
signrawtransaction was removed in v0.18.
Clients should transition to using signrawtransactionwithkey and signrawtransactionwithwallet

あらら、エラーになってしまった。signrawtransactionは、もう、古いメソッドみたいです。 調べてみるとsignrawtransactionwithwalletメソッドがほぼ同じ動きみたいです。

$ bitcoin-cli signrawtransactionwithwallet 0200000001cc13
9b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02
404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d0000000000
17a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000
{
  "hex": "02000000000101cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000017160014271304445811dca1b9a7a4f9d30a83b370681695ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8702473044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01210384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb21300000000",
  "complete": true
}

署名成功! 署名した中身をみてみると

$ bitcoin-cli decoderawtransaction 02000000000101cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000017160014271304445811dca1b9a7a4f9d30a83b370681695ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8702473044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01210384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb21300000000
{
  "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
  "hash": "9b65f3209cce70801dc819335db7d4031fa7d7436a9819aaf99337fdf93652c0",
  "version": 2,
  "size": 247,
  "vsize": 166,
  "weight": 661,
  "locktime": 0,
  "vin": [
    {
      "txid": "c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc",
      "vout": 1,
      "scriptSig": {
        "asm": "0014271304445811dca1b9a7a4f9d30a83b370681695",
        "hex": "160014271304445811dca1b9a7a4f9d30a83b370681695"
      },
      "txinwitness": [
        "3044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01",
        "0384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb213"
      ],
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.05000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 e01a2276131210a6fe444ead747cbead075c4e4e OP_EQUAL",
        "hex": "a914e01a2276131210a6fe444ead747cbead075c4e4e87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC"
        ]
      }
    },
    {
      "value": 0.03000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_HASH160 04885a6a6d1dab5e30bd54d04fdb9f5927e3825f OP_EQUAL",
        "hex": "a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy"
        ]
      }
    }
  ]
}

scriptSigに署名が入ったみたいですね。

3.ビットコインの送信

いよいよビットコインを送信します!

$ bitcoin-cli sendrawtransaction 02000000000101cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000017160014271304445811dca1b9a7a4f9d30a83b370681695ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8702473044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01210384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb21300000000
c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2
$ bitcoin-cli listtransactions
[
  {
    "address": "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy",
    "category": "receive",
    "amount": 0.08165374,
    "label": "",
    "vout": 1,
    "confirmations": 388,
    "blockhash": "000000000029ca80d9a86e6e6b3e63dea511329acf265af72c640020364109f6",
    "blockindex": 8,
    "blocktime": 1548888357,
    "txid": "c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc",
    "walletconflicts": [
    ],
    "time": 1548888088,
    "timereceived": 1548888088,
    "bip125-replaceable": "no"
  },
  {
    "address": "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy",
    "category": "receive",
    "amount": 0.03000000,
    "label": "",
    "vout": 1,
    "confirmations": 0,
    "trusted": true,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no"
  },
  {
    "address": "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy",
    "category": "send",
    "amount": -0.03000000,
    "label": "",
    "vout": 1,
    "fee": -0.00165374,
    "confirmations": 0,
    "trusted": true,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no",
    "abandoned": false
  },
  {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "send",
    "amount": -0.05000000,
    "vout": 0,
    "fee": -0.00165374,
    "confirmations": 0,
    "trusted": true,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no",
    "abandoned": false
  }
]

categoryがsendでamountがマイナスのトランザクションが見えます。

受け取り側マシンは、

$ bitcoin-cli listtransactions
[
  {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "receive",
    "amount": 0.05000000,
    "label": "test",
    "vout": 0,
    "confirmations": 0,
    "trusted": false,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028940,
    "timereceived": 1549028940,
    "bip125-replaceable": "no"
  }
]

まだ、承認されてないみたいだけど、トランザクションは通ってる! ちょっと待つと

$ bitcoin-cli listtransactions
[
  {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "receive",
    "amount": 0.05000000,
    "label": "test",
    "vout": 0,
    "confirmations": 1,
    "blockhash": "0000000000000058d91bd6f3c80056b6ec89e441aa5d42272cb0fb394502ccd9",
    "blockindex": 1,
    "blocktime": 1549029299,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028940,
    "timereceived": 1549028940,
    "bip125-replaceable": "no"
  }
]

承認されたみたい!一応残高を確認すると

$ bitcoin-cli getbalance
0.05000000

おお、ちゃんと受け取れてる!

もう一度送信側でトランザクションを確認すると

 {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "send",
    "amount": -0.05000000,
    "vout": 0,
    "fee": -0.00165374,
    "confirmations": 2,
    "blockhash": "0000000000000058d91bd6f3c80056b6ec89e441aa5d42272cb0fb394502ccd9",
    "blockindex": 1,
    "blocktime": 1549029299,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no",
    "abandoned": false
  }

差額がfee手数料として取られた形だけど、手数料の額って任意なのかな???