For Fireblocks setup, API keys, and vault configuration, see the Fireblocks Developer Docs.
How It Works
to, data, and gas parameters. You pass the to address and data to Fireblocks as a CONTRACT_CALL, and Fireblocks handles signing, gas estimation, and broadcasting.
Prerequisites
- A Fireblocks workspace with API access
- A vault account with an EVM asset (e.g.,
ETH_TEST5for testnet,ETHfor mainnet) - The vault’s deposit address registered as a wallet in RebelFi
fireblocks-sdkinstalled:npm install fireblocks-sdk
Vault-to-Wallet Mapping
Your Fireblocks vault account has a deposit address for each asset. This address is what you register with RebelFi:The Fireblocks Signer
The core of the integration is a function that takes RebelFi’s unsigned transaction fields and submits them through Fireblocks:Fireblocks handles gas estimation and broadcasting. You pass
amount: '0' because the contract call itself doesn’t transfer native tokens — it interacts with an ERC-20 contract.Supply Example
EVM supply operations produce two transactions: a token approval and the protocol deposit. Sign and submit them sequentially through Fireblocks:What Happens Step by Step
Plan the supply
Call
operations.supply() with your wallet, strategy, amount, and token address. RebelFi returns an operation with status AWAITING_SIGNATURE.Fetch unsigned transactions
Call
operations.getUnsignedTransactions() to get fresh unsigned transactions. For EVM supply, you’ll get two:- Transaction 1: Token approval (
approvecall on the ERC-20 contract) - Transaction 2: Supply to protocol (deposit into the yield strategy)
Sign via Fireblocks
For each unsigned transaction, create a Fireblocks
CONTRACT_CALL with the to address and data field. Fireblocks signs with MPC, applies your policy rules, and broadcasts on-chain.Submit hash to RebelFi
Once Fireblocks confirms the transaction, take the
txHash and submit it to RebelFi via transactions.submitHash(). Include the transactionId to identify which transaction in the operation you’re submitting.Unwind Example
Unwinding (withdrawing from a yield strategy) follows the same pattern:Troubleshooting
No deposit address found
No deposit address found
Cause: The EVM asset hasn’t been added to your Fireblocks vault account.Solution: In the Fireblocks console, go to your vault account and add the asset (e.g., ETH, ETH_TEST5). Then fetch the deposit address.
Transaction REJECTED or BLOCKED
Transaction REJECTED or BLOCKED
Cause: Fireblocks policy engine rejected the transaction.Solution: Check your Transaction Authorization Policy (TAP) rules in the Fireblocks console. The
CONTRACT_CALL to a ONE_TIME_ADDRESS may need explicit approval or a policy rule allowing it.Transaction timed out
Transaction timed out
Cause: Fireblocks transaction took too long to reach a terminal status.Solution: Check the transaction status in the Fireblocks console. It may be pending human approval (if your policy requires it). Increase
MAX_POLL_ATTEMPTS if your approval flow takes longer.Wallet address mismatch
Wallet address mismatch
Cause: The vault deposit address doesn’t match the wallet registered with RebelFi.Solution: Use
fireblocks.getDepositAddresses(vaultAccountId, assetId) to get the correct address, and ensure that’s the address registered with RebelFi.