图片

上次我們創建了一篇關於創建組件以從以太坊合約獲取以太坊價格數據的實踐文章,快照索引器 EVM 使用 ABI 作爲接口,從 EVM 兼容鏈中檢索數據。

在本文中,我們將嘗試使用 Candid 從互聯網計算機檢索數據,Candid 是運行 Chainsight 的互聯網計算機上的一個接口,在本文中,我們將嘗試創建一個使用快照索引器 ICP 收集互聯網計算機中數據的組件。

該項目是一個價格快照索引器 ICP,它使用互聯網計算機上的 DEX 合約收集 ICP 價格,截至 2024 年 2 月,1 ICP 的交易價格約爲 12 美元。

已完成的組件定義

ICPSwap 是互聯網上知名的 DEX 之一,用於獲取 ICP 價格,定期調用 ICPSwap 合約(容器)來收集 ICP 價格數據,快照索引器以 1 小時的收集間隔構建。

图片

先決條件

Chainsight CLI 需要多個工具和 csx 安裝,前期準備工作請參考以下文章:

  • dev.to/hide_yoshi/step-by-step-creating-an-evm-price-oracle-with-chainsight-469g

創建項目並添加清單模板

和以前一樣,從一個空項目構建,用 csx new --no-samples 創建模板。

图片

然後使用 csx add 添加快照索引器 EVM,應選擇 snapshot_indexer_icp 類型。

图片

讓我們更新已添加的清單,以便我們可以調用已部署在互聯網計算機上的容器,在本例中,我們將使用 ICPSwap 中使用的容器。

容器 ID:2ixw4-taaaa-aaaag-qcpdq-cai

图片

在該 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

互聯網計算機可以通過儀表板輕鬆查看容器的界面。

图片图片

資料來源:

  • 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 並將剛剛複製的內容粘貼到其內容中,實際的文件夾和文件將如下所示。

图片

創建文件後,在 method.interface 中指定 interfaces/target_interface.did,此時,數據源字段應如下所示。

图片

最後,爲此組件添加一個設置以調用 Chainsight Platform 外部的容器,is_target_component 應設置爲 false,如果此標誌未設置且爲 true,則該組件將調用 Chainsight Platform 內的組件,這樣就完成了 manifest 的更新,完成後的 manifest 如下。

图片

對於元數據,任何任意設置都可以,再次檢查數據源字段和 is_target_component,如果到目前爲止您已經成功修改了代碼,那麼我們立即生成代碼。

生成代碼並構建模塊

讓我們使用 csxgenerate 生成容器代碼,如果您實際運行此命令,您將得到以下輸出。

图片

與快照索引器 EVM 一樣,快照索引器 ICP 中的此接口不需要進行額外的自定義,構建過程無需任何額外的定製即可開始。

您可以使用 csx build 從代碼生成模塊,讓我們運行它。

图片

構建將在幾分鐘內完成,該命令生成 WASM 模塊和 candid 接口,要更深入地瞭解這些行爲,請參考以下文章:

  • medium.com/@Chainsight_Network/behind-chainsight-how-modules-are-created-pt-2-4cf29234b98b

最後,部署並啓動組件!

部署組件

像之前的實踐課程一樣,使用 csx deploy 和 csx exec 在 Chainsight 平臺上部署此組件。

图片

當您運行這些時,您應該得到以下日誌。

图片

部署和操作啓動指令現已完成,現在您只需等待自動執行的時間間隔即可參考數據。

在本次實踐課程中可以創建的組件也實際上正在運行(我們稍微更改了描述和執行間隔)。

图片

資料來源:

  • beta.chainsight.network/explore/components/lqf7x-4yaaa-aaaal-qdg7q-cai

我們對快照索引器 EVM 的實踐到此結束,未來我們將繼續創作併發布新的實踐課程,敬請期待!

與我們保持聯繫,瞭解更多令人興奮的更新,並探索如何構建 web3 的未來,讓我們一起繼續塑造更加模塊化和創新的金融未來!

图片

聯繫渠道

官網:

chainsight.network

X:

@Chainsight_

Github:

github.com/horizonx-tech?q=chainsight&type=all

Medium:

medium.com/@Chainsight_Network

Docs:

docs.chainsight.network

图片

#Chainsight #EVM #Web3 #ICP🚀🚀 $ICP

你關心的 IC 內容

技術進展 | 項目信息 | 全球活動

收藏關注 IC 幣安頻道

掌握最新資訊