對很多開發者而言,第一次接觸 IC 時,會因為 IC 的運作機制與傳統區塊鏈技術棧有所不同而產生許多誤解,本文將解釋大多數開發人員遇到的疑問,並介紹互聯網計算機的差異化功能。
原文:The Internet Computer for Ethereum Developers
作者: Dominic Wörner
編譯: ICP League
原用標題(譯後):給以太坊開發者介紹互聯網計算機
IC 對比以太坊的差異化功能
對很多開發者而言,他們第一次接觸智能合約平台是通過以太坊。因此,當開發人員接觸互聯網計算機 (IC) 後,也會保留在傳統區塊鏈技術棧的慣性,會先入為主地理解 IC 區塊鏈,但實際上 IC 的運作機制和我們想像的有些差異。
本文將解釋大多數開發人員遇到的疑問,並介紹互聯網計算機的差異化功能。由於以太坊和 IC 的屬於略有不同,這裡先給以太坊的開發者一個對照:
- 合約→ 容器
- gas → cycles
- 分片→ 子網(不完全正確,因為以太坊目前只考慮數據分片)
- 驗證者節點→ 副本
互聯網計算機的簡單介紹
在深入了解具體差異之前,首先得簡要介紹整個 IC。IC 是一個由多個獨立子網區塊鏈組成的網絡,但合約可以跨子網無感地交互。這允許通過不斷添加子網來水平擴展 IC。
子網由網絡神經系統 (NNS)管理,該系統本質上是在初始子網(也稱為 NNS)上運行的去中心化自治組織 (DAO)。
IC 有一個主要的實用代幣:ICP,可以質押在 NNS 中以參與治理,可以轉換為 cycles 才支付 IC 上的資源消耗。
IC 上的合約稱為容器,包含 WebAssembly (Wasm)字節碼。這允許開發人員使用多種編程語言創建合約。此外 Motoko 是一種專門設計用於在 IC 的 actor 模型中編寫容器的編程語言。
如果您想深入了解互聯網計算機的機制,請查看以下資源:
- 互聯網計算機技術白皮書
- “工作原理” 系列(包含許多深入的文章和視頻)
- 開發者文檔
- 互聯網計算機百科
- ICPL 的開發者入門頁面
- 開發者論壇和 Discord
以太坊和互聯網計算機的區別
事不宜遲,我們將深入探討以太坊和 IC 之間的一些顯著差異。我們根據以下類別闡述這些差異:
- 用戶體驗
- 開發者體驗
- 可擴展性和成本
- 隱私
- 差異化能力
用戶體驗
外部帳戶不必支付 gas 費
IC 實施了一種 “反向 gas” 模型,其中合約必須週期性地為其資源支付費用。因此,dapp 的用戶不需要錢包或代幣來與 dapp 交互。儘管如此,仍然可以使用 Internet Identity 對用戶進行強身份驗證,這是一種基於 Web 身份驗證標準的加密身份驗證系統。
每個容器都有一個 cycles 餘額,並且餘額可以由任何其他容器補足。當然,你也可以要求用戶在 ICP 中支付費用,然後讓你的容器將 ICP 轉換為 cycles,本質上與以太坊的正向 gas 模型一致。因此,IC 在這方面更加靈活。
用戶可以通過瀏覽器與 IC 交互
用戶與以太坊上的應用程序之間的交互通常如下所示:
- 用戶將瀏覽器指向應用程序的域名。
- 應用程序的前端由傳統的中心化服務商提供託管。
- 來自區塊鏈的動態數據通常由應用程序自己或 Infura 等服務提供商提供的中心化後端代理。
- 用戶使用其錢包連接到應用程序。
- 前端起草交易並要求錢包簽署並提交交易,即使在非金融應用的情況下,用戶的錢包中也需要有 ETH 來支付 gas 費用。
- 用戶批准使用錢包,錢包提交簽名的交易。
- 用戶等待(取決於網絡的當前使用情況和提供的費用)從 10 秒到幾分鐘不等,直到交易被確認。
一些核心創新的互相結合,使用戶可以安全地與 IC 上的應用程序交互,而無需設置錢包,無需購買加密貨幣,也無需依賴任何中介:
- chainkey 技術和子網允許以更低的成本,更輕量級地驗證。
- 反向 gas 模型允許合約預加載 gas 以降低用戶進入門檻。
- Internet Identity 允許使用 WebAuthen 和授權機制,在隱私保護下,對 IC 上的服務進行身份驗證。加密過的秘密由安全硬件管理。
- 邊界節點和 certified asset 合約,允許直接在合約中部署前端,提供服務。
那麼與 IC 上的 dapp 交互是什麼樣的呢?
- 用戶將他的瀏覽器指向應用程序的域名,該域名或者直接是合約地址+ic0.app 的域名,瀏覽器將被重定向到 ic0.app 域。
- 用戶將看到安裝了一個 service worker ,它使用 Java Script 代理來驗證源自 IC 合約的 certified asset。在瀏覽器通過本地下載或者擴展原生支持 IC 前,service worker 機制是一種解決方法。
- 要求用戶使用 Internet Identity 或其他身份驗證方法登錄。
- 用戶無需支付任何費用,即可與 dapp 進行交互。狀態變化的更新需要幾秒鐘的時間,並且可以通過使用默認更新的 UI 模式對用戶隱藏。
可以從 IC 的生態庫中嘗試一些 IC 上流行的 dapp,自己試一試。
開發者體驗
合約默認可升級
在以太坊上,合約是不可變的。如果合約存在錯誤,開發人員幾乎無能為力。這導致了像代理合約這樣的變通辦法,但也給用戶帶來了額外的複雜性和風險。
在 IC 上,合約默認是可變的。每個合約都有一個關聯的控制器列表,這些控制器被授權可升級合約。通過將控制器設置為空或黑洞地址,這個合約將無法再被修改。
在 IC 社區中更提倡,將大多數合約將由去中心化自治組織 (DAO) 管理,就像 IC 本身一樣。因此,DFINITY 基金會正在開發一個服務神經系統(SNS),一種可定制的組合解決方案,用於管理 IC 上的服務,靈感來自管理 IC 的網絡神經系統(NNS)。
合約間調用是異步的,不是原子性的
以太坊虛擬機 (EVM) 是同步的,事務是原子性的。這意味著如果用戶發送交易,則交易要么完全執行;要么狀態完全回滾,不發生任何更改,但會消耗交易的 gas。這與交易中涉及的合約數量無關。這一特性帶來了一些有趣的創新,例如閃電貸。但由於整個以太坊網絡作為一個單一進程,因此嚴重限制了可擴展性。
在 IC 上,合約間調用是異步的。每次 await 在合約中使用時,狀態都會被提交。萬一函數陷入困境,狀態只會回滾到最後一次出現的 await。可以在此處(https://internetcomputer.org/docs/current/developer-docs/build/languages/motoko/actors-async/#traps-and-commit-points)閱讀更多信息,還有一篇很棒的論壇帖子,介紹了有關 DeFi 的不同模型。
合約用盡 gas 時將被刪除
在以太坊上,合約是永久的。雖然這有一些優點(讓開發人員和用戶放心),但它也有相當大的缺點(可擴展性有限)。以太坊的狀態正在無限增長,開發人員幾乎沒有動力在狀態中釋放空間。因此,儘管許多項目早已被放棄,但以太坊的狀態中仍然存在 2017 年以來的所有 ICO 代幣數據。
在 IC 上,合約根據其實際資源消耗來消耗週期。即使不會調用合約,它們也會消耗一些 cycles,儘管很少。這對於平台的可持續性很重要。從以太坊到 IC,開發者需要考慮到 cycles 地消耗,不然合約會被刪除。但是,IC 中內置了兩種有效的保護措施。
- 有一個 inspect_message 功能可以讓合約自動檢查傳入的消息(即來自 IC 外部的消息)並決定他們是否要處理該消息,這種自動檢查是不收費的。
- IC 可以凍結容器,使其自動拒絕所有調用,並且只需支付基本維護費用。每個容器都有一個 freezing_threshold,開發者可以以秒為單位設置凍結的期限。默認 freezing_threshold 大約為 30 天,這讓開發人員或用戶有足夠的時間在容器被垃圾收集之前進行充值。
儘管如此,如果你想在 IC 上實現自主服務,你必須考慮它的經濟可行性,否則它會在凍結週期之後被抹去。
gas 費是可以測算
在 EVM 中,具體操作(操作碼)具有以 gas 衡量的明確成本,但 ETH 與 gas 之間的匯率完全由市場定義。用戶可以定義願意在交易中支付的 maxFeePerGas ,並且單個礦工決定它是否認為這個提議可以接受。由於以太坊的吞吐量非常有限,gas 的價格會隨著需求而劇烈波動。此外,由於 ETH 的當前市場價格,對法幣的實際價格更加難以預測。這導致服務的運營成本無法預測,一些智能合約錢包服務一直很受這個問題困擾。
與以太坊中的 gas 類似(但比以太坊更廣泛),IC 對各種資源有一套固定的 cycles 價格。然而,主要區別在於週期價格與特別提款權掛鉤,特別提款權基於一籃子世界主要貨幣。
1 SDR = 1 萬億個 cycles
SDR 和 ICP 之間的匯率由 NNS 管理。因此,運行合約的實際成本是相對穩定和可預測的,並且獨立於 ICP 的當前市場價格。
ICP 不是系統底層 token,而是上層合約實現
ICP 在 IC 中有兩個重要作用:
- 它可以被燃燒以創建支付 IC 資源所需的 cycles。
- 它可以鎖定在 NNS 神經元中,參與治理。
但是,ICP 不會出現在系統狀態中,而是構建為運行在 NNS 子網上的合約。可以在此處(https://internetcomputer.org/docs/current/references/ledger/)和此處(https://www.youtube.com/watch?v=im5HBRd3mqo)找到有關 ICP 賬本合約的更多信息。
可擴展性和成本
48 字節足以驗證 IC 鏈的狀態
驗證 EVM 狀態是一個資源密集型過程,節點必須通過該過程驗證整個區塊鏈的源頭。除了當前狀態的相關部分之外,還可以有輕節點僅驗證頭鏈(儘管它會永遠增長),但基礎設施尚未建立。因此,大多數用戶依賴中心化 API 來訪問以太坊狀態,例如 Infura。
相比之下,IC 允許客戶端(用戶手機上的瀏覽器)使用恆定的 48 字節公鑰來驗證狀態。這個公鑰可以被硬編碼到瀏覽器等軟件中,甚至是物聯網設備等硬件中,讓它們與 IC 上的合約安全地交互。
IC 可以水平擴展
IC 是一個多子網網絡,合約可以在其中無感地跨子網交互。隨著互聯網計算機需求的增加,可以通過向 NNS 發起提案來添加額外的子網,從而提高性能。
合約存儲便宜幾個數量級
以太坊尚未實現分片(特別是存儲分片),網絡中的每個節點都需要存儲和執行每個合約和每個交易。
在 IC 上,只有特定子網中的節點才會復制執行和狀態。雖然與以太坊相比,這可能會降低安全性,但它仍然比具有可比成本的傳統 Web 服務更安全。在以太坊上存儲 1 GB 大約數億美元,在 IC 上存儲 1 GB 每年只有需要花費幾美元。這允許在 IC 上運行整個 Web 應用程序、音樂甚至視頻,而不僅僅是一些後端邏輯。
有關 IC 常見成本的概述,請查看計算和存儲成本文檔。
通常不需要檢查舊區塊
Chainkey 技術允許新的驗證者節點使用非交互式分佈式密鑰重新共享快速同步狀態並加入驗證者組,而不是從創世開始同步和驗證區塊。因此,節點可以每隔幾分鐘安全地剪除舊鏈。
然而,對於某些應用程序,僅確保所有狀態轉換已由至少 2/3 的節點授權是不夠的,還需要審計跟踪。例如 ICP 賬本和 NNS。在這種情況下,審計跟踪是在應用程序上實現的,即智能合約層。
因此,與以太坊相比,合約可以訪問審計跟踪,而不僅僅是外部觀察者。
但是,將來會有兩種類型的子網:私有子網和公共子網。對於公共子網,觀察者可以獲取原始塊數據。第一個公共子網將是神經網絡系統子網本身。
隱私
外部帳戶不是全局狀態的一部分
以太坊的世界狀態由外部賬戶(用戶)和內部賬戶(合約)組成。每個賬戶都有一個關聯的以太坊餘額。
在 IC 上,只有容器是全局狀態的一部分。每個容器的 principal 都有一個關聯的 cycles 餘額,默認情況下不公開。這在隱私層面具備優勢,因為用戶可以以經過身份驗證的方式與 IC 上的容器交互,而無需在公共狀態下披露其 principal ID。缺點是用戶不能直接持有 cycles,而是需要像 cycles 錢包這樣的容器代持有。
全局狀態只有部分公開
在以太坊上,每個人都可以運行一個完整的節點,因此一切狀態都是公開的。隱私只能通過將數據保持在鏈外或使用密碼學來實現。
在 IC 上,節點由 NNS 授權,只有部分狀態是公開的。除了合約開發者為合約本身定義的 API 外,以下數據是公開的:
- 合約所在的子網
- 合約的名稱
- 合約 WASM 模塊的哈希
- 合約的控制者
特別是,合約的實際字節碼和 cycles 餘額都不是公開的。但是,如前所述,IC 將來會支持公共子網。這些子網將使原始 IC 的區塊數據可用。
差異化能力
合約可以自己觸發
在以太坊上,每個狀態變化都必須由外部賬戶觸發。然而,在 IC 上,容器可以使用由 IC 觸發的心跳功能。這開闢了許多新的可能性,一個簡單的示例是 cron 服務。
合約可以訪問隨機數
IC 獨特的共識算法可以作為隨機數的來源,這種隨機性可供合約使用,並可用於彩票或遊戲等應用程序。
合約可以持有簽名
在以太坊上,每個合約都是公開的。這意味著合約不能保存私人信息,因此不能簽署消息,因為沒有辦法安全地存儲私鑰。
IC 的共識機制使用稱為閾值簽名,驗證者節點協作創建(BLS)簽名,而整個私鑰本身根本不存在。
在即將推出的功能中,合約將提供類似的機制,請求 IC 網絡為其生成閾值 ECDSA 簽名。這些簽名將像常規 ECDSA 簽名一樣在 IC 之外進行驗證。這意味著您可以使用 IC 上的合約簽署以太坊或比特幣交易,或者您可以創建 JWT、verifiable credentials 或 x.509 證書。
合約可以調用 Web 服務
如果你需要以太坊上來自外部世界的數據,你需要將這些信息輸入以太坊合約的預言機。在 IC 上,很快就可以從合約內部直接調用 Web 服務,而無需第三方預言機。可以在論壇上閱讀有關此功能的更多信息,或者查看社區對話的視頻。
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。