Skip to content

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.

Filter logs to the deployed IntentSettlerV1 address and the IntentAnnounced topic0:

0x6b7c7ccca26b7cb9642ad63c79054835d7bbfb9801b6c6c642a3ba88ece2350f

The 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.

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.