Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ビットコインを支えるインフラについて
Search
Yuki Akiyama
December 12, 2017
Programming
3
3.7k
ビットコインを支えるインフラについて
Yuki Akiyama
December 12, 2017
Tweet
Share
More Decks by Yuki Akiyama
See All by Yuki Akiyama
Rippleアドレスについて
you21979
0
2k
Bitcoinにおける手数料の考え方
you21979
1
1.2k
トレーディングボットとは
you21979
0
400
Bitcoin x Javascript
you21979
1
400
Other Decks in Programming
See All in Programming
Serving TUIs over SSH with Go
caarlos0
0
660
ニーリーQAのこれまでとこれから
nealle
2
800
医療系ソフトウェアのAI駆動開発
koukimiura
1
100
生成AIで知るお願いの仕方の難しさ
ohmori_yusuke
1
120
Rubyの!メソッドをちゃんと理解する
alstrocrack
1
300
はじめてのPDFKit.pdf
shomakato
0
100
파급효과: From AI to Android Development
l2hyunwoo
0
160
Road to Ruby for A Linguistics Nerd
hayat01sh1da
PRO
0
240
Cursor/Devin全社導入の理想と現実
saitoryc
29
22k
Laravel × Clean Architecture
bumptakayuki
PRO
0
150
Ruby で作る RISC-V CPU エミュレーター / RISC-V CPU emulator made with Ruby
hayaokimura
5
1.1k
今話題のMCPサーバーをFastAPIでサッと作ってみた
yuukis
0
130
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
179
53k
The Cost Of JavaScript in 2023
addyosmani
49
7.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Practical Orchestrator
shlominoach
187
11k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Speed Design
sergeychernyshev
29
940
Art, The Web, and Tiny UX
lynnandtonic
298
20k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
A designer walks into a library…
pauljervisheath
205
24k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Transcript
ビットコインを支える インフラについて ビットコインとか勉強会#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は記事が古いかもしれない