統合クイックスタート
完全な統合は 5 つの要素で構成されます。各ステップから正確なフォーマットを説明したページにリンクしており、どのフォーマットにもテストベクターが用意されているので、実機に触れる前にコードを検証できます。
1. UR に対応した QR スキャナーを追加する
BitTool Signer の QR コードは、プレーンなアドレスを除き、すべて Uniform Resource (UR) です。これは ur:<type>/ で始まるテキストです。大きなペイロードはアニメーション表示され、複数のフレームが連なってデータを運びます。テキストを自前でパースせず、UR デコーダーを使ってください。
| プラットフォーム | ライブラリ |
|---|---|
| JavaScript / TypeScript | @ngraveio/bc-ur(BitTool Signer が使用) |
| Swift | URKit |
| Kotlin / Java | Hummingbird |
| Rust | ur |
スキャンしたフレームは、デコーダーが完了を報告するまですべて渡し続けます。フレームは順不同で届き、重複することもあります。
2. ペアリング:アカウントをインポートする
BitTool Signer で対象ウォレットの Connect(接続)画面を開くよう、ユーザーに依頼します。ペアリング QR コードは 2 種類あります。
- Wallet level(ウォレットレベル):Bitcoin(4 種類のアドレスタイプ)、EVM、TRON、3 つの Solana アドレスをまとめた、1 つのアニメーション
ur:bytesQR コード。マルチチェーンウォレットに最適です。ウォレットレベル QR を参照してください。 - Coin level(コインレベル):チェーンごとに 1 つの標準 QR コード(
ur:crypto-account、ur:crypto-hdkey、ur:crypto-multi-accounts、またはプレーンなアドレス)。他の QR 署名デバイスと同じフォーマットです。コインレベル QR を参照してください。
アカウントの xpub(Solana の場合はアドレス)、その導出パス、そして マスターフィンガープリント を保存してください。署名リクエストの作成には、この 3 つすべてが必要です。各アカウントの最初のアドレスを表示し、BitTool Signer が QR コードの下に表示するアドレスと照合するようユーザーに促してください。
3. 署名リクエストを作成する
ユーザーが送金するときは、通常どおり未署名トランザクションを作成し、それをチェーンごとのリクエスト型で包みます。
| チェーン | リクエスト | 中身 |
|---|---|---|
| Bitcoin | ur:crypto-psbt | すべてのインプットとおつり出力に bip32Derivation(フィンガープリント + フルパス)を持つ PSBT |
| EVM | ur:eth-sign-request | 未署名の RLP トランザクション、EIP-712 JSON、またはメッセージのバイト列に、パス、フィンガープリント、チェーン ID、アドレスを加えたもの |
| TRON | ur:tron-sign-request | raw_data の protobuf バイト列に、パス、フィンガープリント、アドレスを加えたもの |
| Solana | ur:sol-sign-request | シリアライズしたメッセージ(トランザクションではない)に、パス、フィンガープリント、公開鍵を加えたもの |
リクエストをアニメーション QR コードとして表示します。未署名トランザクションとランダムなリクエスト ID は、保留中レコードとして保持しておきます。QR による署名 を参照してください。
4. 署名をスキャンする
BitTool Signer はすべてのフィールドを表示し、ウォレットパスワードを求めたうえで、結果を QR コードとして表示します。それをスキャンし、次の順序で確認してください。
- UR の型が、期待するレスポンス型であること。
- リクエスト ID が保留中のリクエストと一致すること(Bitcoin の場合:PSBT 内の未署名トランザクションが変更されていないこと)。
- 署名が、期待する公開鍵と、署名を依頼したバイト列そのものに対して検証できること。
5. 組み立ててブロードキャストする
署名をトランザクションに挿入し(EVM:r、s、v、TRON:signature[] に追加、Solana:署名者のスロットに格納、Bitcoin:PSBT をファイナライズ)、ブロードキャストします。BitTool Signer がブロードキャストすることはなく、トランザクションが送信されたかどうかを知ることもありません。
実機なしでテストする
このサイトの例はすべて、公開テストフレーズを使って BitTool Signer のエンジンで生成したものです。
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
これをテスト端末の BitTool Signer(または自分のテスト)にインポートすると、このドキュメントに掲載しているアドレス、QR コード、署名とまったく同じものが得られるはずです。すべて テストベクター からダウンロードできます。
- アニメーション QR コードが、フレームを取りこぼした後も含め、双方向でスキャンできる。
- ユーザーが資金を受け取る前に、すべてのアカウントの最初のアドレスを照合できる。
- すべてのレスポンスをブロードキャスト前に検証し、別のリクエストに対するレスポンスは拒否する。
- SegWit v0 とレガシーのインプットでは、Bitcoin インプットに前のトランザクション全体(
nonWitnessUtxo)を含める。 - Solana トランザクションは静的なアカウントキーを使う(アドレスルックアップテーブルなし)。