整合快速入門
完整的整合包含五個部分。每個步驟都連結到說明精確格式的頁面,而且每種格式都有測試向量,讓你在拿起手機之前就能先驗證自己的程式碼。
1. 加入支援 UR 的 QR Code 掃描器
除了純地址之外,BitTool Signer 的每個 QR Code 都是 Uniform Resource(UR):以 ur:<type>/ 開頭的文字。較大的酬載會以動態方式呈現:由一連串的幀共同承載資料。請使用 UR 解碼器,不要自行解析文字。
| 平台 | 函式庫 |
|---|---|
| JavaScript / TypeScript | @ngraveio/bc-ur(BitTool Signer 所使用的函式庫) |
| Swift | URKit |
| Kotlin / Java | Hummingbird |
| Rust | ur |
將每一個掃描到的幀交給解碼器,直到它回報完成為止。幀可能以任意順序抵達,也可能重複。
2. 配對:匯入帳戶
請使用者在 BitTool Signer 中開啟其錢包的 Connect(連線)。App 提供兩種配對 QR Code:
- Wallet level(錢包層級):一個動態
ur:bytesQR Code,包含 Bitcoin(四種地址類型)、EVM、TRON 以及三個 Solana 地址。最適合多鏈錢包。請參閱錢包層級 QR Code。 - Coin level(幣種層級):每條鏈一個標準 QR Code(
ur:crypto-account、ur:crypto-hdkey、ur:crypto-multi-accounts或純地址),與其他 QR 簽名器使用的格式相同。請參閱幣種層級 QR Code。
儲存帳戶 xpub(或 Solana 地址)、其衍生路徑以及 主指紋(master fingerprint)。建構簽名請求時三者缺一不可。顯示每個帳戶的第一個地址,並請使用者與 BitTool Signer 在 QR Code 下方顯示的地址核對。
3. 建構簽名請求
使用者要發送時,照常建構未簽名的交易,再將它包裝成該鏈的請求類型:
| 鏈 | 請求 | 內含資料 |
|---|---|---|
| Bitcoin | ur:crypto-psbt | 每個輸入與找零輸出都帶有 bip32Derivation(指紋 + 完整路徑)的 PSBT |
| EVM | ur:eth-sign-request | 未簽名的 RLP 交易、EIP-712 JSON 或訊息位元組,加上路徑、指紋、chain ID 與地址 |
| TRON | ur:tron-sign-request | raw_data protobuf 位元組,加上路徑、指紋與地址 |
| Solana | ur:sol-sign-request | 序列化後的訊息(而非交易),加上路徑、指紋與公鑰 |
以動態 QR Code 顯示請求。將未簽名的交易與一個隨機的請求 ID 存入待處理紀錄。請參閱透過 QR Code 簽名。
4. 掃描簽名
BitTool Signer 會顯示每個欄位、要求輸入錢包密碼,並以 QR Code 顯示結果。掃描後,依下列順序檢查:
- UR 類型是預期的回應類型。
- 請求 ID 與你的待處理請求相符(Bitcoin:PSBT 內的未簽名交易未被更動)。
- 簽名能以預期的公鑰,針對你要求簽署的確切位元組驗證成功。
5. 組裝並廣播
將簽名填入交易(EVM:r、s、v;TRON:附加到 signature[];Solana:放入該簽名者的簽名位置;Bitcoin:完成(finalize)PSBT),然後廣播。BitTool Signer 從不廣播交易,也永遠不會知道交易是否已送出。
不用手機也能測試
本站所有範例都來自 BitTool Signer 引擎,並使用以下公開的測試助記詞:
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
在測試裝置上將它匯入 BitTool Signer(或匯入你自己的測試中),你應該會看到與本文件完全相同的地址、QR Code 與簽名。可從測試向量下載全部資料。
- 動態 QR Code 在兩個方向都能掃描,即使漏掉某一幀也一樣。
- 使用者在收款前,能核對每個帳戶的第一個地址。
- 每個回應在廣播前都經過驗證;屬於其他請求的回應會被拒絕。
- 對 SegWit v0 與 legacy 輸入,Bitcoin 輸入帶有完整的前一筆交易(
nonWitnessUtxo)。 - Solana 交易使用靜態帳戶金鑰(不使用 address lookup table)。