quote.lane.kind), and executeQuote runs it. You never branch on lanes to execute, but your UI
can use them to tell the user what is coming.
Which lanes a hub offers depends on its catalog and its providers.
executeQuote refuses
informational and unsupported quotes before any wallet prompt.
wrap-native
The quote carries one transaction (executionTx): wrapAndOpen(order) on the chain’s UserProxy,
with the coin as value. Before the wallet sees it, the SDK checks:
- the target is the catalog’s UserProxy for the source chain, on the source chain;
valueis the amount asked for, and there are no approvals;- the calldata is
wrapAndOpen, and decoded: the order’s user is the funding account, its input is the wrapped native in the quoted amount, its output is the quoted amount of the asked-for asset, on the destination chain, to the recipient.
POST /order/openfor (no signature: the chain proves the deposit), then waits for the receipt.
Registering at once matters: the aggregator refuses a registration once the quote’s expiresAt has
passed, and a deposit registered too late is filled but never recorded. A reverted deposit throws
WalletError (reverted): nothing was deposited. An unfilled order refunds the wrapped coin.
evm-permit2
The user signs an EIP-712 Permit2 order; a solver opens it on chain. The token needs an allowance
to Permit2 (0x000000000022D473030F116dDEE9F6B43aC78BA3) first: executeQuote sends that approval
when it is missing (permit2Approval: "unlimited" by default, or "exact"), before signing.
An approval mined while a quote is open can leave the signature on an expired quote. The SDK
handles it by re-quoting, but a UI that approves before quoting avoids the extra round.
0x00 scheme prefix (66 bytes).
swap-token (token-in)
For a token the escrow does not take directly: the UserProxy swaps it into the wrapped native, then
opens the escrow, in one transaction (swapAndOpenV2(order, tokenIn, amountInMax)). The quote’s pay
amount is a ceiling: amountInMax, the most the swap may spend (slippageBps in the request, 1–1000).
The SDK approves the UserProxy for exactly that ceiling, decodes the calldata like wrap-native,
and also checks that tokenIn is the asked-for token and the ceiling is within the tolerance.
Reverse (exact-output) quotes are refused on this lane: its price is only known from what the user
spends.
solana-escrow
The hub discloses the escrow transaction’s message. The user signs it; a solver adds its fee-payer
signature and submits it. Before signing, the SDK checks:
- the message parses (a legacy Solana message), its fee payer is the disclosed solver, and the user is one of its signers;
- the disclosed digest is the SHA-256 of those bytes;
- the sender is the funding account, and the fee payer is not the user.
0x00 ‖ signature ‖ public key, base64. See
Wallets for the signing strategies.
evm-3009
The user signs an EIP-3009 ReceiveWithAuthorization for a token that supports it; the aggregator
settles it. The SDK checks that the typed data is an EIP-3009 authorization on the source chain,
that its payer is the funding account and its value the quoted input, and submits the raw 65-byte
signature.
open-flow
An aggregator’s own bridge or transfer: the user sends the disclosed transaction, then signs its
intent (EIP-191), and the order is registered with POST /order. The SDK follows it on the hub’s
lifecycle view (GET /status/{id}) until the recipient is paid or the order goes to recovery.
Open-flow orders are not listed in GET /orders.