ビットコインJS (bitcoinjs-lib)
Node.js およびブラウザ用の純粋な JavaScript ビットコイン ライブラリ。推定 1,500 万人以上のウォレット ユーザーによって使用されており、現在運用されているほぼすべてのビットコイン Web ウォレットのバックボーンです。
特徴
- Clean: 純粋な JavaScript、簡潔なコード、読みやすい。
- Tested: カバレッジ > 90%、サードパーティ統合テスト。
- Careful: 小規模で焦点を絞ったプル リクエストの 2 人による承認プロセス。
- Compatible: Node.js およびすべての最新のブラウザーで動作します。
- Powerful: マルチシグ、HD ウォレットなどの高度な機能のサポート。
- Secure: 強力な乱数生成、PGP 署名付きリリース、信頼できる開発者。
- Principled: クソ RNG を備えたブラウザはサポートされません (IE < 11)
- Standardized: ノード コミュニティのコーディング スタイル、Browserify、ノードの stdlib およびバッファ。
- Fast: 最適化されたコード。パフォーマンスのためにバイト配列の代わりに型付き配列を使用します。
- 実験しやすい: ビットコインのメインネットとテストネットのサポート。
- アルトコイン対応: ビットコイン由来の暗号通貨 (ドージコインなど) を操作できます。
これを運用環境で使用する必要がありますか?
このライブラリの master ブランチを運用環境で使用することを考えている場合は、 を停止してください。Master は安定していません。これは開発ブランチであり、タグ付けされたリリースのみが安定したものとして分類される可能性があります。
インストール
1npm install bitcoinjs-lib
設定
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
browserify の使用方法に慣れている場合は、これを無視して通常どおりに進んでください。これらの手順は単なる参考であり、アプリケーションには適していない可能性があります。
これらの手順では、 Browserify がインストールされていることを前提としています。
プロジェクト用にindex.js
ファイルを作成します
1
2
3
4
5
6
7
8
9
10let bitcoin = require('bitcoinjs-lib')
// your code here
function myFunction () {
return bitcoin.ECPair.makeRandom().toWIF()
}
module.exports = {
myFunction
}
次に、ブラウザ用にコンパイルするには、次のようにします。
1browserify index.js --standalone foo > app.js
新しいビットコイン秘密キーを作成するために<script src="app.js" />
使用する Web ページを配置できるようになりました。foo.myFunction
注: JavaScript を醜悪にする場合は、変数名BigInteger
、ECPair
、を除外する必要があります。これは、 typeforcePoint
で使用される function-name-duck-typing が原因です。
例:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
注: このライブラリは Node LTS 機能を追跡します。厳密な ES5 が必要な場合は、ステップ--transform babelify
と組み合わせて使用してくださいbrowserify
(es2015
プリセットを使用)。
注: このライブラリを iOS 10 デバイスで実行することを想定している場合は、buffer@5.0.5以降を使用していることを確認してください。
Typescript or VSCode users
^3.0.0
Typescript の型宣言は、ライブラリのバージョンで使用できます。
1npm install @types/bitcoinjs-lib
bitcoinjs-lib
Typescript 準拠のライブラリとして使用できるようになりました。
1import { HDNode, Transaction } from 'bitcoinjs-lib'
VSCode (およびその他のエディター) の場合、Intellisense はその情報を使用してコーディング (オートコンプリート、静的分析) を支援するため、ユーザーは型宣言をインストールすることをお勧めします。
typescript 関連のバグは@dlebrecht DefinitelyTyped フォークで報告し、PR をDefinitelyTypedに送信してください。
Flow
フロー タイプチェッカーの定義は、フロー タイプ リポジトリで利用できます。
リポジトリから直接ダウンロードすることも、フロータイプの CLI を使用してダウンロードすることもできます。
1
2# npm install -g flow-typed
$ flow-typed install -f 0.27 bitcoinjs-lib@2.2.0 # 0.27 for flow version, 2.2.0 for bitcoinjs-lib version
定義は完全で、バージョン 2.2.0 で最新です。定義は@runn1ngによって維持されます。
例
以下の例は統合テストとして実装されており、非常に理解しやすいはずです。それ以外の場合は、プル リクエストを歓迎します。一部の例は、(HTTPS 経由で) サードパーティ ブロックチェーン プロバイダー (3PBP) と対話します。
- ランダムなアドレスを生成する
- SHA256 ハッシュからアドレスを生成する
- WIF経由でアドレスをインポートする
- 2-of-3 P2SH マルチシグ アドレスを生成する
- SegWitアドレスを生成する
- SegWit P2SH アドレスを生成する
- SegWit 3-of-4 マルチシグ アドレスを生成する
- SegWit 2-of-2 P2SH マルチシグ アドレスを生成する
- アドレスのトランザクションの取得をサポート (サードパーティのブロックチェーン)
- テストネットアドレスを生成する
- ライトコインアドレスを生成する
- 1対1のトランザクションを作成する
- 2対2トランザクションを作成する
- 典型的なトランザクションを作成 (および 3PBP 経由でブロードキャスト)
- OP_RETURN 出力を持つトランザクションを作成 (および 3PBP 経由でブロードキャスト)
- 2-of-4 P2SH(マルチシグ)入力を使用してトランザクションを作成 (および 3PBP 経由でブロードキャスト)
- SegWit P2SH(P2WPKH) 入力を使用してトランザクションを作成 (および 3PBP 経由でブロードキャスト)
- SegWit 3-of-4 P2SH(P2WSH(multisig)) 入力を使用してトランザクションを作成 (および 3PBP 経由でブロードキャスト)
- BIP32 テストネット xpriv をインポートし、WIF にエクスポートする
- BIP32 xpriv をエクスポートしてからインポートする
- BIP32 xpub をエクスポートする
- BIP32、ビットコイン、アカウント 0、外部アドレスを作成する
- BIP44、ビットコイン、アカウント 0、外部アドレスを作成する
- BIP49、ビットコインテストネット、アカウント0、外部アドレスを作成する
- BIP39 を使用して BIP32 アドレスを生成する
- 期限切れ後にアリスが出力を引き換えることができるトランザクションを作成します (そして 3PBP 経由でブロードキャストします)。
- アリスとボブがいつでも出力を引き換えることができるトランザクションを作成 (そして 3PBP 経由でブロードキャスト)
- 有効期限が切れる前にアリスが引き換えを試みるトランザクションを作成します (ただし、3PBP 経由でブロードキャストは失敗します)。
- 重複した R 値から秘密キーを回復する
- 親公開キーから BIP32 親秘密キーを回復し、派生した強化されていない子秘密キーを回復します。
- 単一キーのステルス アドレスを生成する
- 単一キーのステルス アドレスを (ランダムに) 生成します。
- 派生秘密キーが漏洩した場合 (およびナンスが明らかになった場合)、親のrecipient.dを回復します。
- デュアルキーステルスアドレスを生成する
- デュアルキー ステルス アドレスを (ランダムに) 生成します。
ここに掲載できると思われるユースケースがございましたら、お問い合わせください。
BitcoinJSを活用したプロジェクト
- ビットアドレス
- ブロックチェーン情報
- ブロックトレイル
- ダークウォレット
- 分散銀行
- ドージチェーンウォレット
- EI8HTウォレット
- グリーンアドレス
- ヘルパービット
- メリスウォレット
- ロボコイン
- スカイフックATM
- Coinbase マルチシグツール
貢献する
私たちはプル リクエストを常に受け付けていますが、コーディング スタイル、テスト駆動開発、コミット メッセージに関しては特定の標準を遵守しています。
些細な修正を省くために、貢献する際にはこれらを遵守するよう最善の努力を払ってください。
Running the test suite
1
2npm test
npm run-script coverage
補完ライブラリ
- BIP21 - BIP21 互換の URL エンコード ライブラリ
- BIP38 - パスフレーズで保護された秘密鍵
- BIP39 - 確定キーのニーモニック生成
- BIP32-Utils - BIP32 を操作するためのユーティリティのセット
- BIP66 - 厳密な DER 署名のデコード
- BIP68 - 相対ロック時間エンコーディング ライブラリ
- BIP69 - トランザクションの入出力の辞書編集的索引付け
- Base58 - Base58 エンコード/デコード
- Base58 チェック- Base58 チェックのエンコード/デコード
- Bech32 - BIP173 準拠の Bech32 エンコード ライブラリ
- Coinselect - bitcoinjs-lib の手数料を最適化するトランザクション入力選択モジュールです。
- merkle-lib - マークル ルートとツリーの計算のためのパフォーマンスを重視したライブラリです。
- minimumdata - ビットコインポリシーをチェックするモジュール: SCRIPT_VERIFY_MINIMALDATA