Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

アドレスを作成してみる(口座の作成) var bitcore = require("bitcore"); var privateKey = new bitcore.PrivateKey(); var address = privateKey.toAddress(); var wif = privateKey.toWIF(); console.log(address.toString(), wif);

Slide 10

Slide 10 text

アドレスを作成してみる(口座の作成) ■ビットコインアドレス(公開鍵) 1NdJsXeKxNv5EtHPVBQ1QfpEgyi5aTvV3B ■秘密鍵 KyJw2R3uzQ7svEDGYMuoNnryTaXojmmoz8a jk9XwzJTdGPaoQkuQ

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

残高の確認 npm install bitcore-explorers

Slide 13

Slide 13 text

残高の確認 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), }})) } });

Slide 14

Slide 14 text

送金処理 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; // つづく

Slide 15

Slide 15 text

送金処理 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); }) } });

Slide 16

Slide 16 text

最後に JSとREST-APIでわりと簡単にいろいろできます いろいろ遊べます

Slide 17

Slide 17 text

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