跳至主要内容

整合快速入門

完整的整合包含五個部分。每個步驟都連結到說明精確格式的頁面,而且每種格式都有測試向量,讓你在拿起手機之前就能先驗證自己的程式碼。

1. 加入支援 UR 的 QR Code 掃描器​

除了純地址之外,BitTool Signer 的每個 QR Code 都是 Uniform Resource(UR):以 ur:<type>/ 開頭的文字。較大的酬載會以動態方式呈現:由一連串的幀共同承載資料。請使用 UR 解碼器,不要自行解析文字。

平台函式庫
JavaScript / TypeScript@ngraveio/bc-ur(BitTool Signer 所使用的函式庫)
SwiftURKit
Kotlin / JavaHummingbird
Rustur

將每一個掃描到的幀交給解碼器,直到它回報完成為止。幀可能以任意順序抵達,也可能重複。

2. 配對:匯入帳戶​

請使用者在 BitTool Signer 中開啟其錢包的 Connect(連線)。App 提供兩種配對 QR Code:

  • Wallet level(錢包層級):一個動態 ur:bytes QR 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. 建構簽名請求​

使用者要發送時,照常建構未簽名的交易,再將它包裝成該鏈的請求類型:

鏈請求內含資料
Bitcoinur:crypto-psbt每個輸入與找零輸出都帶有 bip32Derivation(指紋 + 完整路徑)的 PSBT
EVMur:eth-sign-request未簽名的 RLP 交易、EIP-712 JSON 或訊息位元組,加上路徑、指紋、chain ID 與地址
TRONur:tron-sign-requestraw_data protobuf 位元組,加上路徑、指紋與地址
Solanaur:sol-sign-request序列化後的訊息(而非交易),加上路徑、指紋與公鑰

以動態 QR Code 顯示請求。將未簽名的交易與一個隨機的請求 ID 存入待處理紀錄。請參閱透過 QR Code 簽名。

4. 掃描簽名​

BitTool Signer 會顯示每個欄位、要求輸入錢包密碼,並以 QR Code 顯示結果。掃描後,依下列順序檢查:

  1. UR 類型是預期的回應類型。
  2. 請求 ID 與你的待處理請求相符(Bitcoin:PSBT 內的未簽名交易未被更動)。
  3. 簽名能以預期的公鑰,針對你要求簽署的確切位元組驗證成功。

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)。