![图片](https://public.bnbstatic.com/image/pgc/202405/8d43e4c15be63564b8a211c00c323eda.png)
上次我们创建了一篇关于创建组件以从以太坊合约获取以太坊价格数据的实践文章,快照索引器 EVM 使用 ABI 作为接口,从 EVM 兼容链中检索数据。
在本文中,我们将尝试使用 Candid 从互联网计算机检索数据,Candid 是运行 Chainsight 的互联网计算机上的一个接口,在本文中,我们将尝试创建一个使用快照索引器 ICP 收集互联网计算机中数据的组件。
该项目是一个价格快照索引器 ICP,它使用互联网计算机上的 DEX 合约收集 ICP 价格,截至 2024 年 2 月,1 ICP 的交易价格约为 12 美元。
已完成的组件定义
ICPSwap 是互联网上知名的 DEX 之一,用于获取 ICP 价格,定期调用 ICPSwap 合约(容器)来收集 ICP 价格数据,快照索引器以 1 小时的收集间隔构建。
![图片](https://public.bnbstatic.com/image/pgc/202405/83ceb0d44c6c392010c7287786e0f3b2.png)
先决条件
Chainsight CLI 需要多个工具和 csx 安装,前期准备工作请参考以下文章:
dev.to/hide_yoshi/step-by-step-creating-an-evm-price-oracle-with-chainsight-469g
创建项目并添加清单模板
和以前一样,从一个空项目构建,用 csx new --no-samples 创建模板。
![图片](https://public.bnbstatic.com/image/pgc/202405/6bb0091a6619ec36c2a4bc6d28b166f0.png)
然后使用 csx add 添加快照索引器 EVM,应选择 snapshot_indexer_icp 类型。
![图片](https://public.bnbstatic.com/image/pgc/202405/758f22d635089c914f4e320361cbb125.png)
让我们更新已添加的清单,以便我们可以调用已部署在互联网计算机上的容器,在本例中,我们将使用 ICPSwap 中使用的容器。
容器 ID:2ixw4-taaaa-aaaag-qcpdq-cai
![图片](https://public.bnbstatic.com/image/pgc/202405/0bd09e482992b30d2a496528a95b4540.png)
在该 datasource 字段中,指定这次要调用的容器及其函数。
在 location.id 字段中指定要调用的容器的 ID,在这种情况下,设置 2ixw4-taaaa-aaaag-qcpdq-cai,接下来,在 datasource.method 中,指定要调用的容器函数。
在 method.identifier 中,以 Candid 格式指定函数,这是互联网计算机的接口表示法。
Candid 是一种界面描述语言,它的主要目的是描述服务的公共接口,通常以部署为在互联网计算机上运行的容器的程序的形式,Candid 的主要优点之一是它与语言无关,并且允许使用不同编程语言(包括 Motoko、Rust 和 JavaScript)编写的服务和前端之间进行互操作。
资料来源:
internetcomputer.org/docs/current/developer-docs/backend/candid/candid-concepts
互联网计算机可以通过仪表板轻松查看容器的界面。
![图片](https://public.bnbstatic.com/image/pgc/202405/3b7497105f70ad0fdab72da1e0dc88c5.png)
![图片](https://public.bnbstatic.com/image/pgc/202405/faa10fe6d2c7257f5b2a0b56aa212cf4.png)
资料来源:
dashboard.internetcomputer.org/canister/2ixw4-taaaa-aaaag-qcpdq-cai
这是我们将调用的容器的 Candid 接口,在 service 中的声明是容器提供的接口,在本例中我们将使用 get_exchange_rates 此处描述的函数,我们需要做两件事来指定这个函数。
在 method.identifier 中指定包含参数和响应信息的函数声明:get_exchange_rates: () -> (vec ExchangeRate__1)。
由于此声明使用的自定义类型不是 Candid 内置类型,因此请创建一个包含 Candid 接口的 .did 文件,以便可以引用它,并在 method.interface 中指定该文件。
在前面提到的 Dashboard 屏幕的 Canister Interface 中选择 Candid 后,单击右上角的“复制”以复制界面中的声明,然后,在 interfaces 文件夹下创建 target_interface.did 并将刚刚复制的内容粘贴到其内容中,实际的文件夹和文件将如下所示。
![图片](https://public.bnbstatic.com/image/pgc/202405/8fef85bbe3e3c5d49cd3bd4e4db88ae8.png)
创建文件后,在 method.interface 中指定 interfaces/target_interface.did,此时,数据源字段应如下所示。
![图片](https://public.bnbstatic.com/image/pgc/202405/3bb4cd81634d30edef45a9ed2fff9cda.png)
最后,为此组件添加一个设置以调用 Chainsight Platform 外部的容器,is_target_component 应设置为 false,如果此标志未设置且为 true,则该组件将调用 Chainsight Platform 内的组件,这样就完成了 manifest 的更新,完成后的 manifest 如下。
![图片](https://public.bnbstatic.com/image/pgc/202405/a0346784b2063fa78e1ab74b1a2d7ae4.png)
对于元数据,任何任意设置都可以,再次检查数据源字段和 is_target_component,如果到目前为止您已经成功修改了代码,那么我们立即生成代码。
生成代码并构建模块
让我们使用 csxgenerate 生成容器代码,如果您实际运行此命令,您将得到以下输出。
![图片](https://public.bnbstatic.com/image/pgc/202405/cb14f0d7a310aa1a1f814eef13609eb6.png)
与快照索引器 EVM 一样,快照索引器 ICP 中的此接口不需要进行额外的自定义,构建过程无需任何额外的定制即可开始。
您可以使用 csx build 从代码生成模块,让我们运行它。
![图片](https://public.bnbstatic.com/image/pgc/202405/b5985794911e88cfe98fa424038a4d38.png)
构建将在几分钟内完成,该命令生成 WASM 模块和 candid 接口,要更深入地了解这些行为,请参考以下文章:
medium.com/@Chainsight_Network/behind-chainsight-how-modules-are-created-pt-2-4cf29234b98b
最后,部署并启动组件!
部署组件
像之前的实践课程一样,使用 csx deploy 和 csx exec 在 Chainsight 平台上部署此组件。
![图片](https://public.bnbstatic.com/image/pgc/202405/64defa05ff53d932901ea73c40a0291c.png)
当您运行这些时,您应该得到以下日志。
![图片](https://public.bnbstatic.com/image/pgc/202405/73a1591e0f5c663b326b9e4f1c02c8d9.png)
部署和操作启动指令现已完成,现在您只需等待自动执行的时间间隔即可参考数据。
在本次实践课程中可以创建的组件也实际上正在运行(我们稍微更改了描述和执行间隔)。
![图片](https://public.bnbstatic.com/image/pgc/202405/f08b74e13df5ef9ca6e8457aa8e3d70c.png)
资料来源:
beta.chainsight.network/explore/components/lqf7x-4yaaa-aaaal-qdg7q-cai
我们对快照索引器 EVM 的实践到此结束,未来我们将继续创作并发布新的实践课程,敬请期待!
与我们保持联系,了解更多令人兴奋的更新,并探索如何构建 web3 的未来,让我们一起继续塑造更加模块化和创新的金融未来!
![图片](https://public.bnbstatic.com/image/pgc/202405/cb8922b4c7281c140ca4052879297f5b.png)
联系渠道
官网:
chainsight.network
X:
@Chainsight_
Github:
github.com/horizonx-tech?q=chainsight&type=all
Medium:
medium.com/@Chainsight_Network
Docs:
docs.chainsight.network
![图片](https://public.bnbstatic.com/image/pgc/202405/e1bdc96704f7b334cdc50046aeae13f6.png)
#Chainsight #EVM #Web3 #ICP🚀🚀 $ICP
你关心的 IC 内容
技术进展 | 项目信息 | 全球活动
![](https://public.bnbstatic.com/image/pgc/202405/e850b7a2a396106a0b16b27ca7e9af4c.jpg)
收藏关注 IC 币安频道
掌握最新资讯