ビットコインのトランザクションを作成
前提条件としてトランザクションを作って署名するには以下の条件が必要
- ビットコインアドレスにUTXOが入っていること(入金済みアドレス)
- ビットコインアドレスの秘密鍵を知っていること
トランザクションの流れ
- UTXOに入金済みのトランザクションのID(TXID)とアウトプット(VOUT)を指定する(複数可)
- 送金先と金額を指定する(複数可)
- お釣りのアドレスを指定する
- 手数料を計算する
- 生成したトランザクションにビットコインアドレスに対応した秘密鍵で署名する
- ビットコインネットワークにトランザクションを送信する
tips
- P2PKHとP2SHという方式があるがここではP2PKHを指定
- トランザクションには閉じるという概念がある
- 閉じていない場合には展開して追記ができる
- マルチシグで時間軸が異なるタイミングで複数の署名をする時などに使われる
- ビットコインのネットワークに流すには閉じていることが必要
送金トランザクションの作成
var bitcore = require('bitcore-lib');
var address = "1xx";//入金済みビットコインアドレス
var privateKey = "xxxxxxxx";//入金済みビットコインアドレスの秘密鍵
var a_address = "1xxx";//お釣りビットコインアドレス
var b_address = "1xxxx";//送金先ビットコインアドレス
var amount = 100000;
var fee = 10000;
var utxo = {
txId: '0000',
vout: 0,
script: bitcore.Script.buildPublicKeyHashOut(address).toString(),//アドレスの方式(P2PKHの場合)
satoshis: 1000000,//入金済み金額(satoshi)
};
var transaction = new bitcore.Transaction().fee(fee)//手数料
.from(utxo) //前のトランザクションの参照
.to(b_address, amount) //送り先と金額(satoshi)の設定
.change(a_address) //おつり(自分のアドレスへ)
.sign(privateKey)//プライベートキーの設定
var rawtx = transaction.toString();
console.log(rawtx)// ここで表示される文字列をビットコインネットワークに送信することで送金が完了する
※ rawtxはinsightであれば /insight-api/tx/send へPOSTする