TXEDITORを使ってP2PKHトランザクションを作る
Blockchain Core Camp に参加しました
Blockchain(ビットコイン)コア実装を体験するワークショップに参加しました。
TXEDITORによるトランザクション作成
ビットコインのトランザクションをWeb画面で作成する面白い体験がありましたので家に帰ってから復習した結果を共有します。
# Digital Garageの方が作成されたトランザクション作成ツール「TXEDITOR」を利用します。
1.事前準備
(1) bitcore-libインストール
$ cd /tmp/txeditor $ npm install bitcore-lib $ vi new_address.js
(2) 新規アドレス作成JS作成 (new_address.js)
var bitcore = require('bitcore-lib'); var network = 'testnet'; var privateKey = new bitcore.PrivateKey(network); // var privateKey = new bitcore.PrivateKey("929f890e36a725449e53945b1f7a64a124a9fb4b31d735426a2d9ac8166ff1f9", network); // 既に秘密鍵がある場合 console.log("Private Key : " + privateKey.toString()); console.log("Private Key (WIF) : " +privateKey.toWIF()); console.log("Public Key : " + privateKey.toPublicKey().toString()); console.log("Bitcoin Address : " + privateKey.toPublicKey().toAddress().toString()); var script = new bitcore.Script.buildPublicKeyHashOut(privateKey.toPublicKey()); console.log("Locking Script : " + script.toString()); console.log("Locking Script (HEX) : " + script.toHex());
(3) 送信元アドレス作成
$ node new_address.js Private Key : bc32f5abc11358b684aaddf879d5de547102d32f87a4e9b61cc01198e36729ed Private Key (WIF) : cTtY3S5SKLzmGsoySfmHbNb2FwTq3bCw67qQ2oZ4ZRpyt4gqSaia Public Key : 0328df82ba5d3086703ccf4dc66f59370895abc9dc3e2786243b6bd4f47752668e Bitcoin Address : mpMvEqrLGGRtSrPFbmxnWC4Fxz95TwP5C8 Locking Script : OP_DUP OP_HASH160 20 0x6103ac34044e1a01842ed9bfc442812bdbd482e3 OP_EQUALVERIFY OP_CHECKSIG Locking Script (HEX) : 76a9146103ac34044e1a01842ed9bfc442812bdbd482e388ac
(4) 送信先アドレス作成
$ node new_address.js Private Key : bef4ad11ac5ebc6cb2be164395b6e0e47b3c88bacc3d0f4d276d568be103f1b4 Private Key (WIF) : cTytr1cdcWKucVpZ5vSiQnfiVJxngBDwxPzkhkmYByGHHzbpfjCd Public Key : 0357f0e2adfcfa7288da1e71f9705a6d544f4b526efa3d8c2f59f74f7729852df2 Bitcoin Address : mnNzTHyXRpKJyszKuFenXDtRVwchsK9uBu Locking Script : OP_DUP OP_HASH160 20 0x4b475af403bb8e544bcca29dc5212c7775fa818f OP_EQUALVERIFY OP_CHECKSIG Locking Script (HEX) : 76a9144b475af403bb8e544bcca29dc5212c7775fa818f88ac
(5) 送信元アドレスにBitcoinを送付
以下サイトから「mpMvEqrLGGRtSrPFbmxnWC4Fxz95TwP5C8」を入力するとTestnetで使えるBitcoinがもらえます
2.送信元のUTXO取得
UTXOはIndieSquare APIを利用して取得します。
$ curl https://apitestnet.indiesquare.me/v2/addresses/mpMvEqrLGGRtSrPFbmxnWC4Fxz95TwP5C8/utxos [ { "scriptPubKey":"76a9146103ac34044e1a01842ed9bfc442812bdbd482e388ac", "vout":0, "confirmations":0, "txid":"70c459dfd852b85f49e8c64a3af29e554cd1fffacf7bcccd28ac1d8ef99b55be", "amount":0.043 } ]
3.TXEDITOR (Transactionタブ)を入力
- txins[0].outpoint.hash = utxoのtxid
- txins[0].outpoint.index = utxoのvout
- txins[0].signature_script = utxoのscriptPubKey
- txouts[0].value = utxo.amount * 1000000 - 100000 = 4200000
- txouts[0].pk_script = 送信先アドレスのLocking Script (HEX)
4.TXEDITOR (Signature(HASHTYPE_ALL))を入力
- Private key (WIF/HEX) = 送信元のPrivate Key (WIF)
5.TXEDITOR (Script)を入力
- Script = Signature + Hash Type<改行>送信元のPublic Key
6.TXEDITOR (Transactionタブ)を入力
- txins[0].signature_script = Script.Hex
7.decodeRawTransaction実行
decodeRawTransaction実行
curl -H "Content-Type: application/json" -X POST -d '{"tx": "0100000001be559bf98e1dac28cdcc7bcffaffd14c559ef23a4ac6e8495fb852d8df59c470000000006a47304402207674f93be33f2a8b4a9fbdde81ffc9b6421e8854a17891a5a9db64f3a68e2a7902202f1eed603863afd62806468712ba4eada73bff41b310c1deed485112fc8b996f01210328df82ba5d3086703ccf4dc66f59370895abc9dc3e2786243b6bd4f47752668effffffff0140164000000000001976a9144b475af403bb8e544bcca29dc5212c7775fa818f88ac00000000"}' https://apitestnet.indiesquare.me/v2/transactions/decode
レスポンス
{ "txid":"40e2b155bb7b73623b2b2f8866a455699b76aeab077cd8d310a495e629ad2d6f", "size":191, "version":1, "locktime":0, "vin":[ { "txid":"70c459dfd852b85f49e8c64a3af29e554cd1fffacf7bcccd28ac1d8ef99b55be", "vout":0, "scriptSig":{ "asm":"304402207674f93be33f2a8b4a9fbdde81ffc9b6421e8854a17891a5a9db64f3a68e2a7902202f1eed603863afd62806468712ba4eada73bff41b310c1deed485112fc8b996f[ALL] 0328df82ba5d3086703ccf4dc66f59370895abc9dc3e2786243b6bd4f47752668e", "hex":"47304402207674f93be33f2a8b4a9fbdde81ffc9b6421e8854a17891a5a9db64f3a68e2a7902202f1eed603863afd62806468712ba4eada73bff41b310c1deed485112fc8b996f01210328df82ba5d3086703ccf4dc66f59370895abc9dc3e2786243b6bd4f47752668e" }, "sequence":4294967295 } ], "vout":[ { "value":0.042, "n":0, "scriptPubKey":{ "asm":"OP_DUP OP_HASH160 4b475af403bb8e544bcca29dc5212c7775fa818f OP_EQUALVERIFY OP_CHECKSIG", "hex":"76a9144b475af403bb8e544bcca29dc5212c7775fa818f88ac", "reqSigs":1, "type":"pubkeyhash", "addresses":[ "mnNzTHyXRpKJyszKuFenXDtRVwchsK9uBu" ] } } ] }
8.broadcast実行
broadcast実行
$ curl -H "Content-Type: application/json" -X POST -d '{"tx": "0100000001be559bf98e1dac28cdcc7bcffaffd14c559ef23a4ac6e8495fb852d8df59c470000000006a47304402207674f93be33f2a8b4a9fbdde81ffc9b6421e8854a17891a5a9db64f3a68e2a7902202f1eed603863afd62806468712ba4eada73bff41b310c1deed485112fc8b996f01210328df82ba5d3086703ccf4dc66f59370895abc9dc3e2786243b6bd4f47752668effffffff0140164000000000001976a9144b475af403bb8e544bcca29dc5212c7775fa818f88ac00000000"}' https://apitestnet.indiesquare.me/v2/transactions/broadcast
レスポンス
{ "txid":"40e2b155bb7b73623b2b2f8866a455699b76aeab077cd8d310a495e629ad2d6f" }
9.broadcast実行結果
問題なく送信できました。
http://tbtc.blockr.io/tx/info/40e2b155bb7b73623b2b2f8866a455699b76aeab077cd8d310a495e629ad2d6f
参考
https://developer.indiesquare.me/#broadcast-transaction http://tpfaucet.appspot.com/ http://qiita.com/you21979@github/items/5d3bd71ae2107d03973a