Discovery
IntentSettlerV1 exposes an optional log feed through
announce(order, permit2Sig). The function builds no index. An owner may
publish an order directly, or another broadcaster may publish the signed pair.
Read IntentAnnounced
Section titled “Read IntentAnnounced”Filter logs to the deployed IntentSettlerV1 address and the
IntentAnnounced topic0:
0x6b7c7ccca26b7cb9642ad63c79054835d7bbfb9801b6c6c642a3ba88ece2350fThe event is:
IntentAnnounced( bytes32 indexed id, address indexed owner, bytes32 indexed appData, bytes order, bytes permit2Sig)The three indexed topics are id, owner, and appData. The data fields are
order and permit2Sig. order is abi.encode(IntentOrder), so it contains
the complete 12-field order. Individual order fields are not emitted beside
it.
An illustrative decoder can use the same boundary as the client:
// Illustrative decoder call. Validate the returned value before using it.const event = decodeIntentAnnounced({ topics: log.topics, data: log.data, transactionHash: log.transactionHash,});
if (event) { const { id, owner, recipient, tokenIn, tokenOut, nonce } = event;}The feed is not a fillability index. announce verifies the Permit2 digest,
but a valid signature can still name a spent nonce, lack an active Permit2
allowance, or refer to a route that cannot execute. ERC-1271 wallet state can
also change after signing. Use the event as a discovery input, then call
IntentLens.preview and dry-run fill before submission. See fill an order.
Use the ERC-7683 resolver
Section titled “Use the ERC-7683 resolver”The current-draft ERC-7683 integration is a resolver surface for discovery and
representation. It is view-only. It does not adopt the InputSettler or
OutputSettler settlement surface, and it does not add a cross-chain path.
The resolver payload is:
struct IntentPayload { address settler; IntentOrder order; bytes permit2Sig; bytes routerData;}Build the payload with encodePayload, then pass its returned bytes to
resolve:
// Illustrative read-only flow.const payload = { settler, order, permit2Sig, routerData };const encoded = await ethCall(encodePayloadCall(payload));const resolved = await ethCall(resolveCall(encoded));resolve validates the order and expiry, and returns a ResolvedOrder that
describes one same-chain fill step. The step targets the supplied settler
with the fill selector and represents the supplied order, Permit2 signature,
and router data for that step.
The resolver declares these assumptions:
| Name | Meaning in the resolver |
|---|---|
swap_solver.intent_settler |
the supplied settler is the fill target |
swap_solver.payment_recipient_is_step_caller |
payment recipient follows the step caller |
swap_solver.same_chain_only |
the order is represented on one chain |
swap_solver.intent_required_out |
required output is derived from the intent curve |
ERC-7930 addresses are not used in the discovery event. The event uses the
plain IntentAnnounced fields above.