From 80f16b937f97d6bebef29238f5732416a3b44f8e Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Wed, 15 Jan 2025 17:04:58 -0300 Subject: [PATCH 01/24] Add receiveMessage function. --- ERCS/erc-7786.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index b40cfe901a4..874a3c28142 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -111,7 +111,19 @@ The exact interface for any such action is out of scope of this ERC. If the `pos ### Reception Procedure -A **Destination Gateway** is a contract that implements a protocol to validate messages sent on other chains. The interface of the destination gateway and how it is invoked is out of scope of this ERC. +A **Destination Gateway** is a contract that implements a protocol to validate messages sent on other chains. The interface optionally specifies how an application can read message from the gateway. + +```solidity +interface IERC7786GatewayDestination { + + // Optional + function receiveMessage( + bytes messageId, + string calldata srcChainId, // [CAIP-2] chain identifier + string calldata srcAddress // [CAIP-10] account address + ) external returns (bytes payload); +} +``` The protocol MUST ensure delivery of a sent message to its **receiver** using the `IERC7786Receiver` interface (specified below), which the receiver MUST implement. @@ -146,17 +158,17 @@ MUST return `IERC7786Receiver.executeMessage.selector` (`0x675b049b`). The protocol underlying a pair of gateways is expected to guarantee a series of properties. For detailed definition and discussion we refer to XChain Research’s _Cross-chain Interoperability Report_. -- The protocol MUST guarantee Safety: A message is delivered at the destination if and only if it was sent at the source. The delivery process must ensure a message is only delivered once the sending transaction is finalized, and not delivered more than once. Note that there can be multiple messages with identical parameters that must be delivered separately. -- The protocol MUST guarantee Liveness: A sent message is delivered at the destination eventually, assuming Liveness and censorship-resistance of the source and destination chains. -- The protocol SHOULD guarantee Timeliness: A sent message is delivered at the destination within a bounded delivery time, which should be documented. -- The above properties SHOULD NOT rely on trust in some centralized actor. For example, safety should be guaranteed by some trustless mechanism such as a light client proof, or attestations by an open, decentralized validator set. Relaying should be decentralized or permissionless to ensure liveness; a centralized relayer can fail and thus halt the protocol. +* The protocol MUST guarantee Safety: A message is delivered at the destination if and only if it was sent at the source. The delivery process must ensure a message is only delivered once the sending transaction is finalized, and not delivered more than once. Note that there can be multiple messages with identical parameters that must be delivered separately. +* The protocol MUST guarantee Liveness: A sent message is delivered at the destination eventually, assuming Liveness and censorship-resistance of the source and destination chains. +* The protocol SHOULD guarantee Timeliness: A sent message is delivered at the destination within a bounded delivery time, which should be documented. +* The above properties SHOULD NOT rely on trust in some centralized actor. For example, safety should be guaranteed by some trustless mechanism such as a light client proof, or attestations by an open, decentralized validator set. Relaying should be decentralized or permissionless to ensure liveness; a centralized relayer can fail and thus halt the protocol. ## Rationale Attributes are designed so that gateways can expose any specific features the bridge offers without having to use a specific endpoint. Having a unique endpoint, with modularity through attributes, SHOULD allow contracts to change the gateway they use while continuing to express messages the same way. This portability offers many advantages: -- A contract that relies on a specific gateway for sending messages is vulnerable to the gateway being paused, deprecated, or simply breaking. If the communication between the contract and the gateway is standard, an admin of the contract COULD update the address (in storage) of the gateway to use. In particular, senders to update to the new gateway when a new version is available. -- Bridge layering SHOULD be possible. In particular, this interface should allow for a new class of bridges that routes the message through multiple independent bridges. Delivery of the message could require one or multiple of these independent bridges depending on whether improved liveness or safety is desired. +* A contract that relies on a specific gateway for sending messages is vulnerable to the gateway being paused, deprecated, or simply breaking. If the communication between the contract and the gateway is standard, an admin of the contract COULD update the address (in storage) of the gateway to use. In particular, senders to update to the new gateway when a new version is available. +* Bridge layering SHOULD be possible. In particular, this interface should allow for a new class of bridges that routes the message through multiple independent bridges. Delivery of the message could require one or multiple of these independent bridges depending on whether improved liveness or safety is desired. As some cross-chain communication protocols require additional parameters beyond the destination and the payload, and because we want to send messages through those bridges without any knowledge of these additional parameters, a post-processing of the message MAY be required (after `sendMessage` is called, and before the message is delivered). The additional parameters MAY be supported through attributes, which would remove the need for a post-processing step. If these additional parameters are not provided through an attribute, an additional call to the gateway is REQUIRED for the message to be sent. If possible, the gateway SHOULD be designed so that anyone with an incentive for the message to be delivered can jump in. A malicious actor providing invalid parameters SHOULD NOT prevent the message from being successfully relayed by someone else. @@ -174,5 +186,5 @@ Unfortunately, [CAIP-2] and [CAIP-10] names are not unique. Using non-canonical Copyright and related rights waived via [CC0](../LICENSE.md). -[CAIP-10]: https://github.com/ChainAgnostic/CAIPs/blob/3da24e4e912ae179713b2b1b11d6ecb5df06a8dc/CAIPs/caip-10.md -[CAIP-2]: https://github.com/ChainAgnostic/CAIPs/blob/cbee09d2885065ba15482398828d5c5e3ac57faa/CAIPs/caip-2.md +[caip-10]: https://github.com/ChainAgnostic/CAIPs/blob/3da24e4e912ae179713b2b1b11d6ecb5df06a8dc/CAIPs/caip-10.md +[caip-2]: https://github.com/ChainAgnostic/CAIPs/blob/cbee09d2885065ba15482398828d5c5e3ac57faa/CAIPs/caip-2.md From ac483775bb640701ceac470f95de955626248f0f Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Wed, 15 Jan 2025 17:09:02 -0300 Subject: [PATCH 02/24] typo --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 874a3c28142..e3a5b8bf8ff 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -111,7 +111,7 @@ The exact interface for any such action is out of scope of this ERC. If the `pos ### Reception Procedure -A **Destination Gateway** is a contract that implements a protocol to validate messages sent on other chains. The interface optionally specifies how an application can read message from the gateway. +A **Destination Gateway** is a contract that implements a protocol to validate messages sent on other chains. The interface optionally specifies how an application can read messages from the gateway. ```solidity interface IERC7786GatewayDestination { From 51b2b897081d58770f4d756d23d823a45d0da307 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Wed, 15 Jan 2025 17:33:58 -0300 Subject: [PATCH 03/24] Mention of attributes for sendMessage. --- ERCS/erc-7786.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index e3a5b8bf8ff..2eab1ffb3ad 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -103,6 +103,12 @@ This event signals that a would-be sender has requested a message to be sent. If `outboxId` is present, post-processing MAY be required to send the message through the cross-chain channel. +#### Mandatory and optional attributes + +The `attributes` parameter MUST contain as its first element the value `read(true)` or `read(false)`. `read(true)` means the message can be read by the application on the destination gateway. `read(false)` means the message by pushed by the destination gateway on the application via `executeMessage`(see below). + +In the case `read(true)` is set as teh first element of the `attributes` parameters, the next element MUST be `messageId(val)` where val is a sequence of 32 bytes. + #### Post-processing After a sender has invoked `sendMessage`, further action MAY be required by the gateways to make the message effective. This is called _post-processing_. For example, some payment is typically required to cover the gas of executing the message at the destination. From 42cca854ae404bc63e567b66ecbc21b803f68636 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Wed, 15 Jan 2025 18:00:20 -0300 Subject: [PATCH 04/24] messageId should be a bytes32 --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 2eab1ffb3ad..1e2e4e96da3 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -124,7 +124,7 @@ interface IERC7786GatewayDestination { // Optional function receiveMessage( - bytes messageId, + bytes32 messageId, string calldata srcChainId, // [CAIP-2] chain identifier string calldata srcAddress // [CAIP-10] account address ) external returns (bytes payload); From 95b2fe5773404436fc4f87aa02e2bde249a9959d Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Wed, 15 Jan 2025 18:32:04 -0300 Subject: [PATCH 05/24] Add / fix sequence diagrams. --- ERCS/erc-7786.md | 8 +++++++- assets/erc-7786/send-receive.mermaid | 15 +++++++++++++++ assets/erc-7786/send-receive.png | Bin 0 -> 126337 bytes 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 assets/erc-7786/send-receive.mermaid create mode 100644 assets/erc-7786/send-receive.png diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 1e2e4e96da3..6f1ce15c5c2 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -158,7 +158,13 @@ MUST return `IERC7786Receiver.executeMessage.selector` (`0x675b049b`). #### Interaction Diagram -![](../assets/eip-7786/send-execute.png) +PUSH model +![](../assets/erc-7786/send-execute.png) + + +PULL model +![](../assets/erc-7786/send-receive.png) + ### Properties diff --git a/assets/erc-7786/send-receive.mermaid b/assets/erc-7786/send-receive.mermaid new file mode 100644 index 00000000000..2bcf826f049 --- /dev/null +++ b/assets/erc-7786/send-receive.mermaid @@ -0,0 +1,15 @@ +sequenceDiagram + box Source chain + participant Sender + participant SourceGateway + end + box Destination chain + participant DestinationGateway + participant Receiver + end + Sender->>SourceGateway: sendMessage(...) + SourceGateway-->>DestinationGateway: [underlying protocol] + Receiver->>Receiver: f(...) starts execution + Receiver->>DestinationGateway: read(...) + Receiver->>Receiver: f(...) ends execution + diff --git a/assets/erc-7786/send-receive.png b/assets/erc-7786/send-receive.png new file mode 100644 index 0000000000000000000000000000000000000000..86c12e44ca02e48e36d8899aa32ab34acbe964ba GIT binary patch literal 126337 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%0AqJl{fpIrrL*z9TllNotPD- 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≺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 YrYu0a1vX$&BH-uxwOdz@~ literal 0 HcmV?d00001 From b58b3a607f5d7d94ab60d8e80a6805bc295b461e Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Thu, 16 Jan 2025 12:19:24 -0300 Subject: [PATCH 06/24] There are two workflows now. --- ERCS/erc-7786.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 6f1ce15c5c2..114dcd6e9af 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -20,7 +20,7 @@ Cross-chain messaging protocols (or bridges) allow communication between smart c Because almost every protocol implements a different workflow using a specific interface, portability between bridges is currently basically impossible. This also prevents the development of generic contracts that rely on cross chain communication. -The objective of this ERC is to provide a standard interface, and a corresponding workflow, for performing cross-chain communication between contracts. Existing cross-chain communication protocols that do not natively implement this interface should be able to adopt it using adapter gateway contracts. +The objective of this ERC is to provide a standard interface, and corresponding workflows, for performing cross-chain communication between contracts. Existing cross-chain communication protocols that do not natively implement this interface should be able to adopt it using adapter gateway contracts. Compared to previous ERCs in this area, this ERC offers compatibility with chains outside of the Ethereum/EVM ecosystem, and it is extensible to support the different feature sets of various protocols while offering a shared core of standard functionality. @@ -161,11 +161,9 @@ MUST return `IERC7786Receiver.executeMessage.selector` (`0x675b049b`). PUSH model ![](../assets/erc-7786/send-execute.png) - PULL model ![](../assets/erc-7786/send-receive.png) - ### Properties The protocol underlying a pair of gateways is expected to guarantee a series of properties. For detailed definition and discussion we refer to XChain Research’s _Cross-chain Interoperability Report_. From ac208fb4e460beaaf1b037783ddb46d6609c89b9 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Thu, 16 Jan 2025 12:34:10 -0300 Subject: [PATCH 07/24] Update Motivation and Rationale sections --- ERCS/erc-7786.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 114dcd6e9af..20807dc9ce2 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -22,7 +22,7 @@ Because almost every protocol implements a different workflow using a specific i The objective of this ERC is to provide a standard interface, and corresponding workflows, for performing cross-chain communication between contracts. Existing cross-chain communication protocols that do not natively implement this interface should be able to adopt it using adapter gateway contracts. -Compared to previous ERCs in this area, this ERC offers compatibility with chains outside of the Ethereum/EVM ecosystem, and it is extensible to support the different feature sets of various protocols while offering a shared core of standard functionality. +Compared to previous ERCs in this area, this ERC offers compatibility with chains outside of the Ethereum/EVM ecosystem, and it is extensible to support the different feature sets of various protocols while offering a shared core of standard functionality. Moreover, this standard supports both PUSH and PULL communication modes, capturing a larger class of interoperability protocols. ## Specification @@ -182,7 +182,9 @@ Attributes are designed so that gateways can expose any specific features the br As some cross-chain communication protocols require additional parameters beyond the destination and the payload, and because we want to send messages through those bridges without any knowledge of these additional parameters, a post-processing of the message MAY be required (after `sendMessage` is called, and before the message is delivered). The additional parameters MAY be supported through attributes, which would remove the need for a post-processing step. If these additional parameters are not provided through an attribute, an additional call to the gateway is REQUIRED for the message to be sent. If possible, the gateway SHOULD be designed so that anyone with an incentive for the message to be delivered can jump in. A malicious actor providing invalid parameters SHOULD NOT prevent the message from being successfully relayed by someone else. -Some protocols gateway support doing arbitrary direct calls on the receiver. In that case, the receiver must detect that they are being called by the gateway to properly identify cross-chain messages. Getters are available on the gateway to figure out where the cross-chain message comes from (source chain and sender address). This approach has the downside that it allows anyone to trigger any call from the gateway to any contract. This is dangerous if the gateway ever holds any assets ([ERC-20](./eip-20.md) or similar). The use of a dedicated `executeMessage` function on the receiver protects any assets or permissions held by the gateway against such attacks. If the ability to perform direct calls is desired, this can be implemented as a wrapper on top of any gateway that implements this ERC. +Cross-chain communication protocols can be classified in two categories: _PUSH_ based protocols allow for an active Gateway that can call contract functions on the destination chain. _PULL_ based protocols let the applications fetch messages from the passive Gateway. This standard supports both class of protocols via `IERC7786Receiver.executeMessage` (PUSH) and `IERC7786GatewayDestination.receiveMessage` (PULL). Currently most protocols used in practice fall in the _PUSH_ category and hence the implementation of `IERC7786GatewayDestination.receiveMessage` is optional. + +Some (PUSH based) protocols gateway support doing arbitrary direct calls on the receiver. In that case, the receiver must detect that they are being called by the gateway to properly identify cross-chain messages. Getters are available on the gateway to figure out where the cross-chain message comes from (source chain and sender address). This approach has the downside that it allows anyone to trigger any call from the gateway to any contract. This is dangerous if the gateway ever holds any assets ([ERC-20](./eip-20.md) or similar). The use of a dedicated `executeMessage` function on the receiver protects any assets or permissions held by the gateway against such attacks. If the ability to perform direct calls is desired, this can be implemented as a wrapper on top of any gateway that implements this ERC. ## Backwards Compatibility From 6ad57be0522f5bed7be627b1051335710d6b3376 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Thu, 16 Jan 2025 12:38:42 -0300 Subject: [PATCH 08/24] Fix typos --- ERCS/erc-7786.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 20807dc9ce2..0cff3e49105 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -105,9 +105,9 @@ If `outboxId` is present, post-processing MAY be required to send the message th #### Mandatory and optional attributes -The `attributes` parameter MUST contain as its first element the value `read(true)` or `read(false)`. `read(true)` means the message can be read by the application on the destination gateway. `read(false)` means the message by pushed by the destination gateway on the application via `executeMessage`(see below). +The `attributes` parameter MUST contain as its first element the value `read(true)` or `read(false)`. `read(true)` means the message can be read by the application on the destination gateway. `read(false)` means the message is pushed by the destination Gateway on the application via `executeMessage`(see below). -In the case `read(true)` is set as teh first element of the `attributes` parameters, the next element MUST be `messageId(val)` where val is a sequence of 32 bytes. +In the case `read(true)` is set as the first element of the `attributes` parameters, the next element MUST be `messageId(val)` where `val` is a sequence of 32 bytes. #### Post-processing From e592c420a6717404daf2a2d88a7f5bdb924a2ec7 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Fri, 17 Jan 2025 09:52:34 -0300 Subject: [PATCH 09/24] Make the type messageId bytes instead of bytes32. --- ERCS/erc-7786.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 0cff3e49105..8bf965afdd2 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -107,7 +107,7 @@ If `outboxId` is present, post-processing MAY be required to send the message th The `attributes` parameter MUST contain as its first element the value `read(true)` or `read(false)`. `read(true)` means the message can be read by the application on the destination gateway. `read(false)` means the message is pushed by the destination Gateway on the application via `executeMessage`(see below). -In the case `read(true)` is set as the first element of the `attributes` parameters, the next element MUST be `messageId(val)` where `val` is a sequence of 32 bytes. +In the case `read(true)` is set as the first element of the `attributes` parameters, the next element MUST be `messageId(val)` where `val` is a sequence of bytes. #### Post-processing @@ -124,7 +124,7 @@ interface IERC7786GatewayDestination { // Optional function receiveMessage( - bytes32 messageId, + bytes messageId, string calldata srcChainId, // [CAIP-2] chain identifier string calldata srcAddress // [CAIP-10] account address ) external returns (bytes payload); From 537f15401a2284ea7d84f8fa81edea3d811ee0e3 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Fri, 17 Jan 2025 11:57:47 -0300 Subject: [PATCH 10/24] Fix send-receive diagram --- assets/erc-7786/send-receive.mermaid | 2 +- assets/erc-7786/send-receive.png | Bin 126337 -> 129820 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/erc-7786/send-receive.mermaid b/assets/erc-7786/send-receive.mermaid index 2bcf826f049..8ab6eefd1a4 100644 --- a/assets/erc-7786/send-receive.mermaid +++ b/assets/erc-7786/send-receive.mermaid @@ -10,6 +10,6 @@ sequenceDiagram Sender->>SourceGateway: sendMessage(...) SourceGateway-->>DestinationGateway: [underlying protocol] Receiver->>Receiver: f(...) starts execution - Receiver->>DestinationGateway: read(...) + Receiver->>DestinationGateway: receiveMessage(...) Receiver->>Receiver: f(...) ends execution diff --git a/assets/erc-7786/send-receive.png b/assets/erc-7786/send-receive.png index 86c12e44ca02e48e36d8899aa32ab34acbe964ba..84b9e9f095022ed1d3d229cbc756bab552cc0827 100644 GIT binary patch delta 69400 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%0A2u)1 z+!AyilX*&6+bd~M4Qi=jSV2+sgY|we|MCH~6VhOPmr=a!=HOV1N#OD$dNi|tkyNu? zRYn)-p$YHNsiZqgQ)OKDh2QSF)<>9q%c1vVt{Kyv}cEh?OGY zCoIIQLx7a1cwiP^ERNkm$@7`p2GIHb@M&S^61y}yMPAJv+gj;@*es5l?*V??R&L9=6Mtj$_)nGe5oF9Cv+F`xCWaQUX0*k%d`CR$Mahey7i4nSx!k#}AGb*B z`X8Ro)voecPk>@`3g$(KQxoRcN8YnHQk81&YS=I6QWN}CcCvr89c@L|I#kV-wuM4* z6Djoza2B`D+L}BGxDSNtbC=2kYm`G+)+dU3?dHgWIGM4{NL!m4W#itfO5WLb_tG{^ zAMo-XQV;y@je8@QhOzX$Dpf3?AhWu2=pOYAWz9c(+b5etd&@mMy7s{@RK^NZS?E$-Y=KW$6y4A zR{)FO!6Q&Q{Um`m2BS-J@y;j)a?@NCU?=5S^-~3Y zy&3}DS@PsSzBW|HbEI49=jVXm%C{eMLIG&JEF8_+4dPJj9M|5^V4IHkV`q^yShj#`_X_^||gB_7Rz9pN9gsQCUFJQrEDb>`RO z^LA3;Wb0W6i2L3CmQsxN7Z|9bVI19X#JY*IGd_B#-HHFy4QFnWef$CK$*FY=e? z{%`#Q{|NyZ=I#HZWkyTXbkghe_d29KydJIp8%Sj!kdn;vwujkC9=g%L;k8%Q2t*NU zy-qF{Z-Y#C@C;6zOz}CVXV0_@= zc>;Q@8~n{ONUk=;0BkJGv3IWnR04s1)dN2F0jZIVrQ>w=3UhFAm5Rnx#JTPf=BNed z4w;7zB7;9U1Okw^85Xy+Png5z{QvC{ocTS1-+TmubSHZ^uw%y|`70N7%znwAU&!tL zA347N`789#2>yO9`DYFOS%ZJH#s3TX?jKJ6hm-%|e OyK>3+V$lV=;C}(l>-3KR delta 65779 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 From a9777293db1dc1e29847ed184339b3fe65236307 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Fri, 17 Jan 2025 12:30:18 -0300 Subject: [PATCH 11/24] Remove prettifier changes --- ERCS/erc-7786.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 8bf965afdd2..9ce5ddbcaff 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -168,17 +168,17 @@ PULL model The protocol underlying a pair of gateways is expected to guarantee a series of properties. For detailed definition and discussion we refer to XChain Research’s _Cross-chain Interoperability Report_. -* The protocol MUST guarantee Safety: A message is delivered at the destination if and only if it was sent at the source. The delivery process must ensure a message is only delivered once the sending transaction is finalized, and not delivered more than once. Note that there can be multiple messages with identical parameters that must be delivered separately. -* The protocol MUST guarantee Liveness: A sent message is delivered at the destination eventually, assuming Liveness and censorship-resistance of the source and destination chains. -* The protocol SHOULD guarantee Timeliness: A sent message is delivered at the destination within a bounded delivery time, which should be documented. -* The above properties SHOULD NOT rely on trust in some centralized actor. For example, safety should be guaranteed by some trustless mechanism such as a light client proof, or attestations by an open, decentralized validator set. Relaying should be decentralized or permissionless to ensure liveness; a centralized relayer can fail and thus halt the protocol. +- The protocol MUST guarantee Safety: A message is delivered at the destination if and only if it was sent at the source. The delivery process must ensure a message is only delivered once the sending transaction is finalized, and not delivered more than once. Note that there can be multiple messages with identical parameters that must be delivered separately. +- The protocol MUST guarantee Liveness: A sent message is delivered at the destination eventually, assuming Liveness and censorship-resistance of the source and destination chains. +- The protocol SHOULD guarantee Timeliness: A sent message is delivered at the destination within a bounded delivery time, which should be documented. +- The above properties SHOULD NOT rely on trust in some centralized actor. For example, safety should be guaranteed by some trustless mechanism such as a light client proof, or attestations by an open, decentralized validator set. Relaying should be decentralized or permissionless to ensure liveness; a centralized relayer can fail and thus halt the protocol. ## Rationale Attributes are designed so that gateways can expose any specific features the bridge offers without having to use a specific endpoint. Having a unique endpoint, with modularity through attributes, SHOULD allow contracts to change the gateway they use while continuing to express messages the same way. This portability offers many advantages: -* A contract that relies on a specific gateway for sending messages is vulnerable to the gateway being paused, deprecated, or simply breaking. If the communication between the contract and the gateway is standard, an admin of the contract COULD update the address (in storage) of the gateway to use. In particular, senders to update to the new gateway when a new version is available. -* Bridge layering SHOULD be possible. In particular, this interface should allow for a new class of bridges that routes the message through multiple independent bridges. Delivery of the message could require one or multiple of these independent bridges depending on whether improved liveness or safety is desired. +- A contract that relies on a specific gateway for sending messages is vulnerable to the gateway being paused, deprecated, or simply breaking. If the communication between the contract and the gateway is standard, an admin of the contract COULD update the address (in storage) of the gateway to use. In particular, senders to update to the new gateway when a new version is available. +- Bridge layering SHOULD be possible. In particular, this interface should allow for a new class of bridges that routes the message through multiple independent bridges. Delivery of the message could require one or multiple of these independent bridges depending on whether improved liveness or safety is desired. As some cross-chain communication protocols require additional parameters beyond the destination and the payload, and because we want to send messages through those bridges without any knowledge of these additional parameters, a post-processing of the message MAY be required (after `sendMessage` is called, and before the message is delivered). The additional parameters MAY be supported through attributes, which would remove the need for a post-processing step. If these additional parameters are not provided through an attribute, an additional call to the gateway is REQUIRED for the message to be sent. If possible, the gateway SHOULD be designed so that anyone with an incentive for the message to be delivered can jump in. A malicious actor providing invalid parameters SHOULD NOT prevent the message from being successfully relayed by someone else. @@ -198,5 +198,5 @@ Unfortunately, [CAIP-2] and [CAIP-10] names are not unique. Using non-canonical Copyright and related rights waived via [CC0](../LICENSE.md). -[caip-10]: https://github.com/ChainAgnostic/CAIPs/blob/3da24e4e912ae179713b2b1b11d6ecb5df06a8dc/CAIPs/caip-10.md -[caip-2]: https://github.com/ChainAgnostic/CAIPs/blob/cbee09d2885065ba15482398828d5c5e3ac57faa/CAIPs/caip-2.md +[CAIP-10]: https://github.com/ChainAgnostic/CAIPs/blob/3da24e4e912ae179713b2b1b11d6ecb5df06a8dc/CAIPs/caip-10.md +[CAIP-2]: https://github.com/ChainAgnostic/CAIPs/blob/cbee09d2885065ba15482398828d5c5e3ac57faa/CAIPs/caip-2.md From 15c1f1b7dea821026f012451b6191e1c93093c5a Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Fri, 17 Jan 2025 14:22:00 -0300 Subject: [PATCH 12/24] Attributes are optional but some can be set by default. --- ERCS/erc-7786.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 9ce5ddbcaff..56416c97aff 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -83,6 +83,7 @@ Returns a boolean indicating whether an attribute is supported by the gateway, i A gateway MAY be upgraded with support for additional attributes. Once present support for an attribute SHOULD NOT be removed to preserve backwards compatibility with users of the gateway. + #### `sendMessage` Initiates the sending of a message. @@ -103,11 +104,11 @@ This event signals that a would-be sender has requested a message to be sent. If `outboxId` is present, post-processing MAY be required to send the message through the cross-chain channel. -#### Mandatory and optional attributes - -The `attributes` parameter MUST contain as its first element the value `read(true)` or `read(false)`. `read(true)` means the message can be read by the application on the destination gateway. `read(false)` means the message is pushed by the destination Gateway on the application via `executeMessage`(see below). +#### Default attributes -In the case `read(true)` is set as the first element of the `attributes` parameters, the next element MUST be `messageId(val)` where `val` is a sequence of bytes. +While all attributes are optional, the following attributes are set to a default value if not present in the `attributes` array. +* `pushBased: bool`. If set to `true`, the message is meant to be passed directly to the application by the Gateway via executeMessage (see below). If set to `false`, the application on the destination is expected to fetch the message from the Gateway by calling `receiveMessage` (see below). The default value of this attribute is `true`. +* `messageId: bytes`. Encodes a unique identifier of the message. The default value of this attribute is `[]`. #### Post-processing From e979ea7ac98c3014f639ca0f7a7ffd44c03ae5e4 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Fri, 17 Jan 2025 14:27:54 -0300 Subject: [PATCH 13/24] messageKey parameter for receiveMessage Co-authored-by: Francisco Giordano --- ERCS/erc-7786.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 56416c97aff..5bb10e7cc4d 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -125,10 +125,8 @@ interface IERC7786GatewayDestination { // Optional function receiveMessage( - bytes messageId, - string calldata srcChainId, // [CAIP-2] chain identifier - string calldata srcAddress // [CAIP-10] account address - ) external returns (bytes payload); + bytes calldata messageKey, + ) external returns (Message memory); } ``` From a7c919ed30adaab72dbffa6a4be8deaa34b2cac7 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Fri, 17 Jan 2025 15:09:17 -0300 Subject: [PATCH 14/24] messageKey -> messageId --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 5bb10e7cc4d..ac4e3cb0914 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -125,7 +125,7 @@ interface IERC7786GatewayDestination { // Optional function receiveMessage( - bytes calldata messageKey, + bytes calldata messageId, ) external returns (Message memory); } ``` From b4724fb0665aa1ea6eb2857922bf1b9146daf760 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 20 Jan 2025 07:29:42 -0300 Subject: [PATCH 15/24] Make messageId a field of the message. --- ERCS/erc-7786.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index ac4e3cb0914..e1afab19311 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -69,6 +69,7 @@ interface IERC7786GatewaySource { function supportsAttribute(bytes4 selector) external view returns (bool); function sendMessage( + bytes messageId, string calldata destinationChain, // [CAIP-2] chain identifier string calldata receiver, // [CAIP-10] account address bytes calldata payload, @@ -104,11 +105,10 @@ This event signals that a would-be sender has requested a message to be sent. If `outboxId` is present, post-processing MAY be required to send the message through the cross-chain channel. -#### Default attributes +#### Default attribute -While all attributes are optional, the following attributes are set to a default value if not present in the `attributes` array. +While all attributes are optional, the following attributes is set to a default value if not present in the `attributes` array. * `pushBased: bool`. If set to `true`, the message is meant to be passed directly to the application by the Gateway via executeMessage (see below). If set to `false`, the application on the destination is expected to fetch the message from the Gateway by calling `receiveMessage` (see below). The default value of this attribute is `true`. -* `messageId: bytes`. Encodes a unique identifier of the message. The default value of this attribute is `[]`. #### Post-processing From 1f9139bc6e61d6c86b5d82bd36fae593d442e9a8 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 20 Jan 2025 07:30:12 -0300 Subject: [PATCH 16/24] Remove mention of pushBased attribute. --- ERCS/erc-7786.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index e1afab19311..7a0dd31770f 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -105,11 +105,6 @@ This event signals that a would-be sender has requested a message to be sent. If `outboxId` is present, post-processing MAY be required to send the message through the cross-chain channel. -#### Default attribute - -While all attributes are optional, the following attributes is set to a default value if not present in the `attributes` array. -* `pushBased: bool`. If set to `true`, the message is meant to be passed directly to the application by the Gateway via executeMessage (see below). If set to `false`, the application on the destination is expected to fetch the message from the Gateway by calling `receiveMessage` (see below). The default value of this attribute is `true`. - #### Post-processing After a sender has invoked `sendMessage`, further action MAY be required by the gateways to make the message effective. This is called _post-processing_. For example, some payment is typically required to cover the gas of executing the message at the destination. From 63c1aae5d0eef17cdec371e845c369a59957d9a2 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 20 Jan 2025 07:37:15 -0300 Subject: [PATCH 17/24] Improve wording --- ERCS/erc-7786.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 7a0dd31770f..ea06d056e4f 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -113,7 +113,7 @@ The exact interface for any such action is out of scope of this ERC. If the `pos ### Reception Procedure -A **Destination Gateway** is a contract that implements a protocol to validate messages sent on other chains. The interface optionally specifies how an application can read messages from the gateway. +A **Destination Gateway** is a contract that allows the application to obtain the message. Optionally the Gateway can provide an interface to let the application on the destination chain fetch a message stored by the Gateway providing only the unique message identifier. ```solidity interface IERC7786GatewayDestination { @@ -125,7 +125,7 @@ interface IERC7786GatewayDestination { } ``` -The protocol MUST ensure delivery of a sent message to its **receiver** using the `IERC7786Receiver` interface (specified below), which the receiver MUST implement. +Whether the interface above is implemented or not, the protocol MUST ensure delivery of a sent message to its **receiver** using the `IERC7786Receiver` interface (specified below), which the receiver MUST implement. Once the message can be safely delivered (see Properties), the gateway MUST invoke `executeMessage` with the message contents. @@ -152,10 +152,10 @@ MUST return `IERC7786Receiver.executeMessage.selector` (`0x675b049b`). #### Interaction Diagram -PUSH model +In the PUSH model, the Gateway calls the application with the message. ![](../assets/erc-7786/send-execute.png) -PULL model +In the PULL model, the application fetches the message from the Gateway. ![](../assets/erc-7786/send-receive.png) ### Properties From 018174a3170611fea7b042216aa6c6a5b60d2ead Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 20 Jan 2025 07:43:17 -0300 Subject: [PATCH 18/24] Add missing calldata for messageId --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index ea06d056e4f..9f47c5a7570 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -69,7 +69,7 @@ interface IERC7786GatewaySource { function supportsAttribute(bytes4 selector) external view returns (bool); function sendMessage( - bytes messageId, + bytes calldata messageId, // Unique message identifier string calldata destinationChain, // [CAIP-2] chain identifier string calldata receiver, // [CAIP-10] account address bytes calldata payload, From 51390cb094ef21bcc7636fcacf5c14237005f57a Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Tue, 21 Jan 2025 17:35:32 -0300 Subject: [PATCH 19/24] pushBased attribute specification. --- ERCS/erc-7786.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 9f47c5a7570..f7f787891e2 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -56,6 +56,7 @@ Each attribute key MUST have the format of a Solidity function signature, i.e., In this specification attributes are encoded as an array of `bytes` (i.e., `bytes[]`). Each element of the array MUST encode an attribute in the form of a Solidity function call, i.e., the first 4 bytes of the hash of the key followed by the ABI-encoded value. + ### Sending Procedure An **Source Gateway** is a contract that offers a protocol to send a message to a receiver on another chain. It MUST implement `IERC7786GatewaySource`. @@ -105,6 +106,10 @@ This event signals that a would-be sender has requested a message to be sent. If `outboxId` is present, post-processing MAY be required to send the message through the cross-chain channel. +#### PUSH v/s PULL communication mode + +This standard supports two communication modes. The PUSH mode allows the Gateway on the destination chain to deliver the message to the application, while in the PULL mode the application fetches the message from the Gateway. In order to specify which communication mode should be used, the sender can set the attribute `pushBased=true` for the PUSH mode and `pushBased=false` for PULL mode. If the `pushBased`attribute is not set, then the Gateway will set the default value `pushBased=true`. As a consequence, the Gateway MUST support the attribute `pushBased`. + #### Post-processing After a sender has invoked `sendMessage`, further action MAY be required by the gateways to make the message effective. This is called _post-processing_. For example, some payment is typically required to cover the gas of executing the message at the destination. @@ -127,7 +132,7 @@ interface IERC7786GatewayDestination { Whether the interface above is implemented or not, the protocol MUST ensure delivery of a sent message to its **receiver** using the `IERC7786Receiver` interface (specified below), which the receiver MUST implement. -Once the message can be safely delivered (see Properties), the gateway MUST invoke `executeMessage` with the message contents. +Once the message can be safely delivered (see Properties), the gateway MUST invoke `executeMessage` with the message contents, unless the sender has requested otherwise via the `pushBased` attribute. The gateway MUST verify that `executeMessage` returns the correct value, and MUST revert otherwise. From 48d93ec47e7f5db923d4381fdeb224abe655c8c7 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Tue, 21 Jan 2025 17:47:12 -0300 Subject: [PATCH 20/24] The Gateway does not have to support the pushBased attribute. --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index f7f787891e2..6741061f8ee 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -108,7 +108,7 @@ If `outboxId` is present, post-processing MAY be required to send the message th #### PUSH v/s PULL communication mode -This standard supports two communication modes. The PUSH mode allows the Gateway on the destination chain to deliver the message to the application, while in the PULL mode the application fetches the message from the Gateway. In order to specify which communication mode should be used, the sender can set the attribute `pushBased=true` for the PUSH mode and `pushBased=false` for PULL mode. If the `pushBased`attribute is not set, then the Gateway will set the default value `pushBased=true`. As a consequence, the Gateway MUST support the attribute `pushBased`. +This standard supports two communication modes. The PUSH mode allows the Gateway on the destination chain to deliver the message to the application, while in the PULL mode the application fetches the message from the Gateway. In order to specify which communication mode should be used, the sender can set the attribute `pushBased=true` for the PUSH mode and `pushBased=false` for PULL mode. If the `pushBased`attribute is not set, then the Gateway will set the default value `pushBased=true`. #### Post-processing From b7e8f52c00c2491c117a9f35330b7db268681b2c Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Tue, 21 Jan 2025 17:48:48 -0300 Subject: [PATCH 21/24] Fix typo --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 6741061f8ee..bb74804e50d 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -59,7 +59,7 @@ In this specification attributes are encoded as an array of `bytes` (i.e., `byte ### Sending Procedure -An **Source Gateway** is a contract that offers a protocol to send a message to a receiver on another chain. It MUST implement `IERC7786GatewaySource`. +A **Source Gateway** is a contract that offers a protocol to send a message to a receiver on another chain. It MUST implement `IERC7786GatewaySource`. ```solidity interface IERC7786GatewaySource { From 347fa596c7aa191a4d7eeb62037510923d45506d Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 3 Mar 2025 10:10:26 -0300 Subject: [PATCH 22/24] Update ERCS/erc-7786.md Co-authored-by: CJ Cobb <46455409+cjcobb23@users.noreply.github.com> --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index bb74804e50d..de69b955994 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -118,7 +118,7 @@ The exact interface for any such action is out of scope of this ERC. If the `pos ### Reception Procedure -A **Destination Gateway** is a contract that allows the application to obtain the message. Optionally the Gateway can provide an interface to let the application on the destination chain fetch a message stored by the Gateway providing only the unique message identifier. +A **Destination Gateway** is a contract that receives the sent messages. The gateway either passes the message to the app via `executeMessage` (in the push based model), or stores the message for later reading (in the pull based model). ```solidity interface IERC7786GatewayDestination { From 39159f76fbf609b1dd9adb9ea95941875c15eebc Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 3 Mar 2025 10:13:14 -0300 Subject: [PATCH 23/24] Remove mention of PUSH and PULL communication modes in the Motivation section. --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index de69b955994..4f04aea31a2 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -22,7 +22,7 @@ Because almost every protocol implements a different workflow using a specific i The objective of this ERC is to provide a standard interface, and corresponding workflows, for performing cross-chain communication between contracts. Existing cross-chain communication protocols that do not natively implement this interface should be able to adopt it using adapter gateway contracts. -Compared to previous ERCs in this area, this ERC offers compatibility with chains outside of the Ethereum/EVM ecosystem, and it is extensible to support the different feature sets of various protocols while offering a shared core of standard functionality. Moreover, this standard supports both PUSH and PULL communication modes, capturing a larger class of interoperability protocols. +Compared to previous ERCs in this area, this ERC offers compatibility with chains outside of the Ethereum/EVM ecosystem, and it is extensible to support the different feature sets of various protocols while offering a shared core of standard functionality. ## Specification From b566adbdca2947c4d9511dc8958734137574fb95 Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Mon, 3 Mar 2025 17:07:15 -0300 Subject: [PATCH 24/24] Add comment for parameter of function. --- ERCS/erc-7786.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ERCS/erc-7786.md b/ERCS/erc-7786.md index 4f04aea31a2..326d56fcb32 100644 --- a/ERCS/erc-7786.md +++ b/ERCS/erc-7786.md @@ -125,7 +125,7 @@ interface IERC7786GatewayDestination { // Optional function receiveMessage( - bytes calldata messageId, + bytes calldata messageId, // Unique message identifier ) external returns (Message memory); } ```