ERC-3668 为以太坊引入了链外数据查询技术方案,为智能合约获取链外数据设立了运行标准。
作者:imToken
封面:Photo by Shubham Dhage on Unsplash
ERC-3668 为以太坊引入了链外数据查询技术方案,为智能合约获取链外数据设立了运行标准。
设计目的
ERC-3668 旨在降低以太坊主网的存储和交易成本,该技术标准支持智能合约从链外获取数据,并可以对返回的数据进行解码和验证。
运行步骤
(1)调用合约,合约会回复一个信息,表明调用的数据可在链外找到。
(2)客户端使用步骤(1)中提供的地址调用网关服务。
(3)使用步骤(1)和步骤(2)的数据查询合约或发送交易,客户端调用合约,提供步骤(2)中的响应和步骤 (1) 中合约返回的数据,合约可以对返回的数据进行解码和验证。
客户端要求
支持读取的客户端使用以下流程进行合约调用:
(1)将数据设为提供给合约调用,并调用合约地址。
(2)正常调用地址处的合约函数,提供数据作为输入数据。如果函数返回成功结果,则将其返回给调用者并停止。
(3)如果函数返回 OffchainLookup 以外的错误结果,则按常规方式将其返回给调用者。
(4)否则,从 OffchainLookup 错误中解码发送方、urls、callData、callbackFunction 和 extraData 参数。
(5)如果发送者字段与被调用合约的地址不匹配,则向调用者返回错误并停止。
(6)将发送方替换为小写 0x 前缀十六进制格式的发送方参数,并将数据替换为 0x 前缀十六进制格式的 callData 参数,从而构建请求 URL。客户端可选择按顺序尝试哪些 URL,但应优先选择列表中较前的 URL,而不是列表中较后的 URL。
(7)向请求 URL 发出 HTTP GET 请求。
(8)如果响应代码在 400-499 范围内,则向调用者返回错误并停止,如果响应代码范围在 500-599 之间,则返回第(5)步骤并选择不同的 URL,如果没有其他 URL 可试,则停止。
(9)否则,用 ABI 编码调用由 4 字节选择器 callbackFunction 指定的合约函数来替换数据,并提供返回的数据。
注意事项
需要注意的是,ERC-3668 技术标准的实施具备灵活性, 适用于只读合约调用,验证链外数据合法性的安全模型由客户端和网关商定,并根据使用情况有所不同。
免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。