ERC-7683: Cross Chain Intents Standard

I agree that different settlement systems can have different settlement logics. And I am also aligned with filler experience improvement.

As I understand, ResolvedCrossChainOrder which is the response of resolve and resolveFor functions should contain the terms of settlement for filler to know how he can successfully fulfil this intent.

There is no room for settlement specific metadata in that struct right now. If we add the additional settlement specific metadata the struct would change and no longer adhere to the standard, isn’t it?

I think the recommendation here is to make use of the fill Instruction to define terms of settlement. This can work. But I think the terminology is a bit confusing here.

Shouldn’t the fill function in the destination settler be payable?

Current:

function fill(bytes32 orderId, bytes calldata originData, bytes calldata fillerData) external;

Proposing:

function fill(bytes32 orderId, bytes calldata originData, bytes calldata fillerData) external payable;

Rationale: This will provide the filler to pass native tokens to be used in the fulfilment of the request.

2 Likes

GM, Kombi here.

How does the filler prove they have indeed made payment?

The EIP doesn’t cover exactly how settlement is done.

Can you point me to resources that explain how filling is verified and settlement done?

What is the story/plan here for the chainId and originChainId of chains that aren’t Ethereum L2s? Like, what if we want to submit an intent on Ethereum towards a L2 on Cosmos, on Sui or on Solana, or vice-versa?

It looks like we’d need some sort of namespace or some sort of standardized way to get a canonical chainId for any kind of chain in any ecosystem, with negligible risks of collision…

Thankfully using a uint256 leaves us with a lot of flexibility there.

My initial idea for my own custom services would be to use the hash of something deterministic relying on human-readable namespaces, such as:

  • Hash("Ethereum-EIP155-1") for Ethereum mainnet
  • Hash("Cosmos-cosmosevm-1-EVMChainID-9000") for Cosmos mainnet which has a dual chain id principle

The advantage being: chances of a clash are then negligible.

Any thoughts on that front?

It seems there have been some other proposals out there that have the same issue and tried to solve it with for example the chainagnostic one, CAIPs/caip-2.

But I haven’t found any concrete or ā€œuniversalā€ way of doing this.

We’re working on an iteration of this ERC that builds on ERC-7930: Interoperable Addresses, which builds on CAIP-2.

ERC-7786 is also using the same address format.

1 Like

As part of the Open Intents Framework we’re discussing significant changes to this ERC, in order to address problems that various implementers have identified.

Are you implementing or integrating with this ERC or do you plan to? If so please comment below and/or DM me contact details.

Wrote up a little interface based off off ERC-7683 that I think would potentially work for cross-VM cross-chain intents. I should add that I’m strongly in favour of singular standards barring the case where a single standard is much more inefficient, I do think the case for an eXtended version is becoming much more palatable hence positing this as an idea. XERC7683/src/IXERC7683.sol at master Ā· QEDK/XERC7683 Ā· GitHub

What happens if an intent has expired or is not processed by the filler?

The de-facto assumption is that it’s a developer concern. ERC-7683 serves as a baseline and liberal in terms of actual implementation details.

Just to clarify, do you mean ERC7683 defines the structs and interfaces for cross-chain intents, while different protocols or use cases can have their own implementations? In that scenario, solvers would then declare which implementations they support, correct? I’m only trying to better understand the intention behind this ERC.

Hi all, I’ve opened a CAIP draft that complements 7683 for a wallet-signed envelope with a stable qHash. There’s live code and tests. Would love some eyes on this and feedback.

CAIP PR:

Reference (open source):