Skip to content

Solana: the one spoke off the hub

Solana

Every other corridor settles on the hub. Naira is the exception: no licensed naira anchor is live on Stellar, so NGN sits in OFF_STELLAR_PAYOUT_CURRENCIES and is reached through a partner that settles on Solana.

ledger.reserve → cctp.transfer (Stellar → Solana) → partner.payout # mainnet; the leg is not built
ledger.reserve → bridge.simulated (Stellar → Solana) → partner.payout # testnet; the Stellar side is real

Corridor keeps two vaults there: egress (funds partner payouts) and ingress (receives collections). Every transfer carries the Corridor Reference.

One @solana/kit transaction does three things atomically:

Create the recipient's USDC account if missing

Idempotent associated-token-account creation, so a first-time partner deposit address works.

TransferChecked

USDC from the vault to the partner’s one-off funding address, amount and decimals checked by the token program.

SPL Memo

corridor:<hex>: the same 32-byte reference as hex, logged by the Memo program.

const vault = new SolanaVault(signer, "devnet");
const signature = await vault.transferWithReference({
toOwner: fundingAddress, // partner's one-off deposit address
amount: 2_000_000n, // 2 USDC (6 decimals on Solana)
reference: ref,
});

RPC signature lists expose each transaction’s memo as [N] corridor:<hex>. extractReference pulls the reference out, so the observer can join Solana movements to ledger entries without decoding instructions — the same join Stellar does on MEMO_HASH.

SolanaWatcher reads amounts from each transaction’s pre- and post-token balances, so it sees the real amount and asset of any stablecoin movement, whichever program made it. It needs only an address, which is what a read-only pilot runs on.

USDC is 6 decimal places on Solana and 7 on the hub. toHubPrecision and toSpokePrecision wrap rescale, which refuses any conversion that would drop value: an amount carrying a seventh decimal throws rather than rounding away a stroop (ADR 0012).

Stellar and Solana both sign with Ed25519, so a deployment’s held KMS or MPC key addresses both: base58 on Solana, StrKey on Stellar. See Keys and signers.

Stablecoin Mainnet mint Token program
USDC EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v SPL Token
USDT Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB SPL Token
PYUSD 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo Token-2022
EURC HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr SPL Token

Transfers move funds with the mint’s own token program, so Token-2022 stablecoins work the same way as SPL ones.

Cluster RPC USDC mint
Mainnet api.mainnet-beta.solana.com EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Devnet api.devnet.solana.com 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU