DFINITY基金會致力於通過推出互聯網計算機來恢復互聯網的自由和開放根源,這是世界上第一個具有無限計算能力的Web速度區塊鏈網絡,旨在增強開發人員的體驗並提供更多選擇,這是我們一直以來的關注重點。

互聯網計算機託管軟件容器,這是可擴展的傳統智能合約的發展,它將WebAssembly字節代碼與代碼在其中運行的內存頁面捆綁在一起。

這使開發人員能夠構建革命性的互操作性應用程序、系統和安全可靠的互聯網服務,利用令牌化等區塊鏈功能,並直接在互聯網上而不是在專有基礎架構上部署軟件。

爲了支持在開放平臺上重新定義的軟件範圍的增長,在該平臺上不同的程序可以直接相互集成,並且可以輕鬆地組合和擴展服務,我們的語言團隊開發了Candid接口描述語言(IDL)。

該接口可以使那些人協作建立互聯網計算機生態系統以完全無縫地連接其代碼,即使使用不同的語言編寫也是如此,我們很高興在今天對其進行更詳細的描述。

什麼是Candid?

Candid是專門爲互聯網計算機設計的IDL,它爲應用程序接口提供了一種通用語言,以促進以不同編程語言編寫的服務之間的通信。

Candid的主要優勢之一是它與語言無關,可實現以不同編程語言(例如Motoko、Rust和JavaScript等)編寫的服務和前端之間的互操作性。它使開發人員可以安全、無縫地構建彼此依賴的服務,而不必擔心外部服務的接口升級。

通過Candid,我們試圖…

  • 提供接口和數據描述:使用Candid的開發人員能夠描述服務的公共接口,通常以部署爲容器的程序的形式進行描述。作爲開發人員,您可以將運行在互聯網計算機上的外部服務稱爲異步函數調用。

  • 原則上支持接口的演變:Candid通過精確指定可以在不破壞現有客戶端的情況下進行的更改來支持服務接口的演變,例如,這意味着您可以安全地向服務中添加新的可選參數而不會失去與現有客戶的兼容性。

  • 支持互聯網計算機功能:Candid特別適合開發互聯網計算機的應用程序。

Candid在某種程度上受到了類似IDL和數據定義語言(DDL),例如Protobuf、Thrift和JSON的啓發,但是Candid提供了這些其他技術所沒有的獨特功能組合:

  • Candid是一種完整的界面描述語言,而不僅僅是一種數據描述語言。

  • Candid實現可以將Candid值直接映射到宿主語言的類型和值。

  • Candid本質上是一種高階語言,它允許消息參數包含對其他服務和方法的引用。

  • Candid具有對特定互聯網計算機功能(例如query註釋)的內置支持。

  • Candid定義了有關如何以合理和綜合的方式升級服務及其接口的規則,包括高階使用。

如何使用Candid?

Candid的主要目的是將以某種宿主語言(例如Motoko、Rust或JavaScript)編寫的程序與互聯網計算機連接。在大多數情況下,您不必將程序數據作爲Candid值處理。

相反,您可以使用熟悉的JavaScript值使用JavaScript之類的宿主語言,然後依靠Candid將這些值透明地傳輸到用Rust或Motoko編寫的容器中。容器接收這些值,並將其視爲原始Rust或Motoko值。

在某些情況下,以人類可讀的形式直接查看Candid值很有用-例如,在命令行上記錄、調試或與服務交互時。在這些情況下,您可以將文本表示形式用於Candid值。

Candid是一個強類型化的系統,具有一組規範地涵蓋大多數用途的類型(要查看列表,請參閱我們的SDK頁面)。

這組類型背後的原理是,它們足以描述數據的結構,以便可以對信息進行編碼、傳遞和解碼,但是它們不嘗試描述超出此範圍的語義約束。

無論您是以Motoko、Rust、JavaScript還是其他語言編寫代碼,Candid都支持這組類型,以允許基於適用於每種宿主語言的合理、規範的選擇來自然映射數據類型。

可以使用Candid類型通過Candid服務描述文件(.did文件)來描述服務,該文件可以手動編寫,也可以從服務實現中生成。

例如,如果您在Motoko中編寫一個容器,則編譯器在編譯程序時會自動生成一個Candid描述。

在其他語言中,例如Rust,您將必須手動編寫Candid接口說明。在類型的幫助下,我們開發了工具來自動生成UI並根據服務描述文件執行隨機測試。

Candid對服務升級也很有用,服務隨着時間而發展,他們獲得了新的方法,而現有的方法返回了更多的數據,或者期望有其他參數。通常,服務作者希望在不破壞現有客戶的情況下做到這一點。

Candid通過定義精確的子類型化規則(在Coq!中正式化)來幫助服務安全地發展,這些子類型化規則指示何時新的服務類型仍將能夠與使用先前接口描述的所有其他方進行通信。

有興趣瞭解更多嗎?以下是一些與Candid相關的材料,可幫助您入門……

Candid的教程和資源

  • Candid的講解視頻:您可以觀看文章開始有關如何使用Candid的視頻教程。

  • Candid的文檔和教程:您可以訪問我們SDK網站上有關Candid的文檔:https://sdk.dfinity.org/docs/candid-guide/candid-intro.html

  • Candid Crate:Candid Crate是一個序列化/反序列化庫,可用於在Rust中創建Candid服務或客戶端:https://crates.io/crates/candid

  • JavaScript的互聯網計算機代理庫:該代理包括對Candid的支持。

  • 社區支持的Candid庫:Haskell、Elm、AssemblyScript和Kotlin當前存在庫。

  • Candid UI:此容器爲互聯網計算機上運行的任何容器生成一個前端UI,從而使開發人員能夠與Web上的容器(而不是終端)進行交互,並提供調試功能。

你關心的 IC 內容

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

收藏關注 IC 幣安頻道

隨時答疑解惑