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
2.1k
Bitcoinにおける手数料の考え方
you21979
1
1.2k
トレーディングボットとは
you21979
0
410
Bitcoin x Javascript
you21979
1
420
Other Decks in Programming
See All in Programming
AIコーディングAgentとの向き合い方
eycjur
0
250
Langfuseと歩む生成AI活用推進
licux
3
320
CSC305 Summer Lecture 12
javiergs
PRO
0
130
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
18
9.7k
Honoアップデート 2025年夏
yusukebe
1
910
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
3
1.9k
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
120
AIエージェント開発、DevOps and LLMOps
ymd65536
1
380
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
180
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
17
7.8k
DockerからECSへ 〜 AWSの海に出る前に知っておきたいこと 〜
ota1022
5
1.9k
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
600
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Statistics for Hackers
jakevdp
799
220k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Docker and Python
trallard
45
3.5k
4 Signs Your Business is Dying
shpigford
184
22k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Done Done
chrislema
185
16k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
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は記事が古いかもしれない