EIP-3668 跨链读取-安全的链外数据获取

EIP-3668: CCIP Read: Secure offchain data retrieval

CCIP:Cross-Chain Interoperability Protocol

作者信息: nick.eth(Lead developer of ENS & Ethereum Foundation alum)

EIP英文      EIP中文

https://ethereum-magicians.org/t/durin-secure-offchain-data-retrieval/6728

动机:通过定制化的协议来实现链外(跨链)数据检索/存储(基于链上数据最小化存储原则)

![](<https://i.imgur.com/yrmsWuF.png>)

典型用例:在非ETH主网上使用ENS解析服务

系统角色:

  1. 用户客户端
  2. 链上合约(evm兼容链)
  3. http网关(可以是非http形式,但是最基本的形态可能就是http网关。中心或去中心,当前的实现可能主要基于中心化)
┌──────┐                                          ┌────────┐ ┌─────────────┐
│Client│                                          │Contract│ │Gateway @ url│
└──┬───┘                                          └───┬────┘ └──────┬──────┘
   │                                                  │             │
   │ somefunc(...)                                    │             │
   ├─────────────────────────────────────────────────►│             │
   │                                                  │             │
   │ revert OffchainData(sender, urls, callData,      │             │
   │                     callbackFunction, extraData) │             │
   │◄─────────────────────────────────────────────────┤             │
   │                                                  │             │
   │ HTTP request (sender, callData)                  │             │
   ├──────────────────────────────────────────────────┼────────────►│
   │                                                  │             │
   │ Response (result)                                │             │
   │◄─────────────────────────────────────────────────┼─────────────┤
   │                                                  │             │
   │ callbackFunction(result, extraData)              │             │
   ├─────────────────────────────────────────────────►│             │
   │                                                  │             │
   │ answer                                           │             │
   │◄─────────────────────────────────────────────────┤             │
   │                                                  │             │

上面时序图看着复杂但是逻辑其实很简答: ‘客户端’调用‘链上合约’,合约抛出指定的‘结构化‘错误(revert error),客户端通过解析这个错误可以获取到‘网关’的链接方式以及校验网关输出内容的链上合约函数地址。

举一个跨链使用ENS的场景(想象中):