其他
超越预言机:互联网计算机上容器智能合约的直接 HTTPS 呼出
用于智能合约的 HTTPS 呼出机制支持广泛的应用程序 —— 例如,以无需信任的方式直接集成到互联网计算机中的预言机服务、用户通知以及任何其他需要与互联网上的服务器通信的东西。
启用容器智能合约以进行 HTTPS 呼出是更大的研发重点和专注于互联网计算机的一般集成的关键要素,ICP 社区在 2 月以压倒性多数通过了 NNS 设计提案来实现这一功能,它现在可以在主网上使用,并附有详细的文档。(请参阅下文以了解有关相关示例 dapp 的更多信息)
到目前为止,容器智能合约只能与基于 IC 构建的其他服务对话的限制阻碍了可部署用于几个重要用例的容器的开发,这些包括:
获取加密货币的实时汇率以构建 DeFi 应用程序,查询去中心化保险服务的天气数据,以及访问体育比分、投票结果、股票价格以及 Web2 服务必须提供的大量数据等内容。 通过传统通信渠道发送推送通知和电子邮件。 通过与多个相应的基于 HTTP 的云节点通信,与其他区块链集成。
区块链通常依赖于预言机,其中链下授权从特定的外部数据源读取数据并将数据写入该数据源的特殊智能合约,然后,开发人员可以编写自己的智能合约,通过使用预言机智能合约作为代理与数据源进行交互。这种方法有一些缺点:
因为它通常存在于链下,负责填充智能合约的权威是另一个必须被信任的实体。 它也是另一个可能失败的实体,即使运营商没有任何恶意。 此外,对于不广泛需要的用例,链下设置可能过于昂贵。
我们采取了不同的方法来解决 IC 上的这个问题,从公开的 API 的角度来看,这实质上涉及允许容器直接对任何基于 HTTP 的外部数据源进行 HTTPS 调用。
此功能涵盖了通常由预言机服务提供的主要功能子集,但它以无需信任的方式进行,即不需要将需要进一步信任假设的预言机等其他方引入到整体信任模型中。
上面幻灯片中显示的代码片段显示了它是多么容易,但幕后发生的事情要复杂一些。
当发出呼出时,它实际上处于子网的复制状态,一旦副本看到处于复制状态的调用,它就会调用容器对外部数据源进行的调用,这适用于所有副本。
每个 IC 的副本都需要进行相同的调用并就结果达成共识,一旦副本能够就对请求的响应达成共识,它们会将其作为一种特殊类型的有效负载包含在 IC 区块中。
最后,一旦这个区块完成,它就会被传递到执行层,执行层会将 HTTP 响应传递给发出 HTTP 请求的容器,容器现在可以安全地使用 HTTP 响应来更改其状态,而不会冒跨副本出现分歧的风险。
为了能够就响应是什么达成共识,容器可能有必要公开一个转换函数,该函数通过删除不同响应中可能不同的部分来规范化不同副本接收到的响应,例如时间戳或每个响应的标识符,与在 Web2 应用程序中发出 HTTP 请求的方式相比,必须提供转换函数是编程模型的不同之处。
为了演示此功能的实际应用,我们构建了一个汇率示例 dapp,其容器直接从互联网计算机对链下服务进行 HTTP 调用(前面的链接将您定向到生成 HTTP 的相关代码段打电话)。
这个示例 dapp 直接从 Coinbase API 提取 ICP 兑 USDC 的汇率,没有中间人基础设施 —— 这只是可以使用此功能调用的大量数据源的一个示例。
您可以点击下方查看已部署示例 dapp 的代码和相关文档:
源代码:
github.com/dfinity/examples/blob/master/rust/exchange_rate/src/main.rs
internetcomputer.org/docs/current/samples/http-requests-exchange-rates
源代码在 GitHub 上的 DFINITY 示例存储库下开源。
我们热切期待看到此功能的交付如何加速互联网计算机上的 Web3 创新。
在 internetcomputer.org 上开始构建,并在 forum.dfinity.org 加入开发者社区。
来源:DFINITY翻译:Catherine
- 往 期 推 荐 -
长按关注 IC 微信公众号
随时答疑解惑
*添加小助手微信 comiocn 进交流社群