One Anchor program covers the Solana side. Unlike the EVM split between vault and router, the float lives in a plain treasury system account and its associated token accounts; the program moves funds in and out of it and emits the events the indexer matches against stored quotes. Fulfillments and refunds are signed by the treasury key itself, so the program holds no upgradeable state beyond voucher markers. Prefer the router_address (program id) and treasury returned on the quote and by GetChains over these constants.

Deposit instructions

deposit_token transfers SPL tokens from the depositor’s token account into the treasury’s associated token account and emits Deposit with the amount actually credited, so transfer-fee mints are accounted at the treasury, not assumed. deposit_native transfers lamports to the treasury directly; the mint in its event is the default pubkey.
Invokes the aggregator program passed as swap_program with the caller-supplied accounts and data, then requires the treasury’s token account to have grown by at least min_bridge_out, emitting SwapDeposit with the credited amount. buildSvmSwapDeposit in the SDK assembles this transaction from the GetSwapInstructions payload; see Swap instructions.

Operator instructions

Restricted to the treasury signer, listed for completeness.
fulfill_token pays the recipient’s token account and optionally transfers gas_drop lamports to the recipient, requiring the recipient to be credited the full amount. The refund variants pay back the depositor the same way.

Voucher redemption

Callable by anyone. The transaction must include an ed25519 verification instruction, before this one, over the voucher message (domain, chain, program id, id, mint, referrer, amount) signed by a registered voucher signer. A marker account derived from the id is initialized on redemption, so an id cannot be redeemed twice, and the amount is transferred from the treasury’s token account to the referrer’s via the program’s delegate authority PDA. See Referral program.

Events

The indexer matches Deposit and SwapDeposit against stored quotes by quote_hash. Native amounts carry the default pubkey as mint.

Errors