Slide 1

Slide 1 text

ビットコインを支える インフラについて ビットコインとか勉強会#13 2017/12/11 Yuki Akiyama

Slide 2

Slide 2 text

自己紹介 名前: Yuki Akiyama (ゆあ)          twitter : @you21979 所属:ビットバンク株式会社 好きな動物: ペンギン お仕事など:  新卒のころは証券システム開発  ちょっと前までオンラインゲームやスマホのゲーム開発  今は取引所で暗号通貨のインテグレーションをしています

Slide 3

Slide 3 text

暗号通貨アドベントカレンダー 開催中です。 埋まっていないので 勉強中のことでもよいので、書いてみたい人! よろしくお願いします https://qiita.com/advent-calendar/2017/cryptocurrencies

Slide 4

Slide 4 text

そもそなぜインフラがいるのか ビットコインのインフラというとbitcoindがまず思い浮かびますが ウォレットシステムを最初に作ろうとすると最初につまずくことがあります bitcoindのウォレットで管理しているアドレス以外入金データを取得する方法が標準で提 供されていないのです bitcoin-rpcにあるlistunspentのようなコマンドが管理外アドレスでは使えないのです。

Slide 5

Slide 5 text

入金確認で期待されるインターフェイス ● ビットコインアドレスを指定して、未使用のトランザクション(UTXO)一覧を取得する ● 新規のUTXOを発見したら、一定の検証数を確認するまで保留し、確認後入金処 理をする

Slide 6

Slide 6 text

入金確認で期待されるインターフェイス ● ビットコインアドレスを指定して、未使用のトランザクション(UTXO)一覧を取得する ● 新規のUTXOを発見したら、一定の検証数を確認するまで保留し、確認後入金処 理をする ビットコインアドレスを指定するところから 標準の方法ではサポートされていない

Slide 7

Slide 7 text

できているよ? でも世の中にはWEBやスマートフォンで動くウォレットがあり 自分で秘密鍵を管理しアドレスを外部から問い合わせて残高が取得できている

Slide 8

Slide 8 text

今日話すこと これを解決するプロダクトとして代表的な二つのOSSプロダクトがある ● insight ● electrumx どちらも端末側でウォレットを動かすためのバックエンドサーバーです

Slide 9

Slide 9 text

insight オープンソースなブロックエクスプローラとして有名 作者はペイメントプロセッサーのBitpay Nodejsで作られている REST-APIで情報を取得できる ハードウェアウォレットのTrezorがWEBウォレットのバックエンドに使っている

Slide 10

Slide 10 text

insightのクライアントソフト達

Slide 11

Slide 11 text

insight 基本的に以下の5つの部品から構成されている ● 魔改造版bitcoind (insightを動かすために改造されたbitcoind) ● bitcore-lib (ビットコインのライブラリ) ● bitcore-node (utxoのデータベース) ● insight-ui (ブロックエクスプローラの画面) ● insight-api (REST-API)

Slide 12

Slide 12 text

insightのすごいところ ● REST-APIである https://insight.bitpay.com/api/addrs/bitcoin_address/utxo 必要なデータは大体一回のリクエストでとれる ● メンテ不要 ● ブロックエクスプローラがついている ● マルチプラットホームのウォレットをホスティングできる ● プラグインシステムなのでbitcoindからデータを受け取って集計するシステムを簡 単に作れる

Slide 13

Slide 13 text

insightのつらみ ● まだsegwitに対応していない(v5から対応) ● bitcoindが魔改造版なので最新版に追従しにくい(最新版を使うには自分でパッチ を当てる必要がある) ● 次期バージョンでは魔改造版からbcoinに変更 ● データベースがでかい(来年にはbitcoindと合わせて500GB突破しそう) ● しばらく開発が滞ってた(最近はまた活発)

Slide 14

Slide 14 text

insightはオルトコイン対応のしやすい? チェインパラメータを対応する(値変えるだけで簡単) segwitに対応したコインならそれに対応 (そこそこめんどい) 魔改造版bitcoindをパッチを当てて作る(大変) モナで試した人がいて10日くらいかかってました(でも少し不安定)

Slide 15

Slide 15 text

insightはオルトコイン対応のしやすい? ● Litecoin https://github.com/litecoin-project/litecore-node ● ZCash https://github.com/BitMEX/zcash-bitcore-node ● Dash https://github.com/dashpay/bitcore-node-dash ● Zcoin https://github.com/Technoprenerd/bitcore-node-zcoin オルトコイン版のinsightは結構不安定だったりするので動いたらラッキーくらいに。

Slide 16

Slide 16 text

electrumx ウォレットソフトのelectrumのサーバーサイド実装 以前はオルタナティブな実装だったが正式にelectrumの後継サーバーとなった 作者はkyuupichan Python3で作られている tcp接続にてAPIサーバーとして扱える

Slide 17

Slide 17 text

electrumのクライアントソフト達

Slide 18

Slide 18 text

electrumx 基本的に三つの部品から構成されている ● bitcoind (通常のcoind) ● electrumx_server (utxoのデータベース) ● compact_history (データベースメンテナンスツール)

Slide 19

Slide 19 text

electrumxのすごいところ ● 最初からオルトコインに対応できるように設計されている ● 現在30種類くらい対応 ● REST-APIじゃないので扱いにくいがアドレスウォッチ機能などプッシュ通知ができる

Slide 20

Slide 20 text

electrumxのつらみ ● 必要なデータを一度で取得できないのでいくつか組み合わせて使う ● トランザクションをデコードしてくれないので自分で解析する ● 定期的にメンテナンスが必要でダウンタイムが必要 ● HTTPではないのでwebから使うには変換する仕組みが必要 ● ウォレットを作るには十分だが他のことをやるにはいろいろ足りない

Slide 21

Slide 21 text

electrumxはオルトコインに対応しやすい? ● coins.pyに入っているコインは設定ファイルに記載するだけで対応できる ● 対応していないコインなら独自機能を定義する必要があるが同じ機能をほかのコイ ンが実装しているならそれを流用できる ● フォーク版作る必要がない(積極的にプルリクを取り込んでいる)

Slide 22

Slide 22 text

機能比較 対応表 機能 insight electrumx ウォレット実装しやすさ ◎ 〇 最新版への追従のしやすさ △ ◎ オルトコイン対応 △ ◎ エコシステムへの応用 〇 △

Slide 23

Slide 23 text

余談 ここで紹介したインフラ二つともビッグブロック支持なので ビットコインキャッシュは当然のように対応されます

Slide 24

Slide 24 text

ご清聴ありがとうございました 質問等あれば

Slide 25

Slide 25 text

おまけ ● electrumxのインストール手順(centos7) https://qiita.com/you21979@github/items/91d9362a63392ab69795 ● bitcore-nodeの導入方法(ブロックエクスプローラーinsightの導入方法) https://qiita.com/you21979@github/items/a0886460be33f31134b0 ※insightは記事が古いかもしれない