Internet Computer「Warped 黑客松「正在火熱進行中,「DFINITY 技術入門系列」活動拉開帷幕,2021 年 11 月 25 日,ICP League 聯合創始人 blockpunk 受邀作為首場嘉賓,進行《進入無縫的開發世界,快速入門 ICP》的主題演講,查看視頻: https://b23.tv/NpcgIUE

認識 DFINITY

互聯網計算機是世界上第一個不受限製的、以 Web 速度運行的區塊鏈。同時,它代表了除比特幣和以太坊外的第三項重大的區塊鏈創新。互聯網計算機的網絡可以做到無限擴展,並能以互聯網的速度運行智能合約計算和數據,有效地處理和存儲數據,並為開發者提供強大的軟件框架。

通過使這一切成為可能,互聯網計算機實現了對軟件的徹底重新構想,提供了一種構建代幣化的金融系統,乃至於傳統的企業系統和網站的革命性的新方式。

DFINITY 將之前無法達到去中心化或者說運行不了的通用計算能力,賦能到了區塊鏈領域,這是一個非常大的創新。

DFINITY 的開發團隊

DFINITY 的創新能力吸引了很多強大的開發者加入,BLS 算法創始人之一、谷歌高級工程師 Ben Lynn,WebAssembly 虛擬機設計者之一、谷歌高級工程師 Andreas,最早的比特幣 Asic 挖礦算法發明者 Timo ,身份驗證加盟協議 Identity Mixer 發明人、IBM 首席研究員 Jan 等優秀開發者都加入了 DFINITY。

值得一提的是,目前眾多公有鏈如以太坊、波卡等都考慮轉換到 WASM 虛擬機,而 DFINITY 基金會工程師 Andreas 作為其發明者,參與了大部分 WASM 虛擬機相關的標準製定,目前正在推進的就是由 32 位 WASM 虛擬機擴展到到 64 位 WASM 虛擬機。

DFINITY 運行機製

首先 DFINITY 運行的基礎是分布在世界各地的數據中心,獨立的數據中心,或者是第三方搭建的節點站。

數據中心會通過客戶端虛擬化產出很多的節點機器,然後這些節點會在一個隨機數的選擇下組成不同的子網,Canister 會在這些子網上運行。

Canister 是 DFINITY 體系裏升級版的智能合約。子網可以理解成區塊鏈的分片。

Canister – 智能合約

節點通過 ICP 協議組成了多個子網,子網上運行著眾多 Canister。Canister 是一種升級版的智能合約,與以太坊智能合約的最大區別在於:以太坊上的狀態都是在區塊上公開可見,所以以太坊上的智能合約實際是狀態更新機上的一串代碼,其本身不包含狀態的;但 DFINITY 架構下,每一個智能合約分配了一定的內存(目前 4 GB),如果你可以把 ICP 看成一臺超級計算機,那麽 Canister 就是計算機中的進程,而每一個 Canister 進程都包含了自己的運行內存,因此你可以把一些跟智能合約相關的數據封裝在一個容器裏面,這也是 DFINITY 上特有的存儲方式。

ICP 中 Canister 的內存功能允許你把智能合約的狀態、數據庫甚至是前端數據,如遊戲的資產等全部放在這個存儲裏。這就是 DFINITY 與以太坊最大的不同。

核心科技創新

鏈鎖密碼學技術(ChainKey)通過聚合簽名,讓子網節點產生一個唯一的公鑰簽名。這是 DFINITY 擴展多個子網,從而無限擴展性能的基礎技術。

以太坊中是很多個節點競相出塊,每個節點將以自己的私鑰去簽名,因此,以太坊上就會產出大量的簽名數據。而 DFINITY 上也由多個節點達成共識進行出塊,每一個節點會對區塊簽名,但所有的節點的簽名私鑰來自一個子網的總私鑰,一旦網絡中收集的節點簽名達到一個閾值,比如 51% ,就可以聚合出一個完整的子網簽名,這條鏈從而獲得了共識後的區塊,這個過程就叫做 ChainKey 技術。

此外,DFINITY 正在研究通過該技術向比特幣網絡發送交易,此後,實現 ICP 上的智能合約甚至可以直接發送比特幣乃至以太坊網絡的交易。

網絡神經系統是 DFINITY 提出的又一項創新,作為 DFINITY 的開放的算法治理系統,在這之上其實可以做很多金融的嘗試。

第三大創新也就是之前提到的 Canister 智能合約,使 DFINITY 能夠托管前端、後端、中間件的全棧。

最後,DFINITY 嘗試用更先進和更安全的加密身份驗證方法取代傳統模式(用戶名和密碼),從而消除服務商竊取用戶數據或跟蹤用戶活動的可能。

公鏈架構的新範式

以太坊 2.0 采用了分片技術,但其分片還是需要通過信標鏈進行交互,由於信標鏈的性能存在上限,那麽其能支持的信息量有限,分片的鏈的數量也會有限,所以說以太坊 2.0 是解決階段性問題的解決方案,並不是終極方案。還比如波卡的中繼設計,等等。

只要存在總線、主鏈或者中繼這類設計,都無法足夠徹底地解決擴容問題,那麽眾多高價值應用如社交、流媒體、遊戲等就難以實現。

DFINITY 是一種多子網架構,子網和子網之間沒有從屬關系的,沒有一條總鏈去管理所有的子網,子網是一個平行關系。

而子網和子網之間的通訊是通過 ChainKey 技術對共識後的交易進行簽名。因為子網內會有一個子網的共識,通過共識產出簽名後的子網間交易,子網之間互相檢查其他子網的簽名來判斷其是否合法,而每個子網的公鑰是唯一的。只要通過 ChainKey 發送的消息,就默認為已經經過了子網的共識。在該模式下,子網的數據不再受限,唯一的上限是網絡帶寬,無限製擴容是可以實現的。

DFINITY 上線到現在已經 6 個月,從最初的 5 個子網,現在擴展到了 27 個子網,有 300 多個節點正在運行這 27 個子網,27 個子網上面已經托管了近 1 萬多個智能合約 Canister。

對智能合約、中間件以及前端的托管

傳統以太坊上開發合約需要將跟資產有關的代碼部署到鏈上,但是由於用戶不可能直接通過命令行去訪問你的合約,也不可能或者通過手機、電腦直連一個以太坊主網的節點,所以必須在中間再做兩層:一個前端,方便用戶去使用程序;另一個是中間件,或者某一個錢包的服務,或者是 infura 這種標準化的服務,讓用戶能夠實現快速讀取。

遺留問題是,前端和中間件的部分依然是高度中心化。此外,如果想做一些復雜的邏輯,比如遊戲的一些打金產出的邏輯,這些邏輯放到鏈上去的話,gas 費成本會非常高。此外,EVM 的虛擬機對一些運算產生限製,雖然以太坊是圖靈完備的,實際上很多業務還是會選擇在中心化服務器中實現,這樣的話很難做到業務的可驗證。以上就是在以太坊上做開發出現的問題。

而 DFINITY 裏,可以把服務的前端、後端,甚至數據庫,包括數據庫相關的增刪查該的操作全部都放到一個 DFINITY 智能合約中運行。通常我們可以把一個 Canister 作為前端,把另一個 Canister 作為後端,和前端的交互,用戶直接通過他的終端,直接訪問前端 Canister 進行交互。

開發者可以將前後端、中間件等全部都放到 DFINITY 上,實現無縫的網絡,也不用擔心成本問題。5GB 的數據在以太坊上存儲的話大概需要付出 2.7 億美金,在 SOL 上存儲 5 GB 的數據至少需要 500 萬美元。而在 DFINITY 上存儲的成本只有不到 5 美金。

給開發者超能力

對於傳統互聯網的開發者來說,90% 的時間是在處理如服務器、文件系統數據庫等組件之間的沖突,也就是我們常說的 dirty work。以太坊開發也有類似問題,實際上寫合約代碼、做業務邏輯的時間並不長,更多的是在前端與調用接等問題上。

但在 DFINITY 中可以全身心去做開發,你可以直接將代碼部署到 ICP 的鏈上,就像在 github 上傳代碼一樣,而一切都將在直接在鏈上永不宕機的運行。

Internet Computer 開發實操

創建 IC Motoko 標準項目

  • 安裝 rust:
curl --proto '=https' --tlsv1.2 -sSf [
          
            https://sh.rustup.rs
          
        ](
          
            https://sh.rustup.rs/
          
        ) | sh (Windows Subsystem for Linux)
  • 安裝 dfx:
sh -ci "$(curl -fsSL [
          
            https://smartcontracts.org/install.sh
          
        ](
          
            https://smartcontracts.org/install.sh
          
        ))"
  • vscode + motoko 插件
  • Motoko 標準項目結構

IC Dapp 開發特性介紹

  • Canister 數據存儲有兩種: 持久化存儲與運行時存儲
  • Canister 也是一個 actor, 可以理解為典型的事件驅動模型,actor 也是一個狀態機, 每個 canister 接收消息並保存到郵箱中, 然後串行處理郵箱中的信息,canister 某一時刻只處理一條信息, 沒有並發問題
  • 其中消息分兩類, 一類是修改狀態的 update 類消息,update 消息需要通 ICP 協議共識確定順序, 處理消息的結果需要所有 canister 實例共識驗證,canister 的狀態也是確定的;
  • 另一類消息是只讀查詢的 query 消息, 此類消息執行的結果不需要共識, 執行 query 消息的某個 canister 實例直接返回結果, 處理 query 消息的響應時間為毫秒級
  • 處理 update 消息的響應時間約為秒級, 即使 query 消息有修改狀態的代碼, 消息處理完後狀變化會丟棄掉
    本地部署;--mode upgrade 參數

Dapp 部署到主網

水龍頭網址: https://faucet.dfinity.org
部署主網命令: dfx deploy –network ic
部署主網命令: dfx deploy –network ic –no-wallet
不會自動生成 canister_ids.json,
需要登錄 nns.ic0.app 並創建 canister,
同時把本地環境的 principal 加到新創建 canister 的 controller 列表中, 然後執行部署命令.
在項目目錄上創建 canister_ids.json 文件寫入 nns 上創建的 cainster id;

資源

DFINITY 開發文檔: https://smartcontracts.org/
DFINITY 官方論壇: https://forum.dfinity.org/
DFINITY 中文社區 ICPL: https://www.icpleague.com/
DFINITY 官方代碼倉庫: https://github.com/dfinity
Motoko SDK 代碼倉庫: https://github.com/dfinity/motoko-base
Rust SDK 代碼倉庫: https://github.com/dfinity/cdk-rs
Awesome DFINITY: https://github.com/dfinity/awesome-dfinity
DFINITY 樣例代碼倉庫: https://github.com/dfinity/examples

封面圖片:DFINITY

免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與 Web3Caff 立場無關。文章內的信息均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。