destinationExecutions — arbitrary calls that run on the destination chain as part of the intent settlement.
The flow works as follows:
- Encode the vault deposit call
- Build the meta intent with the deposit execution
- Get a quote from Rhinestone
- Fulfill any token requirements
- Sign the intent
- Submit and poll for completion
Encoding the Vault Deposit
- EOA
- Smart Account
For EOAs, destination executions run in an intermediary contract — not in the user’s account context — so any tokens the execution produces (like vault shares) would otherwise be stranded there.ERC-4626’s
deposit(assets, receiver) sidesteps this: set receiver to the user’s address and shares mint directly to them. First approve the vault to pull the deposit token from the intermediary, then deposit.Because executions run in the intermediary — not the user’s account — tokens produced onchain aren’t swept back automatically. ERC-4626’s
receiver argument handles this: shares mint straight to the user. For outputs from calls that don’t expose a recipient (e.g. a swap), add an explicit transfer back to the user.Constructing the Meta Intent
- EOA
- Smart Account
Getting a Quote
Submit the meta intent to the/quotes endpoint:
routes array. Each route carries:
intentId: server-stored handle, used to submitcost: input/output amounts and fee breakdownsignData: EIP-712 typed data to signtokenRequirements: prerequisite token operations (EOA only)
Getting a Quote
See the full guide for advanced options like sponsorship and source chain filtering
Fulfilling Token Requirements
- EOA
- Smart Account
Before submitting, EOAs must fulfill the token requirements returned in the quote. There are two types:ERC-20 Approvals — approve tokens to the Permit2 contract:ETH Wrapping — wrap native ETH to WETH:
Approvals are only ever to the Permit2 contract. We recommend using max approvals for the best UX. Alternatively, inspect
cost.input for the exact amount needed.Token Requirements
Full details on fulfilling token requirements
Signing the Intent
- EOA
- Smart Account
Forward
signData.origin[] and signData.destination directly to your wallet. One signature per source chain, plus the destination signature.Submitting and Polling
Submit the signed intent to/intents using the intentId from the quote:
intentId: