BlueWalletなど昨今のウォレットアプリでは、電子署名やアドレス生成部分などに関して外部のオープンソースな共通コンポーネントを利用してアプリ開発を行っています。開発の現場では、こうした共通の部品をライブラリと呼称します。
ライブラリは様々なプロジェクトに利用されることで、沢山の稼働実績がたまります。その結果、多くの動作不具合が修正され、とても品質の高い部品となります。
電子署名、アドレス生成部分などはセキュリティ上欠陥が許されない大事な部分です。もし自前で全部用意するとなると大変な開発コストがかかります(テスト検証のコストが半端ないです)。
アプリ開発を俯瞰したとき、より低コストで全体のクオリティを上げられるという意味で外部ライブラリを利用する意義は大いにあるといえます。
開発の現場は、こうしたライブラリ、不具合情報をやりとりするコミュニティなど様々な開発者向けエコシステムに支えられています。
今回は、エコシステムの中でもライブラリについて、特にビットコイン周りの世界で最近元気なものについてご紹介しようと思います。
BITCOINJS (BITCOINJS-LIB)
さて、まず最初にご紹介したいのは古株BitcoinJS (bitcoinjs-lib)です。
GitHub上の記録を辿ると2011年5月に最初のコミットがあり、かなり初期のころから存在しているようです。
公式サイト: https://github.com/bitcoinjs/bitcoinjs-lib
うたい文句: A javascript Bitcoin library for node.js and browsers. Written in TypeScript, but committing the JS files to verify.
出来ること: 鍵、ビットコインアドレスの生成、トランザクションの作成
提供スタイル: npmパッケージ (JavaScript)
ライセンス: MIT
GitHubスター数: 5.6k
GitHub上での利用プロジェクト数: 11.2k
最初のコミット: 2011年5月5日
利用ウォレット: BlueWallet
原の所感:
ウォレットに必要とされる機能の中でも特にコアな部分だけを機能提供するライブラリです。ブロックチェーン上の残高参照、送金トランザクション作成時のUTXO選択といった機能はなく、これらは外部ライブラリなどと組合わせて利用します。
npmパッケージで提供されており、SaaS、モバイル(React Native)でも動く点で勝手が良いです。
ドキュメントが存在せず、サンプルコードを参照しろ、というスタンスなのは玄人向けですね。
BITCOIN DEV KIT (BDK)
次にご紹介するのは2020年登場の期待の新星Bitcoin Dev Kit (BDK)。
何度も支払いをする際にアドレス再利用をする必要がない(サブスクリプションをやりやすい)支払いを可能にするBIP47に対応しそうな雰囲気で要注目です。
(関連プルリクエストを見てみると導入に関して揉めているようではあります https://github.com/bitcoindevkit/bdk/pull/574)
公式サイト: https://bitcoindevkit.org/
うたい文句: With BDK, you can seamlessly build cross platform mobile wallets
出来ること: 鍵、ビットコインアドレスの生成、複雑なトランザクションの作成、Descriptors対応、ウォレット管理
提供スタイル: Cargoパッケージ (Rust)
ライセンス: Apache 2.0 / MIT
GitHubスター数: 347
GitHub上での利用プロジェクト数: 統計なし
最初のコミット: 2020年1月23日
原の所感:
Rust製でしっかりした作りの印象です。Bitcoin Coreクライアント、Electrumクライアントまで内蔵しているので、残高参照などもお手の物で頼もしいです。WebAssembly経由でクロスプラットフォームでの利用に対応するようです。私はTypeScriptエコシステムにどっぷりなため、こちらのライブラリはまだ利用したことがないです。WebAssemblyを使ってアクセスできそうなので、どこかで時間を見つけてチャレンジしてみようと思います。
LIGHTNING DEV KIT (LDK)
こちらはBDKとセットで紹介されることの多いライブラリで、Lightning Network用のものとなります。Lightning NetworkのBOLT 1.0 標準規格に対応しています。
2021年末に米ブロック(旧スクエア)の暗号資産部門Spiralが発表したことで話題になりました。
ジャックドーシー人形のでてくる紹介動画までつくっちゃう力の入れようです。https://youtu.be/oOT78Bgy1Qw

公式サイト: https://lightningdevkit.org/
うたい文句: The simplest way to integrate Lightning into your Bitcoin wallet
出来ること: Lightning Nodeの作成、ウォレット管理、チャネルバックアップ
提供スタイル: Cargoパッケージ (Rust)
ライセンス: Apache 2.0 / MITGitHubスター数: 680
GitHub上での利用プロジェクト数: 統計なし
最初のコミット: 2018年2月17日
原の所感:
ビットコイナーなジャックが率いる巨大資本企業スクエアの後押しがある点で圧倒的です。いきなり開発が止まる、といった不安を感じさせないので安心して利用できそうです。BlueWalletはこちらをベースにReact Nativeバインディングをつくり活用しています。
https://github.com/BlueWallet/rn-ldk
現状、Lightning Network周りでLappsを作りたい方にとってはとても大きな存在かと思います。Rust製でモダンなので、Webフロントエンジニアからするとちょっとハードル高く見えるかもしれないですね。
TREZOR CONNECT
最後に、ちょっと変化球でハードウェアウォレットとの連携用ライブラリをご紹介します。
実はSatoshi Labs社のTrezorもLedger社のLedger Nano Sも、公式のライブラリが存在します。
ここではTrezorの提供するTrezor Connectをご紹介しようと思います。
公式サイト: https://wiki.trezor.io/Trezor_Connect
うたい文句: A platform for easy integration of Trezor into 3rd party services
出来ること: Trezorを使った電子署名、ユーザー認証
提供スタイル: npmパッケージ (JavaScript)
ライセンス: TREZOR REFERENCE SOURCE LICENSE
GitHubスター数: 330
GitHub上での利用プロジェクト数: 1.5k
最初のコミット: 2018年3月2日
原の所感:
ハードウェアウォレットTrezorと連携するウォレットやSaaSを作る際にはほぼ必須なライブラリです。公式Wikiを見てもらうと分かるのですが、かなりシンプルな構成です。getPublicKey, getAddress, signMessage, verifyMessage, signTransactionだけなんですね。https://wiki.trezor.io/Developers_guide:Trezor_Connect...
シンプルな構成は全体像が把握しやすい点で好感度高いです。
1500プロジェクトで利用されているのにもかかわらず、GitHub IssuesにOpenなものが0件というメンテナンス具合が凄いです。
ちょっとそれますが、彼らは電子回路基板まで公開しています。
【2021/05/26】Trezor Oneの電子回路基板
ライブラリではないですが、リファレンス実装としてエコシステムに大変な貢献をしています。
まとめ
ビットコインウォレット開発の際に役立つライブラリをご紹介しました。
他にも沢山優秀で便利なものが存在するかと思います。ご存じの方は是非ご紹介下さい。研究所にて改めて整理し、どこかでまとめたいと思います。
さて、こうしたライブラリを活用することで、少しだけコードを書くことでビットコインブロックチェーンにアクセスできちゃうのは凄いことです。
Derivation Path(m/44’/0’/0/0/0とかってやつ)が特殊、ニモニックが何故か英単語ではない等のマニアックウォレットを使ってたけど開発が停止した!とか不足の事態に遭遇しても安心です。
ニモニックとライブラリとちょっとしたコーディングとでブロックチェーンに送金トランザクションを送って資産を回収できたりします。
エンジニアじゃないとちょっとハードルが高く感じますが、解決法として事業者頼みではない選択肢があるってところがポイントです。
これって既存金融では考えられないことですよね。
