From c375400d71af7b05a18c09186bdaf2ed871c57b2 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:02:18 -0300 Subject: [PATCH 01/12] add mp unified specs --- .../message-passing-unified-specs.md | 221 ++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 specs/message-passing/message-passing-unified-specs.md diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md new file mode 100644 index 0000000..d67279a --- /dev/null +++ b/specs/message-passing/message-passing-unified-specs.md @@ -0,0 +1,221 @@ +# Cross Messaging Unification + +*This document aims to foster collaboration on existing standard specifications, without prescribing whether the best path forward involves evolving current ERCs or considering complementary directions.* + +## Context + +We propose a “unified” cross‑chain‑messaging interface that starts from ERC‑7786 and borrows useful ideas from ERC‑6170, ERC‑7854, and the Interop Working Group discussions. + +The primary audience is application developers, who need a predictable, ergonomic API rather than a patchwork of bridge‑specific contracts. + +This draft keeps 7786’s proven core but adds just enough opinionated structure—notably binary interoperable addresses and optional hooks—to make implementations consistent and developer‑friendly. + +👉 **This unified version is open for discussion and collaboration, and we welcome feedback and contributions from the community.** + +--- + +## Specification + +A complete specification primarily consists of four logical building blocks: + +1. **Gateway:** The canonical entry point API for the cross‑chain message flow. On the origin chain, it lets contracts send messages, emits a tracking event, and (optionally) invokes hook calls. On the destination chain, each implementation provides its own Destination Gateway, which is responsible for verifying the proof and delivering the message to the recipient. +2. **Recipient Interface**: A minimal contract API that must be implemented by any application wishing to receive messages. +3. Message: The envelope that travels cross‑chain: sender, recipient, payload, and extra data (implementation‑specific). +4. **Hooks**: Opt‑in extension points that let developers run arbitrary logic before or after the sending, without polluting the Gateway surface. + +### Message Field Encoding + +A cross-chain message consists of a is sender/recipient, payload, extra data and hooks. + +### Sender and Recipient + +Binary interoperable addresses (ERC‑XXXX), containing the account address and chain identifier (from CAIP‑2). + +### Payload and Extra Data + +The payload is an opaque `bytes` value. The Extra Data supplies any extra logic (e.g. low-level call) that developer wants to execute inside in the underlying message protocol logic. + +### Hooks + +A hook is any contract that should be executed around the core message sending. They make it possible for developers to include any external logic apart from the underlying message protocol entry point when sending a message. Hooks are encapsulated under a struct that contains the hook payload, and the address of the hook, which must be compliant with a binary representation of Interoperable Address and value. Hooks are never part of the message delivered to the recipient; they only affect the execution environment on the origin chain. + +### Interfaces + +Smart contracts interact with a `Gateway` to send and receive messages.Using hooks (`HookData`) is optional. + +```solidity +interface IGateway { + // Optional Hook data struct + struct HookData { + bytes hookPayload; // Low-level call within its parameters + ILocalAddress hook; // Binary Interoperable Address + uint256 value; // Optional, native token forwarded to the hook + } + + event MessageSent( + bytes32 outboxId, // Unique ID (may be 0 if the gateway doesn’t track) + bytes sender, // Binary Interoperable Address + bytes recipient, // Binary Interoperable Address + bytes payload, // Message content + bytes calldata extraData, // Gateway-specific hints, in some cases is not required + HookData calldata hookData // Optional Hook data + ); + + function sendMessage( +~~~~ bytes calldata recipient, // Binary Interoperable Address + bytes calldata payload, // Message content + bytes calldata extraData, // Gateway‑specific parameters (may be empty) + HookData calldata hookData // Optional Hook definition + ) external payable returns (bytes32 outboxId); // Unique ID (0 if unused) +} +``` + +The destination `IGateway` is out of scope in this specification. Its responsibility is to deliver the message to the recipient, which must implement the `IMessageRecipient` interface. + +```solidity +interface IMessageRecipient { + function receiveMessage( + bytes32 messageId, // Unique ID supplied by the destination gateway + bytes sender, // Binary Interoperable Address representation + bytes payload // Raw bytes of message content + ) external payable; +} +``` + +# Flows + +A first glance on the existing and proposed flow. + +## (As Reference) ERC-7786 flow: + +```mermaid +sequenceDiagram + participant User + participant GatewaySource as IERC7786GatewaySource (Chain A) + participant Relayer as Relayer / Post‑Processing + participant GatewayDestination as Destination Gateway (Chain B) + participant Receiver as IERC7786Receiver + + User->>GatewaySource: sendMessage(destinationChain, receiver, payload, attributes) + GatewaySource->>GatewaySource: emit MessagePosted(outboxId, sender, receiver, payload, value, attributes) + Note over Relayer: The post-processing or
relaying step triggers eventually + Relayer->>GatewayDestination: preReceive(parameters) "This is ONLY illustrative" + GatewayDestination->>GatewayDestination: verify proof & parse message + GatewayDestination->>Receiver: executeMessage(messageId, sourceChain, sender, payload, attributes) + Receiver-->>GatewayDestination: returns IERC7786Receiver.executeMessage.selector +``` + +## (As Reference) ERC-7854 flow: + +```mermaid +sequenceDiagram + participant User + participant MailboxA as Mailbox (Chain A) + participant Relayer as Off-Chain Relayer + participant MailboxB as Mailbox (Chain B) + participant Recipient as IMessageRecipient + + User->>MailboxA: dispatch(destinationDomain, recipientAddress, body, customHookMetadata...) + Note over MailboxA: Handling bridging
logic off-chain
Hook calls + MailboxA->>MailboxA: emit Dispatch (sender, destination, recipient, message) + MailboxA->>MailboxA: emit DispatchId (messageId) + MailboxA->>Relayer: Off-chain bridging flow + + Relayer->>MailboxB: process(_metadata, _message) + MailboxB->>MailboxB: verify() with ISM + MailboxB->>Recipient: handle(origin, sender, _message) + MailboxB->>MailboxB: emit Process (origin, sender, recipient) + MailboxB->>MailboxB: emit ProcessId (messageId) + +``` + +## Proposed flow: + +As well as above, this flow shows how it could work on top of the OP Stack message passing protocol. + +```mermaid +sequenceDiagram + participant User + participant GatewayA as Gateway (Chain A) + participant HookA as Hook (Chain A) + participant Relayer as Off-Chain Relayer + participant GatewayB as Gateway (Chain B) + participant Recipient as IMessageRecipient + + User->>GatewayA: sendMessage(recipient, payload, extraData, hookData) + Note over GatewayA: Handling bridging
logic off-chain + GatewayA->>HookA: hookData + GatewayA-->>Relayer: Off-chain bridging flow + GatewayA->>GatewayA: MessageSent (messageId, sender, recipient, payload) + + Note over GatewayB: using deliverMessage as example method, destination Gateway is out of scope + Relayer-->>GatewayB: deliverMessage(metadata, message) + GatewayB->>GatewayB: runVerifications() + GatewayB->>Recipient: receiveMessage(messageId, sender, payload) + +``` + +```mermaid +graph TD + Relayer + + subgraph Origin Chain + GatewayE[Gateway] + Sender --"sendMessage(recipient, payload, extraData, hookData)"-->GatewayE + GatewayE --"run HookData()"-->HookContract + end + + + subgraph Destination Chain + _GatewayR_[Gateway] + Recipient + + _GatewayR_ --"_run verifications(☁️)_"--> _GatewayR_ + _GatewayR_ --"receiveMessage(messageId, sender, payload)"--> Recipient + end + Relayer --"_deliverMessage(messageId, sender, payload)_"--> _GatewayR_ + +``` + +## Rationale and Discussions + +This design is an incremental alignment from what is best0 and evolve from ERC-7786 and other standards contributions. + +**What stays the same** + +- **Unchanged core API:** send and receive messages behave exactly as in ERC-7786. Adapters would remain the same way. +- **Safety / Liveness expectations**: All guarantees listed in ERC-7786 are inherited unchanged. +- Event-driven tracking: an `outboxId` is still emitted on the origin chain, and a `messageId` is returned on the destination chain. + +**What is added** + +- **Hooks (optional):** A `HookData` struct lets a project plug in fee payment, logging, batched calls, callbacks or any other external logic without bloating the base call. +- **Future‑proof addressing:** Binary interoperable addresses (ERC-XXXX); 7786 plans to adopt the same format, so this is forward‑compatible. +- **Clear separation of concerns**: `extraData` tweaks behavior inside the gateway, while `HookData` runs code outside the gateway. + +**Hooks vs. Attributes** + +ERC-7786 introduces attributes (key/value blobs interpreted by the gateway). Hooks fill the same niche but with two advantages: + +1. Arbitrary Logic: A hook is an external contract (often immutable) that runs any code the gateway’s `msg.sender` is authorized to execute. Developers are not limited to the selectors that the gateway happened to implement. So, They let developers import new selectors (functions) that the gateway never anticipated. +2. No bloat for minimal gateways: A bare-bones gateway doesn’t need to parse or store attribute blobs. If a project wants richer behavior, it can deploy its own hook contract. +3. Isolate risk: if a hook misbehaves, only that hook’s callers are affected, the core gateway remains simple and auditable. + +`ExtraData` and `HookData` + +- **`extraData`**: small blobs consumed *inside* the gateway (relevant for adapters e.g., define the gas limit or a caller). +- **`hookData`**: full contract calls executed *outside* the gateway (e.g., pay a relayer, emit custom analytics, trigger another bridge). + +# Appendix + +## High-level Delta + +| **Change** | ERC-7786 | ERC-7854 | Unification | **Why?** | +| --- | --- | --- | --- | --- | +| **Renames** | `Gateway`, `sendMessage`, `executeMessage` | `Mailbox`, `dispatch`, `process`, `handle` | `Gateway`, `sendMessage`, `receiveMessage` | Fresh terminology around more common conventions. | +| **Message Struct** | No explicit struct. Parameters are passed directly: `destinationChain` (or `sourceChain`), `receiver` (or `sender`), `payload`, `attributes`. | Contains: `version`, `nonce`, `origin`, `sender`, `destination`, `recipient`, `body`. | No explicit struct. `Parameters` are passed directly: `sender` (or `recipient`) `payload`, `extraData`, `HookData`, and `messageId` in destination. | Simpler surface; extra inputs stays in `extraData` or `HookData` instead of bloating the envelope. | +| **Chain identifier and addresses** | `string` based; follows CAIP rules. There is an intention to support binary representations and interoperable addresses. | Uses `uint32` and `bytes32` without defined standards. | Under development binary interoperable address, in `bytes`. | Chain-agnostic and accommodate the address efforts in the interop group. | +| Message identifiers | Gateway generates an `outboxId` in origin and `messageId` to be used in the destination. | Defined in the struct with `nonce`. | `outboxId` (origin event) and `messageId` (destination callback). | Leaves identifier format to the transport layer while giving explorers two stable anchors. | +| **Events** | Only `MessagePosted`. | Not defined in the standard. It's worth to add Hyperlane’s implementation introduces `Dispatch`, `DispatchId`, `ProcessId`, and `Process` events. | Defined as `MessageSent` in the origin Gateway. | One standardised event makes indexing uniform and keeps the destination side stateless. | +| **Post sending messages / Hooks Declaration** | Under `attributes`, as an optional feature. | Part of `dispatch` as `calldata` with appointed interface. | Encapsulated under `Hookdata` struct, (`hook`, `hookPayload` and `value`). Executed outside the gateway. | Hooks give full flexibility without bloating the core API; gateways that don’t need them can ignore the field. | +| Verification step | Abstracted from the interface. | Defined as an ISM. | Abstracted from the interface. | Keeps this ERC small; verification frameworks evolve quickly and deserve their own track. | From 56a396c9c61ee21aaab4fe3b1a39d903ad4342d0 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:56:26 -0300 Subject: [PATCH 02/12] improvements and add links --- .../message-passing-unified-specs.md | 62 +++++++++---------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md index d67279a..be72298 100644 --- a/specs/message-passing/message-passing-unified-specs.md +++ b/specs/message-passing/message-passing-unified-specs.md @@ -4,7 +4,7 @@ ## Context -We propose a “unified” cross‑chain‑messaging interface that starts from ERC‑7786 and borrows useful ideas from ERC‑6170, ERC‑7854, and the Interop Working Group discussions. +We propose a “unified” cross‑chain‑messaging interface that starts from [ERC‑7786](https://github.com/ethereum/ERCs/blob/448902e83117f175b4f682fb2d60545709df8cef/ERCS/erc-7786.md) and borrows useful ideas from [ERC‑6170](https://github.com/ethereum/ERCs/blob/448902e83117f175b4f682fb2d60545709df8cef/ERCS/erc-6170.md), [ERC‑7854](https://github.com/ethereum/ERCs/pull/817), and the [Interop Working Group discussions](https://github.com/ethereum/L2-interop/pull/13). The primary audience is application developers, who need a predictable, ergonomic API rather than a patchwork of bridge‑specific contracts. @@ -18,26 +18,26 @@ This draft keeps 7786’s proven core but adds just enough opinionated structure A complete specification primarily consists of four logical building blocks: -1. **Gateway:** The canonical entry point API for the cross‑chain message flow. On the origin chain, it lets contracts send messages, emits a tracking event, and (optionally) invokes hook calls. On the destination chain, each implementation provides its own Destination Gateway, which is responsible for verifying the proof and delivering the message to the recipient. -2. **Recipient Interface**: A minimal contract API that must be implemented by any application wishing to receive messages. -3. Message: The envelope that travels cross‑chain: sender, recipient, payload, and extra data (implementation‑specific). +1. **Gateway:** The canonical entry point API for the cross‑chain message flow. On the origin chain, it lets contracts send messages, emits a tracking event, and (optionally) invokes hook calls. On the destination chain, each implementation provides its own Destination Gateway, which might be responsible for verifying the proof and delivering the message to the recipient. +2. **Recipient Interface**: A minimal contract API that must be implemented by any contract wishing to receive cross-chain messages. +3. **Message**: The cross-chain data structure containing sender, recipient, payload, and implementation-specific extra data required by the underlying bridge to handle delivery or verification. 4. **Hooks**: Opt‑in extension points that let developers run arbitrary logic before or after the sending, without polluting the Gateway surface. ### Message Field Encoding -A cross-chain message consists of a is sender/recipient, payload, extra data and hooks. +A cross-chain message includes sender and recipient addresses, a payload, extra data, and optional hooks. ### Sender and Recipient -Binary interoperable addresses (ERC‑XXXX), containing the account address and chain identifier (from CAIP‑2). +Binary interoperable addresses ([ERC‑XXXX](https://github.com/ethereum/ERCs/pull/1002)), containing the account address and chain identifier (from CAIP‑2). ### Payload and Extra Data -The payload is an opaque `bytes` value. The Extra Data supplies any extra logic (e.g. low-level call) that developer wants to execute inside in the underlying message protocol logic. +The payload is an opaque `bytes` value. The Extra Data encodes optional logic or metadata (such as low-level calls) that the underlying messaging protocol should process during delivery. ### Hooks -A hook is any contract that should be executed around the core message sending. They make it possible for developers to include any external logic apart from the underlying message protocol entry point when sending a message. Hooks are encapsulated under a struct that contains the hook payload, and the address of the hook, which must be compliant with a binary representation of Interoperable Address and value. Hooks are never part of the message delivered to the recipient; they only affect the execution environment on the origin chain. +A hook is any contract logic that the application developer wants to execute after a message is sent from the origin chain. They make it possible for developers to include any external logic apart from the underlying message protocol entry point when sending a message. Hooks are encapsulated under a struct that contains the hook payload, and the address of the hook, which must be compliant with a binary representation of Interoperable Address and value. Hooks are never part of the message delivered to the recipient; they only affect the execution environment on the origin chain. ### Interfaces @@ -47,26 +47,26 @@ Smart contracts interact with a `Gateway` to send and receive messages.Using hoo interface IGateway { // Optional Hook data struct struct HookData { - bytes hookPayload; // Low-level call within its parameters - ILocalAddress hook; // Binary Interoperable Address - uint256 value; // Optional, native token forwarded to the hook - } + bytes hookPayload; // Low-level call within its parameters + ILocalAddress hook; // Local Address + uint256 value; // Optional, native token forwarded to the hook + } event MessageSent( - bytes32 outboxId, // Unique ID (may be 0 if the gateway doesn’t track) - bytes sender, // Binary Interoperable Address - bytes recipient, // Binary Interoperable Address - bytes payload, // Message content - bytes calldata extraData, // Gateway-specific hints, in some cases is not required - HookData calldata hookData // Optional Hook data - ); + bytes32 outboxId, // Unique ID (may be 0 if the gateway doesn’t track) + bytes sender, // Binary Interoperable Address representation + bytes recipient, // Binary Interoperable Address representation + bytes payload, // Raw bytes of message content + bytes calldata extraData, // Optional encoded gateway metadata (leave empty if unused) + HookData calldata hookData // Optional Hook data + ); function sendMessage( -~~~~ bytes calldata recipient, // Binary Interoperable Address - bytes calldata payload, // Message content - bytes calldata extraData, // Gateway‑specific parameters (may be empty) - HookData calldata hookData // Optional Hook definition - ) external payable returns (bytes32 outboxId); // Unique ID (0 if unused) + bytes calldata recipient, // Binary Interoperable Address representation + bytes calldata payload, // Raw bytes of message content + bytes calldata extraData, // Optional encoded gateway metadata (leave empty if unused) + HookData calldata hookData // Optional Hook data + ) external payable returns (bytes32 outboxId); // Unique ID (may be 0 if the gateway doesn’t track) } ``` @@ -75,9 +75,9 @@ The destination `IGateway` is out of scope in this specification. Its responsibi ```solidity interface IMessageRecipient { function receiveMessage( - bytes32 messageId, // Unique ID supplied by the destination gateway - bytes sender, // Binary Interoperable Address representation - bytes payload // Raw bytes of message content + bytes32 messageId, // Unique ID supplied by the destination gateway + bytes sender, // Binary Interoperable Address representation + bytes payload // Raw bytes of message content ) external payable; } ``` @@ -116,7 +116,6 @@ sequenceDiagram participant Recipient as IMessageRecipient User->>MailboxA: dispatch(destinationDomain, recipientAddress, body, customHookMetadata...) - Note over MailboxA: Handling bridging
logic off-chain
Hook calls MailboxA->>MailboxA: emit Dispatch (sender, destination, recipient, message) MailboxA->>MailboxA: emit DispatchId (messageId) MailboxA->>Relayer: Off-chain bridging flow @@ -143,10 +142,9 @@ sequenceDiagram participant Recipient as IMessageRecipient User->>GatewayA: sendMessage(recipient, payload, extraData, hookData) - Note over GatewayA: Handling bridging
logic off-chain GatewayA->>HookA: hookData - GatewayA-->>Relayer: Off-chain bridging flow GatewayA->>GatewayA: MessageSent (messageId, sender, recipient, payload) + GatewayA-->>Relayer: Off-chain bridging flow Note over GatewayB: using deliverMessage as example method, destination Gateway is out of scope Relayer-->>GatewayB: deliverMessage(metadata, message) @@ -179,7 +177,7 @@ graph TD ## Rationale and Discussions -This design is an incremental alignment from what is best0 and evolve from ERC-7786 and other standards contributions. +This design is an incremental evolution based on ERC-7786 and other related standards, aligning progressively with what is considered best practice. **What stays the same** @@ -197,7 +195,7 @@ This design is an incremental alignment from what is best0 and evolve from ERC-7 ERC-7786 introduces attributes (key/value blobs interpreted by the gateway). Hooks fill the same niche but with two advantages: -1. Arbitrary Logic: A hook is an external contract (often immutable) that runs any code the gateway’s `msg.sender` is authorized to execute. Developers are not limited to the selectors that the gateway happened to implement. So, They let developers import new selectors (functions) that the gateway never anticipated. +1. Arbitrary Logic: A hook is external contract logic that the message sender wants to execute. Hooks remove the limitation of relying solely on the selectors implemented by the Gateway, enabling developers to execute arbitrary functions the Gateway didn’t originally anticipate. 2. No bloat for minimal gateways: A bare-bones gateway doesn’t need to parse or store attribute blobs. If a project wants richer behavior, it can deploy its own hook contract. 3. Isolate risk: if a hook misbehaves, only that hook’s callers are affected, the core gateway remains simple and auditable. From d4977b06a794f25f2b22e6799a150c03828cefb7 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:59:51 -0300 Subject: [PATCH 03/12] improve table --- specs/message-passing/message-passing-unified-specs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md index be72298..bba7a43 100644 --- a/specs/message-passing/message-passing-unified-specs.md +++ b/specs/message-passing/message-passing-unified-specs.md @@ -216,4 +216,4 @@ ERC-7786 introduces attributes (key/value blobs interpreted by the gateway). Hoo | Message identifiers | Gateway generates an `outboxId` in origin and `messageId` to be used in the destination. | Defined in the struct with `nonce`. | `outboxId` (origin event) and `messageId` (destination callback). | Leaves identifier format to the transport layer while giving explorers two stable anchors. | | **Events** | Only `MessagePosted`. | Not defined in the standard. It's worth to add Hyperlane’s implementation introduces `Dispatch`, `DispatchId`, `ProcessId`, and `Process` events. | Defined as `MessageSent` in the origin Gateway. | One standardised event makes indexing uniform and keeps the destination side stateless. | | **Post sending messages / Hooks Declaration** | Under `attributes`, as an optional feature. | Part of `dispatch` as `calldata` with appointed interface. | Encapsulated under `Hookdata` struct, (`hook`, `hookPayload` and `value`). Executed outside the gateway. | Hooks give full flexibility without bloating the core API; gateways that don’t need them can ignore the field. | -| Verification step | Abstracted from the interface. | Defined as an ISM. | Abstracted from the interface. | Keeps this ERC small; verification frameworks evolve quickly and deserve their own track. | +| Verification step | Abstracted from the interface (out of scope) | Defined as an ISM. | Abstracted from the interface (out of scope) | Keeps this ERC small; verification frameworks evolve quickly and deserve their own track. | From a516703e5ffb8548f2f73bc4ea8663bd2de4bc0d Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:35:29 -0300 Subject: [PATCH 04/12] adjust code --- .../message-passing-unified-specs.md | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md index bba7a43..22a3ca6 100644 --- a/specs/message-passing/message-passing-unified-specs.md +++ b/specs/message-passing/message-passing-unified-specs.md @@ -37,36 +37,38 @@ The payload is an opaque `bytes` value. The Extra Data encodes optional logic ### Hooks -A hook is any contract logic that the application developer wants to execute after a message is sent from the origin chain. They make it possible for developers to include any external logic apart from the underlying message protocol entry point when sending a message. Hooks are encapsulated under a struct that contains the hook payload, and the address of the hook, which must be compliant with a binary representation of Interoperable Address and value. Hooks are never part of the message delivered to the recipient; they only affect the execution environment on the origin chain. +A hook is any contract logic that the application developer wants to execute after a message is sent from the origin chain. They make it possible for developers to include any external logic apart from the underlying message protocol entry point when sending a message. Hooks are encapsulated under a struct that contains the hook payload, and the local address of the hook, and value. Hooks are never part of the message delivered to the recipient; they only affect the execution environment on the origin chain. ### Interfaces -Smart contracts interact with a `Gateway` to send and receive messages.Using hooks (`HookData`) is optional. +Smart contracts interact with a `Gateway` to send and receive messages. Using hooks (`HookData`) is optional. ```solidity interface IGateway { // Optional Hook data struct struct HookData { - bytes hookPayload; // Low-level call within its parameters - ILocalAddress hook; // Local Address - uint256 value; // Optional, native token forwarded to the hook - } + bytes hookPayload; // Low-level call data: selector and parameters for the hook + ILocalAddress hook; // Local origin chain address + uint256 value; // Optional, amount of native token forwarded to the hook + } + // MessageSent event event MessageSent( - bytes32 outboxId, // Unique ID (may be 0 if the gateway doesn’t track) - bytes sender, // Binary Interoperable Address representation - bytes recipient, // Binary Interoperable Address representation - bytes payload, // Raw bytes of message content - bytes calldata extraData, // Optional encoded gateway metadata (leave empty if unused) - HookData calldata hookData // Optional Hook data - ); + bytes32 outboxId, // Unique outbox ID (may be 0 if the gateway doesn’t track) + bytes sender, // Binary Interoperable Address + bytes recipient, // Binary Interoperable Address + bytes payload, // Message content + bytes extraData, // Optional encoded gateway metadata (leave empty if unused) + HookData hookData // Optional Hook data + ); + // sendMessage function function sendMessage( - bytes calldata recipient, // Binary Interoperable Address representation - bytes calldata payload, // Raw bytes of message content - bytes calldata extraData, // Optional encoded gateway metadata (leave empty if unused) - HookData calldata hookData // Optional Hook data - ) external payable returns (bytes32 outboxId); // Unique ID (may be 0 if the gateway doesn’t track) + bytes calldata recipient, // Binary Interoperable Address + bytes calldata payload, // Message content + bytes calldata extraData, // Optional encoded gateway metadata (leave empty if unused) + HookData calldata hookData // Optional Hook data + ) external payable returns (bytes32 outboxId); // Unique ID (may be 0 if the gateway doesn’t track) } ``` @@ -74,11 +76,11 @@ The destination `IGateway` is out of scope in this specification. Its responsibi ```solidity interface IMessageRecipient { - function receiveMessage( - bytes32 messageId, // Unique ID supplied by the destination gateway - bytes sender, // Binary Interoperable Address representation - bytes payload // Raw bytes of message content - ) external payable; + function receiveMessage( + bytes32 messageId, // Unique ID supplied by the destination gateway + bytes sender, // Binary Interoperable Address representation + bytes payload // Message content + ) external payable; } ``` @@ -183,7 +185,7 @@ This design is an incremental evolution based on ERC-7786 and other related stan - **Unchanged core API:** send and receive messages behave exactly as in ERC-7786. Adapters would remain the same way. - **Safety / Liveness expectations**: All guarantees listed in ERC-7786 are inherited unchanged. -- Event-driven tracking: an `outboxId` is still emitted on the origin chain, and a `messageId` is returned on the destination chain. +- **Event-driven tracking**: an `outboxId` is still emitted on the origin chain, and a `messageId` is provided by the relaying/deliver step on the destination chain. **What is added** From bf6ef09ee16c35e5713afa70c538b3651910a0d4 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:40:05 -0300 Subject: [PATCH 05/12] fix indent --- specs/message-passing/message-passing-unified-specs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md index 22a3ca6..9d98036 100644 --- a/specs/message-passing/message-passing-unified-specs.md +++ b/specs/message-passing/message-passing-unified-specs.md @@ -48,7 +48,7 @@ interface IGateway { // Optional Hook data struct struct HookData { bytes hookPayload; // Low-level call data: selector and parameters for the hook - ILocalAddress hook; // Local origin chain address + ILocalAddress hook; // Local origin chain address uint256 value; // Optional, amount of native token forwarded to the hook } From 0a7d6651e84a6d0313b8c192beed7fb278647ca8 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Tue, 15 Apr 2025 17:06:46 -0300 Subject: [PATCH 06/12] add ERC-7930 labels --- specs/message-passing/message-passing-unified-specs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md index 9d98036..f79bd77 100644 --- a/specs/message-passing/message-passing-unified-specs.md +++ b/specs/message-passing/message-passing-unified-specs.md @@ -29,7 +29,7 @@ A cross-chain message includes sender and recipient addresses, a payload, extra ### Sender and Recipient -Binary interoperable addresses ([ERC‑XXXX](https://github.com/ethereum/ERCs/pull/1002)), containing the account address and chain identifier (from CAIP‑2). +Binary interoperable addresses (see [ERC‑7930](https://github.com/ethereum/ERCs/pull/1002)), containing the account address and chain identifier (from CAIP‑2). ### Payload and Extra Data @@ -190,7 +190,7 @@ This design is an incremental evolution based on ERC-7786 and other related stan **What is added** - **Hooks (optional):** A `HookData` struct lets a project plug in fee payment, logging, batched calls, callbacks or any other external logic without bloating the base call. -- **Future‑proof addressing:** Binary interoperable addresses (ERC-XXXX); 7786 plans to adopt the same format, so this is forward‑compatible. +- **Future‑proof addressing:** Binary interoperable addresses ([ERC-7930](https://github.com/ethereum/ERCs/pull/1002)); 7786 plans to adopt the same format, so this is forward‑compatible. - **Clear separation of concerns**: `extraData` tweaks behavior inside the gateway, while `HookData` runs code outside the gateway. **Hooks vs. Attributes** @@ -214,7 +214,7 @@ ERC-7786 introduces attributes (key/value blobs interpreted by the gateway). Hoo | --- | --- | --- | --- | --- | | **Renames** | `Gateway`, `sendMessage`, `executeMessage` | `Mailbox`, `dispatch`, `process`, `handle` | `Gateway`, `sendMessage`, `receiveMessage` | Fresh terminology around more common conventions. | | **Message Struct** | No explicit struct. Parameters are passed directly: `destinationChain` (or `sourceChain`), `receiver` (or `sender`), `payload`, `attributes`. | Contains: `version`, `nonce`, `origin`, `sender`, `destination`, `recipient`, `body`. | No explicit struct. `Parameters` are passed directly: `sender` (or `recipient`) `payload`, `extraData`, `HookData`, and `messageId` in destination. | Simpler surface; extra inputs stays in `extraData` or `HookData` instead of bloating the envelope. | -| **Chain identifier and addresses** | `string` based; follows CAIP rules. There is an intention to support binary representations and interoperable addresses. | Uses `uint32` and `bytes32` without defined standards. | Under development binary interoperable address, in `bytes`. | Chain-agnostic and accommodate the address efforts in the interop group. | +| **Chain identifier and addresses** | `string` based; follows CAIP rules. There is an intention to support binary representations of [interoperable addresses](https://github.com/ethereum/ERCs/pull/1002). | Uses `uint32` and `bytes32` without defined standards. | Under development binary interoperable address, in `bytes`. | Chain-agnostic and accommodate the address efforts in the interop group. | | Message identifiers | Gateway generates an `outboxId` in origin and `messageId` to be used in the destination. | Defined in the struct with `nonce`. | `outboxId` (origin event) and `messageId` (destination callback). | Leaves identifier format to the transport layer while giving explorers two stable anchors. | | **Events** | Only `MessagePosted`. | Not defined in the standard. It's worth to add Hyperlane’s implementation introduces `Dispatch`, `DispatchId`, `ProcessId`, and `Process` events. | Defined as `MessageSent` in the origin Gateway. | One standardised event makes indexing uniform and keeps the destination side stateless. | | **Post sending messages / Hooks Declaration** | Under `attributes`, as an optional feature. | Part of `dispatch` as `calldata` with appointed interface. | Encapsulated under `Hookdata` struct, (`hook`, `hookPayload` and `value`). Executed outside the gateway. | Hooks give full flexibility without bloating the core API; gateways that don’t need them can ignore the field. | From ec82275e4d754fe648348be0e0f5ca7021504769 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Thu, 1 May 2025 13:59:41 -0300 Subject: [PATCH 07/12] add hook explainer --- specs/message-passing/hooks-explainer.md | 166 +++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 specs/message-passing/hooks-explainer.md diff --git a/specs/message-passing/hooks-explainer.md b/specs/message-passing/hooks-explainer.md new file mode 100644 index 0000000..97bf707 --- /dev/null +++ b/specs/message-passing/hooks-explainer.md @@ -0,0 +1,166 @@ +# Hooks Explainer + +## What are Hooks? + +**Hooks are extra actions that can run during the message flow.** They are composable and can change how things work without changing the messaging protocol. + +The gateway/messenger invokes the hook after sending a message, passing only `(address hook, bytes payload)`. Because the call comes from the gateway, the hook can trust the context and, if needed, query the gateway for more details about the current message. + +One valuable feature is that hooks can call other hooks, enabling *hook* action chaining. Also, hooks can be an aggregation of other hooks enabling, composition. + +## Primary Use Case: Payment for relayers + +When sending a cross-chain message, a relayer is typically required to deliver the message from the origin to the destination chain. + +To incentivize relayers and guarantee delivery, it is often necessary to commit a fee payment (which is generally calculated from expected destination gas limit + relayer commercial fee) at the moment of sending the message. + +For example by including the `hookData` field in `sendMessage`, in `Hyperlane`, users can atomically **pay the** `RelayerPaymentsContract` at the time of sending the message. + +### Flow + +- `hook` points to the relayers payment contract address. +- `hookData` encodes the call to pay the gas fee (`payForGas(messageId, gasAmount, refundAddress)`). +- `value` includes the ETH (or native token) payment amount. + +### Example + +Suppose the `RelayerPaymentsContract` exposes the function: + +```solidity +function payForGas(bytes32 messageId, uint256 gasAmount, address refundAddress) + external payable; +``` + +The `hookData` passed to `sendMessage` would be: + +```solidity +HookData({ + hook: address(RelayerPaymentsContract), + hookPayload: abi.encodeCall( + RelayerPaymentsContract.payForGas, + (messageId, 300_000, userAddress) + ), + value: 0.02 ether +}); +``` + +Thus, the flow would be: + +- First, the cross-chain message is sent. +- Then, the hook is executed, paying the gas fee to the relayers’ payment contract. + +### Benefits + +- **Atomicity**: Gas payment and message sending happen in a single transaction. +- **Improved UX**: Users do not need to manually perform two transactions (pay + send). +- **Flexibility**: Gateways can support various gas payment systems without hardcoding them. +- **Optionality**: If no hook is provided, no gas prepayment occurs. + +--- + +## Additional Use Cases for Hooks (Origin Chain) + +Even beyond the relayer’s gas payment, `hookData` enables powerful extensibility in the origin chain: + +### 1. Validation of Conditions + +When sending a message, the hook could validate whether certain preconditions are satisfied (e.g., minimum balance checks, allowlist verifications). + +If the validation fails, the transaction can revert immediately. + +### 2. Bundling/Batching Multiple Messages + +Hooks can package several cross-chain messages into an atomic bundle to treat them as one logical operation on the destination side. Each subsequent message references the previous one through a hook logic. + +### 3. Notifying Other Contracts + +The hook could inform or synchronize state with external systems (e.g., registering the outgoing message in an Message Manager contract). + +### 4. Setting Up Timeout or Expiration Mechanisms + +The hook can register a timeout or expiration condition associated with the message before dispatch. + +**Example:** + +- Before sending the message, the hook inserts the message ID and a timestamp into a `TimeoutManager` contract. +- Automated fallback logic can trigger if the message is not delivered or finalized within a certain timeframe (e.g., refunds, invalidations, retries). + +**Why it matters:** + +- Protects users against messages that could remain stuck indefinitely due to network failures, relayer issues, or malicious actors. +- Enables cleaner lifecycle management by ensuring stale or abandoned messages can be handled without manual intervention. + +### 5. Callbacks-async execution + +A message can easily specify via an async/callback-hook how to continue execution, e.g., in the case of a cross-chain read/view. + + +## General Benefits of `hookData` + +- **Composable Execution**: Additional operations can be seamlessly combined with sending an intent. +- **Improved UX**: Users execute complex workflows atomically in one atomic call. +- **Future-Proof Design**: New use cases can be enabled without modifying the `sendMessage` core logic. Also the application layer can add business logic into the underlying messenger to be executed within the `sendMessage` call. +- **Optional by Nature**: Hooks are not mandatory — default behavior remains simple for users who do not require additional actions. +- Create dynamic instructions determined in runtime. + +# Hook Execution Design + +In order to ensure secure, controlled, and auditable execution of hooks, Gateways SHOULD delegate the hook execution to a dedicated `HookExecutor` contract instead of executing the hook directly. + +## Rationale + +- **Minimized Attack Surface**: The Gateway remains clean and focused on message dispatching only. +- **Centralized Security Checks**: Gas limits, address whitelisting, and value forwarding validations can be handled uniformly. +- **Future Upgradeability**: Execution models can evolve without changing the Gateway core logic. + +## Proposed Model + +- The `Gateway` validates the existence of `hookData`. +- The `Gateway` calls the `HookExecutor`, forwarding `hookData` and `msg.value` as needed. +- The `HookExecutor` executes the hook, ensuring that: + - If the hook call fails, the transaction reverts. + - Gas forwarding can be capped if necessary. + + + +## Example: Minimal Hook Executor + +```solidity +contract HookExecutor { + function executeHook(IGateway.HookData calldata hookData) external payable { + require(hookData.hook != address(0), "No hook address provided"); + + (bool success, ) = + hookData.hook.call{value: hookData.value}(hookData.hookPayload); + require(success, "Hook execution failed"); + } +} +``` + +- **Optional**: Implement `onlyGateway` access control to restrict who can trigger `executeHook`. + +## Additional Notes + +- Whether the hook is executed **pre-dispatch** or **post-dispatch** is left to the Gateway implementation. The interface itself remains agnostic. +- By default, hook failures **revert the entire transaction** to maintain safety and message atomicity. + +## Comparison + +| Aspect | Without Hooks | With Hooks | +| --- | --- | --- | +| **Extensibility (New Features)** | Hard to evolve; any new needs require gateway, or application contract upgrades. | New behaviors (e.g., payment models, service registrations) can be plugged via new hook contracts. | +| **Complexity at Gateway Level** | Gateway must implement all possible behaviors internally. | Gateway remains clean, delegating optional behaviors to external hook contracts. | +| **Transaction Atomicity** | Multi-step workflows require multiple user transactions. | Full workflows (fund, authorize, register) can happen atomically in one transaction. | +| **Optionality for Users** | Gateway has to generalize or restrict for all cases. | Hooks are purely optional; users choose to use them or not. | +| **Upgradability and Modularity** | Gateway becomes a bottleneck for protocol upgrades. | Hooks allow adding new features without touching the Gateway itself. | +| Payment for Relayers | Requires separate transactions or implicit integration in the Gateway. | Can be atomically prepaid at message dispatch time via a flexible, modular hook. | +| **Timeout and Expiration Handling** | Requires manual timeout systems or post-processing. | Can pre-register timeouts tied to message IDs, enabling automatic lifecycle management. | +| **Collateralization or Fund Locking** | Requires external pre-processing or off-chain coordination. Or a separated call after or before sending the message. | Funds can be locked atomically during the sendMessage flow through hooks. | + +# Conclusion + +Including `hookData` in the `sendMessage` interface unlocks atomic, modular, and future-proof workflows for cross-chain messaging, while keeping the core Gateway logic minimal, focused, and secure. + +Hooks allow optional pre- and post-dispatch operations — such as fee prepayment, actor authorization, fund locking, or timeout registration — without forcing all users or messages to adopt the same processing flow. + +By delegating auxiliary behaviors to external hook contracts, the protocol gains flexibility, extensibility, and safer upgrade paths, ensuring that evolving ecosystem needs can be supported without breaking core infrastructure. From ce000e26b99f243d4fac48fb762a79370a040356 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Thu, 1 May 2025 14:03:24 -0300 Subject: [PATCH 08/12] add attributes-vs-extradata --- .../attributes-vs-extradata.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 specs/message-passing/attributes-vs-extradata.md diff --git a/specs/message-passing/attributes-vs-extradata.md b/specs/message-passing/attributes-vs-extradata.md new file mode 100644 index 0000000..a9e56bc --- /dev/null +++ b/specs/message-passing/attributes-vs-extradata.md @@ -0,0 +1,44 @@ +# bytes[] attributes vs bytes extraData + +## extraData Field + +Instead of requiring structured arrays of attributes, we propose to use a single `bytes extraData` field to encode optional gateway-specific metadata. + +```solidity +// Optional encoded gateway metadata (leave empty if unused) +bytes calldata extraData +``` + +- `extraData` is an opaque blob interpreted by the origin gateway. +- It MAY contain data related to the underlying messenger logic such as gas limits, instructions, callback options, or any other protocol-specific configurations. +- If unused, `extraData` should be left empty. +- Optionally the Gateways could expose a view function that decodes their `extraData` format. This is a function defined in the `IGateway` interface but a nice to have of the Gateway implementations. + +This approach offers the following advantages: + +- **Simplicity**: The `sendMessage` interface remains minimal and easy to implement. +- **Flexibility**: Each gateway or adapter can define and interpret `extraData` freely, without requiring standardized attribute formats. +- **Gas Efficiency**: Encoding and decoding a single blob of bytes is cheaper than parsing an array of structured attributes. +- **Future Extensibility**: New metadata types can be supported within `extraData` without changing the interface. +- Attributes force upgrades whenever the underlying messenger changes, as their structure must be explicitly supported. In contrast, `extraData` avoids this need by being fully opaque and simple, allowing changes without requiring interface upgrades. + +It is recommended that gateways and adapters document their expected `extraData` formats if interoperability between adapters is desired. + +>💡 +>**Non-EVM Friendliness:** +>Using a single opaque `extraData` field improves compatibility with non-EVM chains, which may not natively support ABI encoding. It ensures that both EVM and non-EVM ecosystems can adopt the standard naturally, using their preferred serialization methods. +>This design enables cross-chain adapters to interpret metadata according to the serialization standards of their respective ecosystems without requiring translation of EVM-specific ABI structures. + +## Comparison + +| Aspect | `bytes[] attributes` | `bytes extraData` | +| --- | --- | --- | +| Format | Structured array (each entry = ABI function call) | Single opaque blob | +| Structure | Complete structured | Still structured, but it’s “proprietary” structured by the underlying messenger | +| Flexibility | High, but depends on standardizing attribute formats | Very high, gateway-specific interpretation/implementation | +| Simplicity | More complex for developers (attribute definition and parsing) | Simpler for developers (optional opaque data) | +| Composability | Facilitates standardized cross-bridge features | Relies on bridge or adapter-level documentation and agreement | +| Standardization level | can be standardized with new ERCs | the content is hard to standardize | +| Compatibility between them | cannot support opaque bytes extraData | can be encoded from bytes[] attributes | +| Gas Usage | Higher (decoding multiple structured elements) | Lower (decoding a single blob) | +| Spec Complexity | Higher (attribute standardization and management required) | Lower (no structure mandated by the interface) | From a0d63c7645a624e0f65046ec3e2cdaea696e0752 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Thu, 1 May 2025 14:05:40 -0300 Subject: [PATCH 09/12] add hook execution image --- .../message-passing/hook-execution-design.png | Bin 0 -> 143107 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 specs/message-passing/hook-execution-design.png diff --git a/specs/message-passing/hook-execution-design.png b/specs/message-passing/hook-execution-design.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf5c3f85ec1aa8f24a6a4fb5de2a34af4e3470a GIT binary patch literal 143107 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 literal 0 HcmV?d00001 From b230c78b85a9438e7bb9529ab4b98bdd3347e8a4 Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Thu, 1 May 2025 14:10:26 -0300 Subject: [PATCH 10/12] add picture and first phrase --- specs/message-passing/hooks-explainer.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specs/message-passing/hooks-explainer.md b/specs/message-passing/hooks-explainer.md index 97bf707..f85b4d9 100644 --- a/specs/message-passing/hooks-explainer.md +++ b/specs/message-passing/hooks-explainer.md @@ -1,5 +1,7 @@ # Hooks Explainer +_To see the whole picture of the proposed changes for message passing standard, please refer [here](./message-passing-unified-specs.md)._ + ## What are Hooks? **Hooks are extra actions that can run during the message flow.** They are composable and can change how things work without changing the messaging protocol. @@ -56,7 +58,6 @@ Thus, the flow would be: - **Flexibility**: Gateways can support various gas payment systems without hardcoding them. - **Optionality**: If no hook is provided, no gas prepayment occurs. ---- ## Additional Use Cases for Hooks (Origin Chain) @@ -121,7 +122,7 @@ In order to ensure secure, controlled, and auditable execution of hooks, Gateway - If the hook call fails, the transaction reverts. - Gas forwarding can be capped if necessary. - +![hook-execution-design](./hook-execution-design.png) ## Example: Minimal Hook Executor From 9d7afbc02130f9143af6553211384c335998431e Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Thu, 1 May 2025 14:11:16 -0300 Subject: [PATCH 11/12] add first phrase in extradata vs attributes --- specs/message-passing/attributes-vs-extradata.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specs/message-passing/attributes-vs-extradata.md b/specs/message-passing/attributes-vs-extradata.md index a9e56bc..249c177 100644 --- a/specs/message-passing/attributes-vs-extradata.md +++ b/specs/message-passing/attributes-vs-extradata.md @@ -1,5 +1,7 @@ # bytes[] attributes vs bytes extraData +_To see the whole picture of the proposed changes for message passing standard, please refer [here](./message-passing-unified-specs.md)._ + ## extraData Field Instead of requiring structured arrays of attributes, we propose to use a single `bytes extraData` field to encode optional gateway-specific metadata. From d3577bcfd5e6aefb060efc4bd046a5632379d4da Mon Sep 17 00:00:00 2001 From: Joxes <91908708+Joxess@users.noreply.github.com> Date: Thu, 1 May 2025 14:19:39 -0300 Subject: [PATCH 12/12] update main doc --- .../message-passing-unified-specs.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/specs/message-passing/message-passing-unified-specs.md b/specs/message-passing/message-passing-unified-specs.md index f79bd77..76cc91e 100644 --- a/specs/message-passing/message-passing-unified-specs.md +++ b/specs/message-passing/message-passing-unified-specs.md @@ -39,6 +39,8 @@ The payload is an opaque `bytes` value. The Extra Data encodes optional logic A hook is any contract logic that the application developer wants to execute after a message is sent from the origin chain. They make it possible for developers to include any external logic apart from the underlying message protocol entry point when sending a message. Hooks are encapsulated under a struct that contains the hook payload, and the local address of the hook, and value. Hooks are never part of the message delivered to the recipient; they only affect the execution environment on the origin chain. +See more on Hooks [here](./hooks-explainer.md). + ### Interfaces Smart contracts interact with a `Gateway` to send and receive messages. Using hooks (`HookData`) is optional. @@ -193,19 +195,19 @@ This design is an incremental evolution based on ERC-7786 and other related stan - **Future‑proof addressing:** Binary interoperable addresses ([ERC-7930](https://github.com/ethereum/ERCs/pull/1002)); 7786 plans to adopt the same format, so this is forward‑compatible. - **Clear separation of concerns**: `extraData` tweaks behavior inside the gateway, while `HookData` runs code outside the gateway. -**Hooks vs. Attributes** - -ERC-7786 introduces attributes (key/value blobs interpreted by the gateway). Hooks fill the same niche but with two advantages: - -1. Arbitrary Logic: A hook is external contract logic that the message sender wants to execute. Hooks remove the limitation of relying solely on the selectors implemented by the Gateway, enabling developers to execute arbitrary functions the Gateway didn’t originally anticipate. -2. No bloat for minimal gateways: A bare-bones gateway doesn’t need to parse or store attribute blobs. If a project wants richer behavior, it can deploy its own hook contract. -3. Isolate risk: if a hook misbehaves, only that hook’s callers are affected, the core gateway remains simple and auditable. - `ExtraData` and `HookData` - **`extraData`**: small blobs consumed *inside* the gateway (relevant for adapters e.g., define the gas limit or a caller). - **`hookData`**: full contract calls executed *outside* the gateway (e.g., pay a relayer, emit custom analytics, trigger another bridge). +**Hooks Explainer** + +Refer to [this document which expands about Hooks](./hooks-explainer.md). + +**ExtraData vs attributes** + +Refeter to [this document which compare both approaches](./attributes-vs-extradata.md). + # Appendix ## High-level Delta