Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ビットコインを支えるインフラについて
Search
Yuki Akiyama
December 12, 2017
Programming
3.9k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ビットコインを支えるインフラについて
Yuki Akiyama
December 12, 2017
Transcript
25 slides
ビットコインを支える インフラについて ビットコインとか勉強会#13 2017/12/11 Yuki Akiyama
自己紹介 名前: Yuki Akiyama (ゆあ) twitter : @you21979 所属:ビットバンク株式会社 好きな動物:
ペンギン お仕事など: 新卒のころは証券システム開発 ちょっと前までオンラインゲームやスマホのゲーム開発 今は取引所で暗号通貨のインテグレーションをしています
暗号通貨アドベントカレンダー 開催中です。 埋まっていないので 勉強中のことでもよいので、書いてみたい人! よろしくお願いします https://qiita.com/advent-calendar/2017/cryptocurrencies
そもそなぜインフラがいるのか ビットコインのインフラというとbitcoindがまず思い浮かびますが ウォレットシステムを最初に作ろうとすると最初につまずくことがあります bitcoindのウォレットで管理しているアドレス以外入金データを取得する方法が標準で提 供されていないのです bitcoin-rpcにあるlistunspentのようなコマンドが管理外アドレスでは使えないのです。
入金確認で期待されるインターフェイス • ビットコインアドレスを指定して、未使用のトランザクション(UTXO)一覧を取得する • 新規のUTXOを発見したら、一定の検証数を確認するまで保留し、確認後入金処 理をする
入金確認で期待されるインターフェイス • ビットコインアドレスを指定して、未使用のトランザクション(UTXO)一覧を取得する • 新規のUTXOを発見したら、一定の検証数を確認するまで保留し、確認後入金処 理をする ビットコインアドレスを指定するところから 標準の方法ではサポートされていない
できているよ? でも世の中にはWEBやスマートフォンで動くウォレットがあり 自分で秘密鍵を管理しアドレスを外部から問い合わせて残高が取得できている
今日話すこと これを解決するプロダクトとして代表的な二つのOSSプロダクトがある • insight • electrumx どちらも端末側でウォレットを動かすためのバックエンドサーバーです
insight オープンソースなブロックエクスプローラとして有名 作者はペイメントプロセッサーのBitpay Nodejsで作られている REST-APIで情報を取得できる ハードウェアウォレットのTrezorがWEBウォレットのバックエンドに使っている
insightのクライアントソフト達
insight 基本的に以下の5つの部品から構成されている • 魔改造版bitcoind (insightを動かすために改造されたbitcoind) • bitcore-lib (ビットコインのライブラリ) • bitcore-node
(utxoのデータベース) • insight-ui (ブロックエクスプローラの画面) • insight-api (REST-API)
insightのすごいところ • REST-APIである https://insight.bitpay.com/api/addrs/bitcoin_address/utxo 必要なデータは大体一回のリクエストでとれる • メンテ不要 • ブロックエクスプローラがついている •
マルチプラットホームのウォレットをホスティングできる • プラグインシステムなのでbitcoindからデータを受け取って集計するシステムを簡 単に作れる
insightのつらみ • まだsegwitに対応していない(v5から対応) • bitcoindが魔改造版なので最新版に追従しにくい(最新版を使うには自分でパッチ を当てる必要がある) • 次期バージョンでは魔改造版からbcoinに変更 • データベースがでかい(来年にはbitcoindと合わせて500GB突破しそう)
• しばらく開発が滞ってた(最近はまた活発)
insightはオルトコイン対応のしやすい? チェインパラメータを対応する(値変えるだけで簡単) segwitに対応したコインならそれに対応 (そこそこめんどい) 魔改造版bitcoindをパッチを当てて作る(大変) モナで試した人がいて10日くらいかかってました(でも少し不安定)
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は結構不安定だったりするので動いたらラッキーくらいに。
electrumx ウォレットソフトのelectrumのサーバーサイド実装 以前はオルタナティブな実装だったが正式にelectrumの後継サーバーとなった 作者はkyuupichan Python3で作られている tcp接続にてAPIサーバーとして扱える
electrumのクライアントソフト達
electrumx 基本的に三つの部品から構成されている • bitcoind (通常のcoind) • electrumx_server (utxoのデータベース) • compact_history
(データベースメンテナンスツール)
electrumxのすごいところ • 最初からオルトコインに対応できるように設計されている • 現在30種類くらい対応 • REST-APIじゃないので扱いにくいがアドレスウォッチ機能などプッシュ通知ができる
electrumxのつらみ • 必要なデータを一度で取得できないのでいくつか組み合わせて使う • トランザクションをデコードしてくれないので自分で解析する • 定期的にメンテナンスが必要でダウンタイムが必要 • HTTPではないのでwebから使うには変換する仕組みが必要 •
ウォレットを作るには十分だが他のことをやるにはいろいろ足りない
electrumxはオルトコインに対応しやすい? • coins.pyに入っているコインは設定ファイルに記載するだけで対応できる • 対応していないコインなら独自機能を定義する必要があるが同じ機能をほかのコイ ンが実装しているならそれを流用できる • フォーク版作る必要がない(積極的にプルリクを取り込んでいる)
機能比較 対応表 機能 insight electrumx ウォレット実装しやすさ ◎ 〇 最新版への追従のしやすさ △
◎ オルトコイン対応 △ ◎ エコシステムへの応用 〇 △
余談 ここで紹介したインフラ二つともビッグブロック支持なので ビットコインキャッシュは当然のように対応されます
ご清聴ありがとうございました 質問等あれば
おまけ • electrumxのインストール手順(centos7) https://qiita.com/you21979@github/items/91d9362a63392ab69795 • bitcore-nodeの導入方法(ブロックエクスプローラーinsightの導入方法) https://qiita.com/you21979@github/items/a0886460be33f31134b0 ※insightは記事が古いかもしれない
More Decks by Yuki Akiyama
See All by Yuki Akiyama
Rippleアドレスについて
you21979
0
2.1k
Bitcoinにおける手数料の考え方
you21979
1
1.2k
トレーディングボットとは
you21979
0
440
Bitcoin x Javascript
you21979
1
440
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
290
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
220
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
850
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
Crash Auto Pipelines
veronikapj
1
410
Rails初心者がパスキーを実装してみて大変だったこと
ktombow
0
180
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
AI Augmentation Techniques with Liberty
ivargrimstad
1
470
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
260
Growing PicoRuby's Ecosystem on ESP32
yuuu
2
120
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
How GitHub (no longer) Works
holman
316
150k
Typedesign – Prime Four
hannesfritz
42
3.2k
Building Adaptive Systems
keathley
44
3.3k
RailsConf 2023
tenderlove
30
1.6k
Scaling GitHub
holman
464
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
790
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
Automating Front-end Workflow
addyosmani
1370
210k
Abbi's Birthday
coloredviolet
5
11k
Designing Experiences People Love
moore
143
24k