Skip to main content
TRUST (Travel Rule Universal Solution Technology) is a Travel Rule network. Before TRUST accepts Travel Rule data for an address, you prove that you control it; Fireblocks signs that proof with Typed Message Signing, which shows exactly what is being signed instead of an opaque payload. TRUST is free, available to every workspace, and works alongside any other Travel Rule provider. It is set up through the API only and has no screening policy.

What you can do through the API

Step 1: Set up the Fireblocks SDK

Install the Fireblocks SDK in your system; proofs are created and retrieved from your code. See TypeScript SDK.

Step 2: Get a UUID from TRUST

Request address ownership in TRUST (CreateAddressOwnership). TRUST returns a UUID that ties the proof to your request.

Step 3: Create the proof of address

Accepts an optional Idempotency-Key header, valid for 24 hours. The request returns 400 if you send address for an asset other than BTC or BTC_TEST, or if the address does not belong to the vault account for this asset.
The proof is a typed message signing transaction. It follows the standard transaction statuses and your workspace’s Policies for approval and signing.

Prove a derived address (UTXO-based assets)

By default, Fireblocks proves the default address of the asset wallet. For UTXO-based assets (BTC and BTC_TEST), an asset wallet can have several deposit addresses. To prove one of the others, a derived address, pass it as address.
  1. List the addresses of the asset wallet with Get addresses (Paginated). Copy the address you want to prove, exactly as listed.
  2. Create the proof with that address:
Fireblocks signs the message prefix + address + trustUuid, with no separators, using the key of that address. Both the SegWit and the Legacy form of an address are accepted. You cannot choose your own derivation path: only addresses that already exist in the vault account can be proven.

Step 4: Retrieve the signature and submit it to TRUST

Poll the GET endpoint with the transactionId from Step 3 until the transaction is signed. It always returns 200 with transactionId and status; signature and publicKey are included only once the transaction is signed. TRUST requires the publicKey for SUI, TON, and XTZ. For BTC and BTC_TEST, the signature is Base64 text of v, r, and s (65 bytes), where v is the recovery value plus 31. The proof is complete when TRUST responds VALID.

Supported blockchains

Testnet variants of these chains are also supported, for example ETH_TEST5 and BTC_TEST.

Limitations

  • Proof of address uses the default address of the vault account. For BTC and BTC_TEST, you can prove a derived address of the vault account with address. For other assets, other deposit addresses cannot be verified.
  • Only addresses that already exist in the vault account can be proven. You cannot set a custom derivation path.
  • TRUST has no screening policy; it covers proof of address only.
  • TRUST is an external network, not operated by Fireblocks.

On the Help Center

For how TRUST proof of address works, see TRUST.