BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

從技術底層解讀互聯網計算機如何引領Web3 時代?

星际视界IPFSNEWS
特邀专栏作者
本文約12246字,閱讀全文需要約18分鐘
隨著通訊和可視化移動終端設備的逐漸普及,人們簇擁於web3 或元宇宙的概念。
AI總結
展開
隨著通訊和可視化移動終端設備的逐漸普及,人們簇擁於web3 或元宇宙的概念。

介紹

介紹

介紹

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

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

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

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

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

1.png

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

問題1

問題1

問題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/

問題2

問題2

問題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 在流動性和激勵方面的創新也是非常精彩,不過放長來看,多數項目其實並沒有增加價值,更多的是一場數字的遊戲。短期通過代幣價格的提升得到的用戶,也可能因為價格回落,或者另一個項目的崛起而流失用戶。

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

問題10

問題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——

DFINITY
歡迎加入Odaily官方社群