Fireblocks supports holding, receiving, and sending Soroban-based Stellar tokens, and sending to and receiving from Stellar contract addresses. This article explains how Soroban tokens behave in your workspace, how contract addresses work as transfer destinations, and what is not yet supported.
Availability: Soroban token and contract address support is enabled in all testnet workspaces and is in Early Availability (EA) mode on mainnet. To enable it for your mainnet workspace, contact your Customer Success Manager.
Soroban is the smart contract platform on the Stellar network. SEP-41(Stellar Ecosystem Proposal 41) is the Soroban Token Interface, the Stellar standard that defines the set of functions a Soroban token contract implements.
Stellar asset types
Stellar assets come in three types. A classic asset is identified by an issuer address and an asset code. It can also have a Stellar Asset Contract, a built-in contract the Stellar network provides for each classic asset, which lets it reach contract addresses after the contract is deployed. A SEP-41 token is issued as its own Soroban contract, with no classic asset behind it.
| Classic asset | Classic asset with a Stellar Asset Contract | SEP-41 token | |
|---|---|---|---|
| Availability in Fireblocks | All workspaces | Account addresses: all workspaces. Contract addresses: all testnet workspaces, and mainnet workspaces enabled by your Customer Success Manager | All testnet workspaces, and mainnet workspaces enabled by your Customer Success Manager |
| Identified by | Issuer address and asset code | Issuer address and asset code, plus its contract address | Contract address (C…) |
| Held in an account address (G…), including Fireblocks wallets | Requires a trustline | Requires a trustline | No trustline. Balance is kept in the token contract |
| Held in a contract address (C…) | Not possible | No trustline. Balance is kept by the Stellar Asset Contract | Balance is kept in the token contract |
| Sent to an account address (G…) | Classic payment | Classic payment | Soroban contract transfer |
| Sent to a contract address (C…) | Not possible | Soroban contract transfer through its Stellar Asset Contract | Soroban contract transfer |
| Received from a contract address (C…) | Not possible | Supported | Supported |
| Memos | Supported | Supported when sent to an account address. Not yet supported when sent to a contract address | Not yet supported |
Fireblocks wallets are account addresses (G…) only. We do not create wallets at contract addresses, so the "Held in a contract address" row describes your counterparties, not your own wallets.
A classic asset keeps one balance in your wallets whether it moves as a classic payment or through its Stellar Asset Contract. The contract is another way to move it, not a second token.
A separately issued SEP-41 token can share a name or symbol with a classic asset. They are different assets with separate balances, so verify the contract address before you use the token.
You need lumens (XLM) in the relevant vault account to pay transaction fees.
Sending Soroban tokens
Send a Soroban token the same way you send any other asset, using the New Transfer dialog. Select + Transfer in the top-right corner of the Fireblocks Console, or select Withdraw from the asset wallet to open the dialog with the asset and account already filled in.
The destination can be a Stellar account address (G…) or a Stellar contract address (C…). We reject any other address format..
Policies govern Soroban transfers exactly as they govern every other transfer.
Memos
Memos are not yet supported for SEP-41 token transfers or for transfers to contract addresses.
How Fireblocks routes the transfer
We pick the cheaper of two routes for you:
- When the destination is a G… account address and the token also exists as a classic Stellar asset, we send a classic payment, which costs less.
- Otherwise, we send a Soroban contract transfer, which costs more.
You do not choose the route. The transfer behaves the same either way; only the cost differs.
Fees
The Stellar network calculates Soroban transaction fees from the computing resources the transaction consumes, not from the flat base fee that classic Stellar transactions use. We estimate the fee before you submit the transfer.
Receiving Soroban tokens
You do not need to take any action to receive Soroban tokens. Deposits appear in the matching asset wallet, whether they arrive from a G… account or a C… contract address.
Contract addresses as destinations
A Stellar contract address is a transfer destination, not an asset wallet in your workspace. The contract itself can be a smart contract wallet on Stellar, but we do not create an asset wallet or vault account for it, so its balance is not visible in your workspace. To check what a contract holds, use a Stellar block explorer.
The Stellar protocol does not allow classic payments to reach a contract address, so we always send transfers to a C… address as a Soroban contract transfer.
Whitelisting a contract address
Whitelist a contract address in a Contract whitelisted wallet, the same wallet type used for smart contracts on EVM-based blockchains and Solana Program accounts. Your existing Policy rules for contract counterparties then apply to it with no extra configuration.
Create the wallet
- In the Fireblocks Console, select Whitelisted addresses in the left navigation panel.
- Select Add, then Whitelisted address wallet.
- On the Create Whitelisted Wallet window, select Contract as the wallet type and enter a name. You cannot change the name after you create the wallet.
- Select Create wallet.
Add the contract address
- Select Whitelisted addresses in the left navigation panel, then select the wallet you created.
- Select Add address.
- In the Add whitelisted address window, select XLM as the asset, then enter the C… contract address.
Each whitelisted wallet holds one address per asset type. If a counterparty has more than one Stellar contract address, create a separate whitelisted wallet for each.
Important: New whitelisted addresses must be approved by the Admin Quorum before you can transfer funds to them. If a member of the Admin Quorum rejects an address, you can resubmit it for approval later. You cannot edit an address after you create it. To change an address, delete it, add the correct address, and submit it for approval again.
Policies, approvals, and reporting
Soroban transfers behave like every other transfer:
- Policy rules evaluate them before they are signed.
- Approvers review and approve them in the Console and in the Fireblocks mobile app, based on the same information they see for any transfer.
- They appear in transaction history, in the audit log, and in exports.
What is not available yet
You cannot use every Stellar token. A classic Stellar asset can move through Soroban only once its Stellar Asset Contract is deployed on the network. If the token you need is not available in your workspace, contact your Customer Success Manager.
Adding new Soroban tokens is not self-serve. Soroban token support currently covers tokens already available in Fireblocks. If you need a specific Soroban token, contact your Customer Success Manager.
Earlier transaction history. The transaction history, in both the Console and API, does not show Soroban transfers that occurred before we supported the token, and exports do not include them. Balances are correct and current. Only the earlier transaction records are missing. Use a Stellar block explorer to review activity from before that point.
Soroban contract calls are not supported. Calling arbitrary functions on a Soroban contract is not available through the Console or the Fireblocks API.
Related articles
- Tokenization on Stellar, for issuing your own token on Stellar
- Manage Stellar assets in Fireblocks