DepositAddress_USDCTransfer_Solana and its BaseDepositAddress implementation. Circle Gateway’s quoted deposit flow uses the Gateway API; do not apply this ABI to a Gateway vaultAddress.
Initialization and destination
The factory callsinitialize(bytes32 destinationAddress, address depositor) once, immediately after deployment. At the contract level, destinationAddress is the recipient’s Solana associated token account, encoded as bytes32. Use the Solana deposit API when starting from a wallet address.
The depositor becomes the created intent’s reward.creator, which determines the recipient for the normal intent refund path. It is not necessarily the address that sends the ERC-20 transfer.
Creating an intent
The contract exposes these functions. This TypeScript ABI fragment describes the interface; the deposit service normally submits the calls for you.
The Solana implementation encodes an SPL
TransferChecked call, approves the source Portal, and calls publishAndFund with partial funding disabled. The reward has a zero native amount, the configured source token, the configured prover, and a deadline derived from the factory’s duration.
Receiving an ERC-20 transfer alone does not call createIntent(). The monitoring service detects the balance and submits that transaction separately.
Validation
Intent creation also depends on successful token and Portal calls. A transaction revert does not create a funded intent.
Refunds and delivery
This contract does not expose arefund(routeHash, reward) function. Once an intent has been funded, refunds use the Routes intent lifecycle with the depositor as reward.creator. Expiry alone does not confirm a refund transaction.
A deployed contract proves only deployment. Confirm destination token delivery separately, as described in the Solana deposit guide.
