Trustlines
A Stellar only concept the SDK helps you check before you bridge.
A trustline is a Stellar idea with no equivalent on EVM. On Stellar, an account cannot hold an asset until it has explicitly opted in to it by creating a trustline. The account is stating that it trusts the issuer and is willing to hold the token.
This matters to the bridge because the last step of a transfer to Stellar is a mint to the recipient. If the recipient has no USDC trustline, the mint reverts and the transfer fails after the source USDC has already been burned. Always check first.
Pre flight check
Verify the recipient's trustline before you build the burn transaction. This is a cheap Soroban RPC read that returns a boolean.
const canReceive = await sdk.bridge.hasTrustline({
token: destinationToken,
address: recipient,
});
if (!canReceive) {
showToUser("Recipient must add a USDC trustline before you can bridge to them");
return;
}Non Stellar destinations always resolve true.
Accounts versus contracts
A Stellar account id starts with G. A Stellar contract id starts with C. Contracts hold token balances through contract storage directly and never need a classic trustline, so contract recipients always pass the check. Only G accounts are verified against the ledger.
How the check works
The SDK reads the trustline ledger entry through Soroban RPC. It submits nothing, so it is safe to call in a hot render path.
What if the check throws
The check returns false for missing trustlines. It only throws when Soroban RPC itself is unreachable, in which case you get a BridgeError with code RPC_ERROR. Treat any thrown error as "cannot verify" and retry.
How a recipient adds one
Adding a trustline is done by the recipient in their own wallet, not by the sender through this SDK. Most Stellar wallets expose it as "add asset" or "enable USDC". Once the USDC trustline exists, the receive transaction will succeed.