Skip to content

The owner deploys a UserProxyV6, approves that proxy for each input token, then signs the 12-field flat Order on the IntentSettlerV3 EIP-712 domain. The proxy verifies the signature and pulls the input to the settler.

Before signing, the owner must grant a standard ERC-20 allowance for tokenIn to their own UserProxyV6.

This is the on-chain gate for the proxy pull. IntentLensV3.preview reports the allowance from the owner to that proxy.

The owner signs a plain EIP-712 Order message. Its domain is the settler’s own domain: name: "AgentSwap IntentSettler", version: "3", with the deployed IntentSettlerV3 as the verifying contract.

The type is:

Order(address owner,address recipient,address tokenIn,uint256 amountIn,address tokenOut,uint256 startAmountOut,uint256 endAmountOut,uint256 startTime,uint256 decayEndTime,uint256 endTime,bytes32 appData,uint256 nonce)

The V6 owner authorization envelope is:

abi.encode(AuthKind, bytes payload)
// AuthKind.Owner = 0; payload = abi.encode(bytes ownerSignature)

orderDigest(order) returns the exact digest for the owner’s flat signature. The proxy recomputes the digest when it authorizes the pull.

Gasless off-chain cancellations are still signed against the settler’s own domain.

The cancellation typehash is CancelIntent(bytes32 orderHash,uint256 deadline) under the V3 domain EIP712("AgentSwap IntentSettler", "3").