BitcoinJS (bitcoinjs-lib)を使ってCounterpartyのAssetを作成する
はじめに
Counterpartyのフォーラムに、@alexnskがCounterpartyとBitcoinJSの連携について書いていました。今回はBitcoinJSとCounterpartyのRPC-APIの連携について書きます。
目次
- BitcoinJSとは
- CounterpartyのAssetを作成
BitcoinJSとは
Hive Wallet、Blockchain.info、Dark Walletなど多数のWeb Walletで利用されているJavascriptのBitcoinライブラリ。
Bitcoinアドレス作成、トランザクション作成といったよくある機能だけでなく、マルチシグのアドレス作成、ステルスアドレス作成など面白そうな機能がたくさんあり、これらのソースを見るだけでも楽しそうです。以下は私が気になった機能です。
Create an OP RETURN transaction
Create a 2-of-3 multisig P2SH address
Spend from a 2-of-2 multisig P2SH address
Generate a single-key stealth address
Generate a dual-key stealth address
Recover a BIP32 parent private key from the parent public key and a derived non-hardened child private key
CounterpartyのAssetを作成
BitcoinJSとCounterpartyのRPC APIを組み合わせて、Assetを作成するスクリプトが以下です。新規でビットコインアドレスを作成しているため、Asset作成時にBTC不足エラーになります..が、ひととおりの流れはみれると思います。
npm install bitcoinjs-lib npm install node-json-rpc
var Bitcoin = require('bitcoinjs-lib') var rpc = require('node-json-rpc'); // RPC接続情報 var options = { port: 4000, host: 'XXXXXX.vs.sakura.ne.jp', path: '/', strict: true, login: 'rpc', hash: 'xcppw1234' }; // Bitcoinアドレス作成 var key = Bitcoin.ECKey.makeRandom(); var pk = key.toWIF(); // Private Key var address = key.pub.getAddress(); address.version = 0x00; // 0x00 — mainnet, 0x6F — testnet console.log(address.toString()); // Bitcoinアドレス // Bitcoinアドレス Base58Check try{ var addr = Bitcoin.Address.fromBase58Check(address.toString()); console.log("Base58Check OK"); }catch(e){ // Invalid address console.log(e); } // Asset作成 ※BTC不足のためエラーになります... var client = new rpc.Client(options); // Asset作成API(RPC) client.call( {"jsonrpc":"2.0", "id":0, "method":"create_issuance", "params":{"source":"address.toString()", "quantity":10, "asset":"A15128863744940229000"}}, function (err, res) { if (err) { console.log(err); } else { console.log(res); if (res.code == -32000) { return; } // サイン(BitcoinJS) var key = Bitcoin.ECKey.fromWIF(pk); var tx=Bitcoin.Transaction.fromHex(res.result); tx.sign(0, key); tx.toHex(); // HEX-data of signed transation // ブロードキャスト(RPC) client.call( {"jsonrpc":"2.0", "id":0, "method":"broadcast_tx", "params":{"signed_tx_hex":tx.toString()}}, function (err, res) { if (err) { console.log(err); } else { console.log(res); } } ); } } );
まとめ
次回は、BitcoinJSの各機能をそれぞれ見ていきます。
参考
Sample of using bitcoinjs-lib with Counterparty
Github BitcoinJS (bitcoinjs-lib)
政府が解読できない通信アプリは禁止を 英キャメロン首相 ステルスアドレスを見てふっと思い出しました..