The Intent Order
Every intent is represented on-chain by an IntentOrder struct. It contains exactly 12
fields. The EIP-712 primary type signed by the owner is the flat Order
type on IntentSettlerV3’s own domain.
The Fields
Section titled “The Fields”The IntentOrder struct contains the following fields:
| # | Field | Type | Meaning |
|---|---|---|---|
| 1 | owner |
address |
The owner of the proxy; the only account whose funds move. |
| 2 | recipient |
address |
Where output is delivered — not necessarily the owner. |
| 3 | tokenIn |
address |
The input ERC-20 token address. |
| 4 | amountIn |
uint256 |
The exact amount of tokenIn to be pulled from the owner. |
| 5 | tokenOut |
address |
The output ERC-20 token address. |
| 6 | startAmountOut |
uint256 |
The minimum output required at startTime. |
| 7 | endAmountOut |
uint256 |
The absolute minimum output floor. |
| 8 | startTime |
uint256 |
The timestamp when curve decay begins. |
| 9 | decayEndTime |
uint256 |
The timestamp when the required output reaches endAmountOut and begins to rest. |
| 10 | endTime |
uint256 |
The last timestamp at which the order can still be filled. fill rejects only when block.timestamp > endTime, so the order is still live at endTime. |
| 11 | appData |
bytes32 |
An opaque attribution tag, bound by the signature, ignored by the settlement logic. |
| 12 | nonce |
uint256 |
The owner’s proxy nonce. |
The owner signs all 12 fields in the flat Order struct. The signature is passed through the
auth envelope to the owner’s proxy.
The order’s unique identifier (the order hash) is computed as keccak256(abi.encode(order)). Clients read it from the chain via eth_call.
Order Types
Section titled “Order Types”The relationship between startAmountOut and endAmountOut defines the nature of the order:
- A fixed-price limit order is encoded by setting
startAmountOut == endAmountOut. - A descending Dutch auction is encoded by setting
startAmountOut > endAmountOut.
Frozen at Deploy
Section titled “Frozen at Deploy”The IntentOrder struct is frozen at deployment.
The IntentSettlerV3 contract is immutable, and the flat Order signature binds this exact
struct shape. Consequently, no field can be added, removed, or reordered.