トランザクションの生成からビットコインの送信まで
今日は、いよいよビットコインを送信してみます! 送信するには、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手数料として取られた形だけど、手数料の額って任意なのかな???