Bitcoin x Javascript

Bitcoin x Javascript

東京ノード学園#17

282fc99a2f1c0d4818dda3b0db8a4b67?s=128

Yuki Akiyama

August 31, 2015
Tweet

Transcript

  1. Bitcoin x Javascript 東京Node学園#17 Yuki Akiyama(you21979)

  2. どんなひと ・Yuki Akiyama ・ゆあ(you21979) ・最近はビットコイン界隈で働いているエンジニア ・Javascriptが最近のメイン言語 ・なぜかビットコイン界隈エンジニア少ない

  3. Bitcoinとはなにか ・オープンソース ・分散型 ・仮想通貨の一種 ・モノでもオカネでもない(日本政府の見解) 技術的には署名にECDSAとか公開鍵暗号方式と か

  4. Bitcoinの機能 大きく分けて三つ ▪ウォレット(秘密鍵管理、トランザクションの作成) ▪マイニング(トランザクションの認証) ▪ブロックチェーン(データベース) リファレンスであるbitcoindにはすべて入っている

  5. Bitcoinの機能 普通はサーバーを立ててJSON-RPCを経由して プログラムする bitcoindはブロックチェーンの同期に時間がかかる (0.9.5は3日くらい?) 気軽にインスタンスを立ち上げるのはつらい

  6. Bitcoinの機能 ブロックチェーンの同期に時間がかかるので ブロックチェーンやp2pネットワークは共有インフラ として用意しておいて クライアントとサーバーを分けたい。 そんなことができちゃいます。

  7. Bitcoinの機能 ブラウザで扱える機能 ▪ウォレット ▪ブロックチェーン(REST-API経由)

  8. JSのライブラリ ▪bitcoinjs-lib (http://bitcoinjs.org/)  stefan thomasさんが作っているライブラリ ▪bitcore (http://bitcore.io/)  bitpayという会社が作っているライブラリ (ほかにもcryptocoinjsとか)

  9. アドレスを作成してみる(口座の作成) var bitcore = require("bitcore"); var privateKey = new bitcore.PrivateKey();

    var address = privateKey.toAddress(); var wif = privateKey.toWIF(); console.log(address.toString(), wif);
  10. アドレスを作成してみる(口座の作成) ▪ビットコインアドレス(公開鍵) 1NdJsXeKxNv5EtHPVBQ1QfpEgyi5aTvV3B ▪秘密鍵 KyJw2R3uzQ7svEDGYMuoNnryTaXojmmoz8a jk9XwzJTdGPaoQkuQ

  11. アドレスを作成してみる(口座の作成) ▪QRコードにしてみる(jquery.qrcodeとかで) 1NdJsXeKxNv5EtHPVBQ1QfpEgyi5aTvV3B

  12. 残高の確認 npm install bitcore-explorers

  13. 残高の確認 var explorers = require("bitcore-explorers"); var insight = new explorers.Insight();

    var address = '1NdJsXeKxNv5EtHPVBQ1QfpEgyi5aTvV3B'; insight.getUnspentUtxos(address, function(err, utxos) { if (err) {} else { console.log(utxos.map(function(v){ return { txid : v.txId, vout : v.outputIndex, satoshi : v.satoshis, btc : (v.satoshis * 1e-8).toFixed(8), }})) } });
  14. 送金処理 var bitcore = require("bitcore"); var explorers = require("bitcore-explorers"); var

    insight = new explorers.Insight(); var wif = ''KyJw2R3uzQ7svEDGYMuoNnryTaXojmmoz8ajk9XwzJTdGPaoQkuQ''; var privateKey = bitcore.PrivateKey.fromWIF(wif); var address = privateKey.toAddress(); var send_address = '1xxxx'; var amount = 100000; var fee = 10000; // つづく
  15. 送金処理 insight.getUnspentUtxos(address.toString(), function(err, utxos) { if (err) {} else if(utxos.length>0){

    var transaction = new bitcore.Transaction() .from(utxos) .to(send_address, amount) .fee(fee) .change(address) .sign(privateKey) var rawtx = transaction.serialize().toString('hex'); insight.broadcast(rawtx, function(err, txid){ console.log(txid); }) } });
  16. 最後に JSとREST-APIでわりと簡単にいろいろできます いろいろ遊べます

  17. ご清聴有難うございました ・ビットコインワークショップをやっています http://bitbank.connpass.com/