隨着通訊和可視化移動終端設備的逐漸普及,人們簇擁於 web3 或元宇宙的概念。而對於通往全新世界的道路要怎麼走?卻沒有很明晰的答案。DFINITY 在 5 年的探索經驗中,摸索出了”互聯網計算機“的道路,它會成爲一個行之有效的解決方案嗎?

我們邀請到 DFINITY 核心技術工程師 Paul Liu 來從其技術底層爲我們進行解讀。Paul Liu 是 Dfinity 的核心技術工程師,加入 Dfinity 之前,Paul 在英特爾實驗室(Intel Labs)的研究科學家崗位工作了 7 年。在英特爾實驗室時期,他爲 X86 架構構建了一個性能高度優化的 Haskell 編譯器。Paul 擁有耶魯大學博士學位,師從 Haskell 編譯器的發明者之一的 Paul Hudak 博士。Paul 是 Haskell 研討會和 IFL 成員,發表過大量學術論文。

介紹

DFINITY 是一個總部在瑞士的非盈利組織,所有的收入只能用於一個目的,就是參與研發和推動 Internet Computer 這個去中心化的開源網絡項目。雖然這個項目是由 DFINITY 主導研發的,但自從上線那一天起,治理系統就已經啓動了,而且網絡的實際物理節點也是許多個第三方獨立運營商自主運營。

整個項目歸屬於治理代幣的持有人,也就是整個社區。DFINITY 會作爲主要的技術貢獻者繼續參與開發和推廣整個平臺,但我們只是貢獻者之一。在上線短短三個多月的時間,已經有不少其它的社區團隊參與進來。這個平臺的發展離不開整個社區的貢獻。進一步推動去中心化,是我們當下最主要的目標。

作爲 Internet Computer 這個平臺的創建者,DFINITY 的願景是 blockchain singularity,也就是說所有能在互聯網上面跑的應用,都應該用區塊鏈的技術構建。

爲了做到這一點,我們在 TCP/IP 層面之上,應用層面之下,添加了一層基於區塊鏈共識技術的協議,我們把它叫做 Internet Computer Protocol (ICP)。這一套協議是通過在多個物理節點(計算機)之間交換數據,構建一個虛擬的子網。

子網內部的節點對輸入輸出達成共識,相互驗證計算結果,並可以和其它子網之間通訊。多個子網組合在一起共同構建出一個虛擬的計算機,容量可以隨着子網的增加而增加,誰都可以在上面跑程序,訪問其它人的程序,等等。

1.png

不過這聽起來和我們現在的互聯網好像也沒什麼差別,尤其是 micro service 的概念。那爲什麼現在的互聯網不能叫做 Internet Computer 呢?

這個差別就在於這一套 ICP 的協議。這個協議的目的是確保所有程序都被正確執行,它們的狀態無法被篡改,當一個程序調用另一個程序時,它是可以信任這個調用會被正確執行的。目前的互聯網因爲缺少這一層協議,導致所有的程序都要自行解決可用性、可靠性以及相互之間的授權等等繁瑣的問題,並因此帶來各種不兼容和安全性上的包袱。

這裏面的核心就是可信任計算,有個說法叫 trustless trust 我覺得很貼切,無需信任(局部)的信任(整體)。區塊鏈從比特幣開始到今天的發展,也應證了可信任計算的威力。但絕大部分應用還是集中在金融領域,而我們的目的是拓展到更廣闊的互聯網領域上去。爲什麼區塊鏈上不可以直接跑網站?爲什麼驗證區塊鏈上的計算需要整個鏈的歷史數據?只有正面解決這些問題,才能讓區塊鏈成爲互聯網的核心技術,而不僅僅是停留在記錄和轉賬的層面。

問題 1

Internet Computer 提供了全新的程序構建範式,有自己的一套“行話”,可否簡單介紹這些“行話”以及你認爲對於開發者來說,最有用的基礎設施有哪些?

回答:可以從幾個不同的角度來聊一下,首先從終端用戶來看。

訪問一個 Internet Computer 上的應用和訪問一個普通網站基本上沒有什麼不同,使用者並不需要支付任何費用。這和使用傳統雲服務的時候,費用由項目方承擔是同一個意思。其它大多數區塊鏈都是要向使用者收取 gas 費用,需要預裝錢包軟件,門檻比較高。

運營一個應用的成本,包括計算和存儲等,是以 Internet Computer 的原生代幣 cycles 來衡量。cycles 的價格錨定 SDR,1SDR = 1 Trillion Cycles。SDR 的價格是國際貨幣基金組織設定的一籃子貨幣加權得來的,包括美元人民幣等,相對穩定。

回到用戶角度,他們不必在意 cycles 這個概念。但很多應用需要處理用戶登錄,爲此 Internet Computer 上面也推出了一套匿名的身份管理系統,我們把它做 Internet Identity。這套系統完全是基於 web 標準,用戶不需要安裝錢包軟件也能使用。

所有這些都是爲了降低用戶使用的門檻,讓區塊鏈的應用能夠真正走出去。Internet Identity 主要是爲了解決一個身份在多個設備登錄的問題。而且這個身份在不同的應用中,應用所拿到的代號是不一樣的,這可以防止用戶的行爲被惡意跟蹤。

最後,用戶可能也有興趣參與 Internet Computer 的治理。這是一個叫做 NNS 的神經元投票系統,算是我們的一個創新吧。它也是應用層面的,不過它有一個比較特殊的權限,那就是能夠管理所有 Internet Computer 的子網和整個系統的方方面面,包括節點運行的代碼,版本升級,創建新子網,接入新節點等等。

要參與投票,首先需要持有 ICP 代幣,鎖定一定數量的 ICP 來得到一個神經元,投票的權重和鎖倉數量,鎖倉時長,以及神經元的年齡都相關。參與投票也會得到獎勵,獎勵的多少和投了贊成還是反對無關。還可以跟隨其它神經元的決策,自動進行投票。總體這些設定上是爲了讓用戶投票的行爲和平臺的長期利益掛鉤,並獎勵用戶做出的貢獻。

談了用戶角度,那我們再從開發者角度來看一下。

跑在 Internet Computer 上的應用程序,是封裝在一個叫 canister 的輕量級容器裏面。這個通常大家比較熟悉的 docker 容器的概念有點不太一樣,canister 不僅僅是封裝了代碼,而且自動對容器的狀態做持久化。可以簡單理解爲一個長期運行的操作系統進程,進程的狀態包括內存和消息隊列,都是自動保存了,不會因爲開機關機而丟失。這意味着在 Internet Computer 上面已經剝離文件系統的概念,開發者不需要考慮讀寫文件和硬盤來保存數據,這是一個相當大的簡化。

另一個開發者需要了解的是 canister 之間的通信模式是異步的,屬於 actor model。也就是每個 canister 都是自己的進程,和其它 canister 發消息來通信,也就是異步方法調用。一個 canister 內部消息隊列的處理都是單線程,不需要考慮鎖,每一個方法調用都是滿足原子性的。熟悉 actor model 編程的很容易上手。

開發一個應用,通常 canister 容器是作爲後端的,前端交互可以是在瀏覽器裏,也可以是單獨的 APP。之前也提到 Internet Computer 可以直接跑網站,這裏就是說 canister 可以自行實現 http request 的接口,返回網頁包括 Javascript 到用戶的終端。前端後端可以一起打包成 canister 部署到 Internet Computer 上。

前端開發我們有現成的庫可以使用,Javascript 和 Rust 都有。前端需要調用後端代碼的時候,直接做一個異步函數 await 調用就好了,底層都已由庫函數實現。如果需要了解更多的話,這裏面有一個接口和數據編碼的格式,叫做 Candid,支持多個語言的實現。Canister 對外部的接口和數據類型,都是用 Candid 來描述的。

總的來看,開發者需要了解的都是圍繞着 Canister 這個概念展開的。WebAssembly, Actor model, Orthogonal Persistence (自動持久化), Motoko, Candid。我還推薦瞭解一下 System API 也就是 Internet Computer 接口的標準 https://sdk.dfinity.org/docs/interface-spec/

這個資料很詳細,涉及了整個系統的方方面面,而且我們做了不少形式化的努力,定義了接口的語義,方便開發者深入理解系統的行爲。

如果是做系統層面的開發,比如共識協議,虛擬機,等等,那可以談的就更多了,可以去看 DFINITY 官網上技術圖書館的視頻系列 https://dfinity.org/technicals

問題 2

與傳統的阿里雲、騰訊雲、 AWS 等平臺相比,Internet Computer 有什麼不同? 它們也是公司自建的私有云服務,也是用的數據中心,異地備援,多節點運行的。

回答:目前的雲服務平臺,都是基於一個基礎的架設,你必須依賴這個平臺的提供者能夠維護平臺的安全性,保持網絡聯通,計算不間斷,數據不丟失,等等。

商業平臺自身的利益和它所服務的用戶之間的利益,雖然多數時候不衝突,但也不是完全一致的。有一個大家應該都比較熟悉的概念 Platform Risk (平臺風險),這裏就不展開講了。

但最重要的一點,這些雲平臺基礎設施提供商,都不希望自己成爲 commodity (可替換的商品),都在各盡所能留存和鎖住客戶。

Internet Computer 首先是作爲一個去中心的網絡存在的。裏面的節點都是由第三方運營,跑在不同的數據中心裏。而真個網絡的治理,是交給用戶的,並不由節點運營商,或者是數據中心來主導。

所以這裏面並沒有一箇中心化的商業機構來做所有的決策。整個治理系統的設計,也是儘量從長遠的角度出發,希望保持用戶的利益和平臺發展的一致性。這個平臺是付費給節點運營商的,某一個節點到底是由張三還是李四來運行根本不影響,這是一個自由市場。所以對於 Internet Computer 而言,硬件和網絡這些基礎設施,已經成爲了 commodity (可替換的商品)。

回顧整個 PC 行業的發展史,我們其實可以看到,基礎設施(比如 PC 硬件)成爲 commodity (可替換的商品)是歷史的必然規律,在雲服務這裏我相信也不會是一個例外。

可以說 Internet Computer 這樣的計算平臺,已經和硬件的基礎設施建設剝離開了。這種商業模式,如果沒有去中心化,如果沒有區塊鏈的技術,是沒法想象的。但今天它已可以成爲一個現實,這是時代進步的最好詮釋。

從比特幣以太坊一路走來,有的人只是看到了幣價炒作和旁氏騙局就對這個新興事物持否定態度,其實時代的變革就在眼前。

除開利益方面的一致性,另一個方面用要更先進的技術來簡化系統冗餘,從而節省整個平臺開銷,也意味着爲用戶帶來節省。

前面我們也說了不少可信任計算的優勢,其實這裏面還要加上一個分佈式的優勢,和一個使用前沿的加密技術的優勢。它們意味着很多傳統的技術維護方面的工作,比如防火牆這種,基本上已經不再必要。一個客戶要想使用好目前這些雲平臺,它必須要在運維上投入很多。而 Internet Computer 則能夠節省很多這方面的成本。

第三點則是 tokenization, 也就是應用的代幣化。這可以說是整個互聯網應用發展的下一個趨勢,不可阻擋。傳統的雲服務商也最多是提供和區塊鏈之間的橋接組件,一整套做下來它的架構不可避免還是相當臃腫的。Internet Computer 既然能夠直接跑網站,跑應用,作爲原生區塊鏈,做 tokenization 的整合是非常容易的。

問題 3

Internet Computer 上的每個智能合約都是“可擴展”的,具體說說協議的擴展在技術層面是如何運行的,目前有無擴展的案例?

回答:擴展性(Scalability)有好幾個維度,一個是存儲空間上的,一個是網絡流量上的,還有一個是計算能力,單位時間能夠處理多少事務。是否可擴展主要是看能否繞過已知的瓶頸。在一個公共平臺上,我們還要考慮不同用戶之間,不同應用之間,有限的資源如何分配的問題。

Internet Computer 在設計上主要的思路是 scale out,也就是遇到瓶頸時通過增添資源,創建新的子網來解決。這個和主流的 web 應用的思路基本上是一致的,當一個應用無法通過一個 canister 來處理所有用戶請求的時候,合理的做法是在應用層面上使用多個 canister 各自處理一部分的用戶請求。也就是說在設計應用的時候,需要考慮到這一點,至少要留出一個遷移到新架構的可能性。目前我知道 OpenChat 的設計是走多個 canister 的,DSCVR 也留有這樣的餘地,但目前還是集中在一個 canister。

從系統層面,通過 canister 擴容,可以超越目前 4G 內存的門檻。計算方面,也是從併發的指導思想出發,沒有選擇以太坊那種全局原子性的設計。所以不同 canister 處理各自的消息,都是在自己的線程裏面,只要硬件負載容許,是不影響其它 canister 的性能的。至於網絡方面,基本上帶寬決定了擴展的上限,任何一個區塊鏈都無法避免這個物理瓶頸,只能通過分片,對應到 Internet Computer 這裏就是不同的子網。

當然系統層面也有各種各樣的優化方案可以帶來性能的提升,我們一直也在做這方面的工作,希望能夠充分發揮硬件的性能。

問題 4

哪些類型的 Dapp 更適合搭載於其上?我們發現目前 Internet Computer 上的 DeFi 協議比較少,未來 Internet Computer 上 Dapp 的賽道都有哪些方向?

回答:DeFi 主要還是需要流動性來推動,出於安全考慮,目前尚未開放 canister 轉賬 ICP 的功能,這同時也限制了流動性。不過這個限制是暫時的,目前來看整個網絡自從上線後,穩定性還是不錯的,在適當的時機相信會通過 NNS 投票來解除這個限制。我相信已經有不少開發者都做好了準備,DeFi 應用的爆發只是時間問題。

我個人對目前 Internet Computer 上面的 social dapp 還是很看好的。這個賽道一旦有了 tokenization 的加持,會非常迅速成長,絕對不會遜於 DeFi 和 NFT 遊戲這類的。其它區塊鏈上也有一些社交屬性的 dapp,但都受制於起步的門檻,畢竟正確使用錢包這一步,就已經難倒了很多用戶了。在 Internet Computer 上面的 dapp,使用 Web 標準的技術,任意瀏覽器均可訪問。

另外一個我看好的方向是面向個人用戶和麪向中小企業的應用。像項目管理,文件共享,創作者經濟(podcast, vlog,網文等)這種,雖然目前互聯網上已經都有比較成熟的解決方案了,但平臺風險始終存在。前面也提到雲服務的平臺風險,相信大家對各種其它領域的巨頭壟斷都有一定的切身體會。現在去中心化的結構是一個新的可能,平臺本身應該變成透明的存在,而不是盤踞在食物鏈的上游用霸王條款來吞噬用戶的利益。

歸根結底,哪個賽道有前途,取決它的應用能否快速彙集價值。這個價值,不是說你的項目鎖倉有多少,因爲這個量它隨時都可以在變。而是說有你建立了多少和用戶之間的聯繫,建立了多少和其它應用之間的聯繫,這種關聯隨着信任加深,隨着用途增多,它會越來越有價值。代碼可以粘貼,但這種關聯是無法拷貝的。而如果運用得當,代幣在一定程度上可以加速價值的聚集,但最終還是取決於項目本身的內在價值。

問題 5

Canister 作爲 Webassembly 運行的容器,承載了 Dapp 鏈上運行的環境。最近關於 Canister 有哪些新進展?

回答:就在這週一,DFINITY 發佈了開發路線圖,歡迎社區的參與。https://dfinity.org/roadmap。其中和 canister 相關的的有:

1、Stable memory 擴容

2、Canister ECDSA 簽名

3、應用 AMD SEV 保護數據隱私

擴容目前主要是針對 stable memory 也就是不受代碼升級影響的內存管理。之前是受到 Wasm 虛擬機 4GB 的限制,不過現在已經可以放開,上限受制於子網的內存總量,目前大約在 300GB 左右吧。

ECDSA 閾值簽名技術,簡單講就是讓每個 canister 在不存儲私鑰的前提下,也能對數據做出簽名,並且此簽名可以通過公鑰驗證,每個 canister 都可以得到一個唯一的公鑰。這個是和我們已經實現的 Chain Key 技術一脈相承的,它的應用也很廣泛,比如 canister 可以直接發起一個比特幣或者以太坊的交易並且簽名。

這意味着原來必須在私密環境下才能把私鑰交給程序做的事情,現在可以放到一個去中心化的環境裏來做。還可以應用在頒發 SSL 證書,DNS 定製域名等等方面。

使用 AMD SEV 的技術主要是爲了在一定程度上保護 Canister 的數據隱私,這樣就算是節點運營商也無法窺探用戶數據。我們一直在做這方的準備,難度也比較大。好在目前節點所採用的硬件都已經支持 SEV 技術了,所以到時候希望是一個平穩的升級。

問題 6

“開放互聯服務”可以實現永久性 API,可以讓開發者放心地構建依賴於其他服務提供的數據或功能,並且不會存在撤銷的風險。“開放互聯服務”如何部署到互聯網計算機上?

回答:提供永久 API 最簡單的做法是通過把 canister 控制者設定爲空集,來讓它的代碼成爲不可修改的。

我個人也做了一個很簡單的 canister,叫做 blackhole。它的主要目的是讓其它 canister 可以把控制者設成 blackhole,這樣不僅代碼成爲不可修改的了,blackhole 還提供額外的查詢功能,比如查看賬面 cycles 的餘額,或者查看代碼的哈希值。blackhole 本身的控制者被設成它自己,它的代碼也是公開,很容易驗證哈希值的正確性。如果有需要讓自己的 canister 被其它人信任,把它的控制者設置成 blackhole 是一個簡潔的方法。

但如果還需要保持代碼升級功能的話,這就需要引入社區治理功能了。我們正在開發中的 Service Neuron System 可以讓應用通過鎖定代幣創建神經元,然後進行投票,來管理應用的方方面面,包括代碼升級。

當然我們做的這套 SNS 系統還在開發中,尚無實例。而且它只是候選方案之一,社區現在已經項目有在這方面做其它的嘗試,相信都會逐漸成熟起來。

問題 7

安全性是計算機的重要議題,Internet Computer 運用哪些機制來替代類似防火牆等功能?在防篡改上,DFINITY 與其他區塊鏈底層相比有哪些特點?

回答:防火牆的一個主要功能是防止黑客入侵系統,取得內網權限,從而達到盜取或者篡改數據的目的。首先,這個內網外網權限的劃分,就很有問題。它相當脆弱,因爲一旦被攻破,內網所有默認的權限都被暴露在攻擊者面前了。所以我們看到不少公司已經拋棄了這種做法,改成給每個服務設置權限,使用統一身份管理的技術來對用戶授權。

與之對應的則是 Internet Computer 上面的身份管理。一個公鑰對應一個用戶的身份,然後每個 canister 都能夠獲得調用者的身份。這個身份是無法被第三方篡改的,無論是用戶調用 canister 還是 canister 之間的調用。之所以能夠做到這一點,是因爲這種調用必須通過共識協議,尤其是跨子網的調用,在發起方和迴應方都要通過共識協議,經過驗證纔會被認可與執行。

而要快速高效地認證任意子網簽名的有效性,就必須用到我們研發的 chain key 的技術。它能夠在保證閾值簽名公鑰不變的同時,支持動態的節點連入和移出。這一點其它區塊鏈目前都無法做到,所以在驗證交易這方面 Internet Computer 目前是領先的,它的子網之間基本上不需要同步數據(除了必需的各子網公鑰和節點公鑰)。

想在 Internet Computer 上面篡改數據,僅僅攻破一個節點的權限是不夠的。必須要能夠控制一個子網的 2/3 以上的節點數才能做到。所以子網的安全性在一定程度上取決於節點數量。而且通過節點的不定期輪換,也能進一步加強這方面的安全性。就算是一個子網被攻破,它也無法假冒其它子網的身份,所以損失的範圍也是可控的。

保障數據真實可靠不被篡改是一方面,對數據隱私的保障則是另一方面。大多數區塊鏈都是公開數據,所以也談不上什麼隱私保護。真正的隱私保護可以通過應用層面來實現,用同態加密這樣的技術,但目前效率不夠。所以我們目前的計劃是應用 AMD SEV 技術,在硬件層面加密。但整個 Internet Computer 的安全性並不依賴於硬件,有 SEV 的保障是一個加分項。

問題 8

DFINITY 的名號其實早在 6 年前就已經打響了,雖然主網上線的過程比較慢,但我們可以看到 DFINITY 團隊是真的想做一些顛覆性的東西,共識也是十分強大的。從“以太坊的姐妹鏈”到“世界級互聯網計算機“的轉變受到了哪些因素的影響?

回答:World Computer 的口號是以太坊最先提出來的,也激勵了很多人,雖然現在它更多的是在 數 DeFi 和數字資產方向發力。“世界級互聯網計算機”方向也一直是 DFINITY 努力的目標,並不是融資以後才更改的路線。

起初由於團隊條件的限制,只是在 BLS 和共識協議方面有明確的創新,所以開始第一步是打算先從這方面入手,推出一個鏈再逐步迭代。但後來我們意識到,不解決跨子網通信的問題,那我們將永遠停留在“又一個區塊鏈”的窠臼中,難以創新。也正是因爲團隊的堅持,纔有了在 chain key 方面的突破,解決了跨子網驗證的難題,實現了 scalability 的承諾。

回頭來看,其實我們只要不斷地問自己一個問題:爲什麼去中心化的區塊鏈不可以跑網站?

首先要解決一個效率問題,就是訪問網站是需要毫秒級的響應的,怎麼能做到?我們的答案是把只讀的查詢和狀態的修改分開,那麼 99% 的網絡流量都是隻讀的,是可以做到毫秒級響應的。修改狀態我們也通過共識協議方面的創新做到兩到三秒之內的響應。

效率達到了,那如何驗證內容的正確性?如何讓普通的瀏覽器也能做到?那就必須精簡驗證的所需要的條件。能不能拋棄歷史區塊,僅僅通過一個公鑰?用 BLS 公鑰的話,怎麼解決節點動態變化的問題?怎麼解決中心化域名和 SSL 證書的問題?訪問流量增多的話,如何擴容?擴容的瓶頸和邊界在哪裏?擴容的需求和同步合約調用的方式衝突了怎麼辦?

只要你不停地追問下去,不停地尋找答案,相信一個切實可行的方案會逐步浮現出來。這也是 DFINITY 過去幾年堅持在做的事情。

問題 9

以太坊剛完成 EIP-1559 升級,邁出了通縮的第一步,代幣價格也逐漸走高。你認爲對於去中心化基礎設施來說,代幣的表現給支持者激勵更大還是技術上的顛覆性更重要?怎麼做到兩者的相對平衡?

回答:我是這樣看的,代幣的短期表現取決於市場參與者的信心與預期,長期表現還是要回歸平臺的價值本身。以太坊的技術可以說是經歷了時間的檢驗,儘管有各種不足之處,還是得到了加密貨幣整個市場的認可。至於通縮還是通脹,各有弊端,我是不太能夠認同 BTC maximalist 那套說辭的。DeFi 在流動性和激勵方面的創新也是非常精彩,不過放長來看,多數項目其實並沒有增加價值,更多的是一場數字的遊戲。短期通過代幣價格的提升得到的用戶,也可能因爲價格回落,或者另一個項目的崛起而流失用戶。

技術的創新,也很容易被競爭對手拷貝過去。不過我們從整體來看,這些創新是一直推動整個行業向前的。落到單個項目上,到底能否因爲純粹技術創新而獲益,還真不好說。業內都在說生態建設,生態項目在一個平臺上到底能有多少保障,尤其是初創平臺,怎麼能說服開發者來投入,不是一件容易的事情。

我覺得最值得努力的方向就是把盡力圈子擴大,從支付轉賬,到 DeFi,到 NFT 和 遊戲,就是一個不斷開疆擴土的進程。在這個大趨勢下,盡力把區塊鏈技術拓展到更廣泛的領域中去,比如讓原生網站跑在區塊鏈上這種目標。用技術的創新和代幣的激勵,一起來獲取新的用戶,才能繁榮生態,提升價值。

問題 10

很多人認爲 Internet Computer 是 web3 應用的主要陣地。每條公鏈或多或少都有自己對於 web3 的見解和技術實現路徑,如波卡、以太。DFINITY 對於通往 web3 之路的見解和未來規劃 / Roadmap 是怎樣的?

回答:DFINITY 的宗旨是拋開一切不必要的包袱,向 Blockchain Singularity 的目的地進發。Internet Computer 這個項目還有許多未能完善的地方,離完全實現這個目標還有一定的距離,我們希望更多的人能加入進來,一起推進平臺本身的技術進步和構建更豐富多彩的上層項目,來贏得客戶。

每個的公鏈側重點不太一樣,我們相信一切能用區塊鏈構建的,最終一定會用區塊鏈實現。所以也並不排斥結合其它公鏈的技術,比如我們週一發佈的路線圖中,有和以太坊、比特幣的深度整合項目,對雙方而言都是一個完美的互補。這會進一步激發資產跨鏈的流動與融合,簡化應用架構,拋棄雲服務這種中心化的包袱,從而提升應用整體的安全性和強壯性。

跑網站是重要的一步,但它只是 Internet Computer 的第一步。我相信當下 Internet Computer 所打下的基礎,一定會在未來成爲 Blockchain Singularity 這個宏偉拼圖的一部分。

問題 11

請問下 Canister Signature 是什麼?Canister 用於簽名的私鑰存放在哪裏?Canister 裏是否支持類似以太坊智能合約的 Event 機制,可以通過訂閱來獲取某個 update call 是否是 caller 根據返回值獲取?最後,普通 Canister 什麼時候可以處理 ICP 代幣?

回答:Canister Signature 是指用子網的公鑰給 canister 的計算結果(或者合約狀態)做簽名。目前我們使用的是 BLS 閾值簽名,它有一個很好的特性就是公鑰和簽名的唯一性,是其它聚合簽名的技術不具備的(BLS 也可以做聚合簽名,我們在協議當中也使用了)。

閾值簽名,簡單講就是各個不同的節點,它們有各自的私鑰對計算結果簽名,一旦集齊了達到限定數量(閾值)的簽名,則可以得出一個唯一的閾值簽名,用一個公鑰即可驗證,所以這個公鑰被當作是子網的公鑰。這裏是沒有一個相對應的子網私鑰的,節點的私鑰是各存各的,都不一樣。

一個子網上可以跑很多 canister,用 merkle tree 的方法,很容易得到指向其中一個 canister 計算結果的路徑,所以可以把子網的簽名加上這個路徑看作是 Canister 對某條數據的簽名。

Canister signature 一定程度上相當於 event log 或者收據。因爲我們不要求節點保留所有的歷史區塊,單獨爲了 event log 做這些也沒有很大意義。畢竟通過 query call 和 certified var 也能實現這樣的功能,並且更強大。

Canister 處理 ICP 代幣在技術上早就不是問題,是因爲安全的考量纔沒有放開權限。隨着系統的穩定我們的信心也增強不少,所以如果沒有意外,估計近期就會通過社區投票來決定。

社區提問

提問:我發現 icp 的開發者比較喜歡開發社交應用,請問 icp 爲什麼適用於開發社交應用或者開發者爲什麼喜歡在 icp 開發社交應用?

回答:我的理解,價值的聚集,首先是來自人的聚集。所以一旦一個區塊鏈平臺可以直接把人聚集起來,一定會有這樣社交類的項目誕生。但現在的 Web 環境下想要做出一個社交類的爆款相當不易,所以這些項目一定會去嘗試不同的玩法。tokenization 代幣化還沒有固定的套路,我也很期待看到這裏面的創新。

提問:開發中有個擔心,舉個例子 A 容器調用 B 容器, B 容器調用 C 容器,如果在 C 容器更新了狀態,正常返回值給 B 容器之後,B 容器掛了,此次 A 容器也會失敗但是,C 容器的狀態已經變更了,有沒有推薦的方案解決類似的原子性問題 ?

回答:以太坊的原子性設計是一旦調用棧上的一個合約發生狀態回滾,所有的合約都必須狀態回滾。這意味着有一個全局鎖,在處理一條用戶事務會鎖住所有相關的合約,直到它全部處理完成,在此期間被鎖住的合約不能處理任何其它事務。這樣的設計雖然開發者編程方便,但是先天缺陷是性能無法擴展。所以我們在最初設計 canister 的模型時就摒棄了這種做法。

如果需要這方面的組合性,傳統數據庫已經有很成熟的解決方案了,比如兩步提交 (two-phase commit) 。這在完全可以在應用層面商議一個標準經由 canister 接口實現,不一定需要在系統層面支持。

系統設計上總是要做一定的取捨,有時候添加限制比較好,有時候提供選擇比較好。我們的看法是單個方法調用符合原子性是一個比較合適的粒度,沒有必要強制整個調用棧一起做原子化。

提問:我是個幣圈小白,覺得 Dfinity 生態上的錢包太難用,後期會改變嗎?

回答:首先現在的錢包,所謂的互聯網身份 II 不是必須的,它是一個可選項。我自己做的 App 就沒有用它。其次,我的理解是現在各個設備使用瀏覽器的支持比較好,但是手機上 App 的支持有一定難度,這需要進一步的研發工作。在中國使用安卓手機的用戶,如果上面不能安裝 Google Play 服務的話,會導致無法使用 WebAuthn,這也需要一個合適的解決方案,我們正在調研。

提問:我是一名正在互聯網計算機上構建應用的開發者。我想問後端何時可以進行外部 http/https 調用?此外,由於每個容器 4GB 的限制,我必須實現我的分佈式存儲系統,那麼 BigMap 什麼時候發佈或有其他更好的可擴展文件存儲方式嗎?

回答:對外部進行 http/https 調用可以分開看,一個是讀,一個是寫。前者需要預言機(oracle),後者如果對方滿足 ren-entrancy 則完全是可行的。

提問:以太坊上的 DAPP 可以直接轉到 IC 上用嗎?

回答:solidity 可以編譯到 Wasm 了,但編程模式不太一樣(比如原子性的粒度),而且需要支持的系統接口也不一樣,所以還需要做一定的工作才能支持。

提問:問一個共識的問題,子網中共識屬於 PoS 嗎?子網節點共識中作惡的話,是否有懲罰機制呢?

回答:是 PoS,目前沒有要求節點質押代幣。因爲是准入機制,節點不可以匿名,所以相關的懲罰機制比較容易實現。節點需要定期領代幣作爲工資,目前的懲罰機制是從中扣除。

提問:stoic 錢包助記詞不能導入 plug 錢包,問了一下 stoic 開發者,說是加密算法選擇的不同。同時我看官方的錢包助記詞更不一樣,這個後續會有統一的標準嗎?能夠實現像以太坊那樣的一個助記詞多個錢包導入嗎?

回答:的確會造成一個不通用的問題,所以短期內只能提醒用戶標註一下哪個助記詞是哪家的。長期來看,希望社區能夠協商達成一個通用標準。

如果你對於 Dfinity 生態感興趣,請關注星際視界公衆號並回復“ICP”,進入 Dfinity 生態探索交流羣。

——End——

來源鏈接:www.odaily.com