Bitcoreでビットコインのトランザクションを生成しブロードキャストする

2015年4月21日

bitcore

 

 

Bitcoreライブラリーを利用して、トランザクションを生成し、ビットコイン・ネットワークへブロードキャストした。Bitcoreはビットコイン・アドレスの生成の流れ、およびトランザクションのデータ構造をある程度知っていれば、ビットコインを送信するアプリを直感的に構築できるとても便利なライブラリーだ。また今回はウェブブラウザで実行できるようにした(Bitcoreのインストールについてはコチラ)。

 

 

内容
Aアドレス(自分)から0.0001BTCをBアドレス(相手)へ送る。
Aアドレスにはあらかじめ0.0003BTCが保有されている。

手数料は0.0001BTCに設定。

以上より最終残高は、

Aアドレス:0.0001BTC

Bアドレス:0.0001BTC となる。

 

開発環境

Mac OS 10.9.5 Safari7.0.6
Bitcore v0.11

 

 

 

ブロードキャストまでの手順


 

(1)アドレスの準備
(2)トランザクション生成
(3)トランザクションをブロードキャストする

 

(1)アドレスの準備

まずAアドレス(自分)の生成からおこなう。Bアドレス(相手)にビットコインを送信するには、Aアドレスの秘密鍵(Public Key)が必要となる。(一般的に取引所でアドレスを生成する場合は、ユーザーに秘密鍵は知らされない。)

 

ターミナルを使用。

 上記コードからAアドレス(a_address)を生成した。

 

 秘密鍵(プライベートキー)

(上記×部分は加工済み。)

 

Aアドレス(自分)

 

生成したAアドレスに、既にコインを保有しているアドレスから0.003BTCを送っておく。これによりAアドレスはビットコイン・ネットワークに取り込まれ、0.003BTCを保有している状態(unspent)となる。

 

Bアドレス(相手)は適当に用意しておく。

 

 

(2)トランザクション生成

トランザクションはBitcoreによって以下のように構成される。
http://bitcore.io/guide/transaction.html

 

 

・fee(satoshis)

手数料。今回は10000satoshi(0.0001BTC)を設定。

 

・from(utxos)
http://bitcore.io/guide/unspentoutput.html

utxosにはAアドレスの過去のトランザクションの出力が参照される。つまりAアドレスに保有されているコイン量(unspent)などの情報を取得しutxosに設定する。Bitcoreでは「bitcore-explores」でutxosをまとめて取得できる。

「bitcore-exploresでUTXOs(Unspent)を得る」を参照

 

以下のコードで取得できる。

 

・to(address, amount)

ビットコインを送る相手のアドレスを設定する。

今回はBアドレスに0.0001BTC送るので、

to(b_address,10000)となる。

 

・change(address)

おつりの送り先を指定する。そのアドレスはもちろん自分のアドレスとなる。
change(a_address)

 

・sign(privkeySet)

Aアドレスの秘密鍵(プライベートキー)を設定する。

 

 

以下今回の例によるトランザクション生成まとめ

 

 

(3)トランザクションをブロードキャストする
http://bitcore.io/guide/module/explorers/

トランザクションを生成したら、そのトランザクションをブロードキャストする。
「bitcore-explores」を利用する。

 

 

 

ウェブブラウザでの利用


 

Bitcoreをブラウザで利用できるように設定する。

 

BowerでBitcoreライブラリーをインストールできる(以下Macのターミナルにて)。

http://bitcore.io/guide/

 

$bower install bitcore

 

「bitcore-explorers」もインストールしておく。

https://github.com/bitpay/bitcore-explorers/blob/master/docs/index.md

 

$bower install bitcore-explorers –save

 

 

以上を踏まえて上での全コード
※下記indexファイルはボタン等を設置していないのでブラウザで表示(画面自体は真っ白)させるだけで実行されるようになっている。

 

実行結果

https://blockchain.info/address/1J63En48PRGJvEaUkuGHq3aHbjkeoRPUPm

 

index.html

 

 

以下ログ

 

utxos.forEach(function(utxo){console.log(utxo.toJSON());});

utxos(Aアドレスに関する過去のトランザクションの参照)を見ても分かるように、ビットコインの実体はトランザクションの出力である。

 

console.log(“transaction”,transaction.toJSON());

(×部分は加工済み)

 

console.log(id)

新たに生成されたトランザクションID

b27b8b68a1548c0f46e02df06e7f0026ebe1499928e833c8ede7c71dad218ee9

 

以上

 

 

 

 参照


 

Transactions

https://en.bitcoin.it/wiki/Transactions

 

WIDE Technical-Report in 2014
ビットコインにおけるトランザクション、その展性と影響

http://member.wide.ad.jp/tr/wide-tr-ideon-bitcoin-transaction2014-00.pdf

 

Mastering Bitcoin

Chapter 5. Transactions

http://chimera.labs.oreilly.com/books/1234000001802/ch05.html

 

https://github.com/quartzjer/pennybank/search?utf8=✓&q=bitcore

 

https://github.com/bitpay/bitcore/blob/master/docs/examples.md#generate-a-address-from-a-sha256-hash

 

https://github.com/bitpay/bitcore/blob/master/docs/transaction.md

 

https://github.com/wobine/blackboard101/blob/master/BitcoreDayOne.html

 

LABS  DISCUSSION FORUMS

https://labs.bitpay.com/c/bitcore/help

 

Copyright © 2021 アクト・オブ・リーディング All Rights Reserved.  プライバシーポリシー