Skip to main content

BitTool Signer developer docs

For wallet developers

BitTool Signer turns a spare iPhone or Android phone into an offline signer. Its keys never leave that phone: your wallet exchanges QR codes with it, never network traffic. These docs describe every byte of that exchange, and the security design behind it, so you can add BitTool Signer to your own wallet.

How it works​

Your wallet stays online and does everything that needs a network: balances, fees, nonces, building transactions, broadcasting. BitTool Signer stays offline and does the one thing that needs a private key: it checks a request and signs it.

Your walletOnline, watch-only
BitTool SignerOffline, holds the keys
  1. 1Shows a pairing QR code: public keys only.
  2. ◀ ur:bytes · ur:crypto-account · ur:crypto-hdkey …
  3. 2Imports the accounts as a watch-only wallet and shows balances.
  4. 3Builds an unsigned transaction or message and shows it as a QR code.
  5. ur:crypto-psbt · ur:eth-sign-request · ur:tron-sign-request · ur:sol-sign-request ▶
  6. 4Decodes it, shows every field, asks for the wallet password, signs.
  7. ◀ ur:crypto-psbt · ur:eth-signature · ur:tron-signature · ur:sol-signature
  8. 5Verifies the signature, assembles the transaction and broadcasts it.

Everything on the wire is public data: extended public keys, addresses, unsigned transactions and signatures. A pairing QR code never contains a recovery phrase, a seed or a private key.

What you can integrate​

Supported chains and formats​

ChainPairing (coin level)Sign request → responseSigns
Bitcoinur:crypto-account (account xpub)ur:crypto-psbt → ur:crypto-psbt (also ur:psbt, BBQr, Base64)PSBT v0/v2: P2WPKH, P2TR, P2SH-P2WPKH, P2PKH, multisig
EVMur:crypto-hdkey (account xpub)ur:eth-sign-request → ur:eth-signatureLegacy, EIP-2930 and EIP-1559 transactions, personal_sign, EIP-712
TRONPlain addressur:tron-sign-request → ur:tron-signatureraw_data transactions, TIP-191 messages
Solanaur:crypto-multi-accountsur:sol-sign-request → ur:sol-signatureLegacy and v0 messages (no lookup tables), text messages

EVM signing covers eight networks: Ethereum (1), BNB Chain (56), Arbitrum One (42161), Base (8453), OP Mainnet (10), Polygon PoS (137), Gnosis (100) and Avalanche C-Chain (43114).

The transport is BC-UR: CBOR inside Bytewords, split into animated "fountain" frames when it does not fit one QR code. The request and response types are the ones in the public Keystone UR registry, so a wallet that already supports QR hardware signers needs very little new code. The one BitTool-specific format is the optional wallet-level pairing QR, which imports all four chains with a single scan.

Who these docs are for​

You should be comfortable with hex, Base58 and JSON, and know what an extended public key (xpub) and a derivation path are. Every page shows complete examples with real bytes, generated by the BitTool Signer engine from the public test phrase abandon … about. Implement against those examples first, then test with the app.

Test data only

The test phrase, addresses and transactions on this site are public. Anyone can spend from them. Never send funds to them.

Source code​

BitTool Signer is open source on both platforms: bittool-signer-ios and bittool-signer-android. Both apps run the same engine, so the QR formats and signatures on this site apply to either. The QR protocol code lives in engine/protocols.js; the per-chain parsers and signers are in engine/src/. The AI-assisted security reviews of version 1.0.0 on both platforms are published in full. Questions about integrating: support@bittool.com.