Solana: the one spoke off the hub
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 builtledger.reserve → bridge.simulated (Stellar → Solana) → partner.payout # testnet; the Stellar side is realCorridor keeps two vaults there: egress (funds partner payouts) and ingress (receives collections). Every transfer carries the Corridor Reference.
The transaction
Section titled “The transaction”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,});Reading it back
Section titled “Reading it back”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.
Precision
Section titled “Precision”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).
One key for both
Section titled “One key for both”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.
Stablecoins
Section titled “Stablecoins”| 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.
Environments
Section titled “Environments”| Cluster | RPC | USDC mint |
|---|---|---|
| Mainnet | api.mainnet-beta.solana.com |
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| Devnet | api.devnet.solana.com |
4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU |