<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Dfinity系列解讀之:四個角度全面解讀Canister(下)

          共 2538字,需瀏覽 6分鐘

           ·

          2021-05-09 19:06

          原力區(qū)原作

          《Dfinity系列解讀之:四個角度全面解讀Canister》的上半部分從智能合約和Actor兩個側(cè)面解讀了Dfinity中的Canister。


          Canister中文是容器、罐子。它由代碼和數(shù)據(jù)組成,Dfinity應(yīng)用中的各個功能、組件的實現(xiàn)都要通過Canister——這個Dfinity中的計算單元來完成。


          本文會繼續(xù)從另外兩個角度——進程和Webassembly繼續(xù)展開:


          ICP作為一個操作系統(tǒng)是如何管理其中的進程-Canister的?


          Canister實際在IC上又是如何執(zhí)行?





          進程




          在一個系統(tǒng)工程師眼中,Canister很像操作系統(tǒng)(Linux、macOS、Windows)中的進程。


          操作系統(tǒng)會追蹤進程的有效內(nèi)存范圍,而Canister在其線性內(nèi)存上有一個由互聯(lián)網(wǎng)計算機(IC)強制限定的邊界。
           
          當有任務(wù)需要完成時,操作系統(tǒng)的進程調(diào)度器會喚醒一個進程,而IC會幫我們統(tǒng)籌安排Canister們的執(zhí)行。
           
          操作系統(tǒng)負責維護著進程的狀態(tài)(如文件描述符)。同樣地,IC也在維護、追蹤Canister的狀態(tài):Token(ICP)和cycle的余額、未完成的調(diào)用、權(quán)限等。這里解釋一下cycle,它是Canister調(diào)用Dfinity系統(tǒng)資源(如計算、存儲等)的產(chǎn)生服務(wù)費,類似于以太坊中的Gas Fee。
           
          因此,我們把整個IC系統(tǒng)理解成一個超大的分布式系統(tǒng)的資源/進程管理器,通過ICP最大化資源的利用率,達到優(yōu)化系統(tǒng)整體性能的目的。
           
           
          由于進程無法直接更改自己的狀態(tài),操作系統(tǒng)給進程提供了一些功能,使其能夠執(zhí)行如操作文件和與外圍設(shè)備通信這樣的操作。同樣,IC也以API的形式給Canister提供了一些功能:

          • 付款

          • 調(diào)用其它Canister

          • 創(chuàng)建和管理Canister

          • 對權(quán)限的管理

          • 獲取系統(tǒng)時間


          IC的一個獨特的特點是它提供了安全隨機的入口。在未來,Canister也有能力通過Canister的API簽名比特幣和以太坊合約(跨鏈)。

          說完了相似點,我們再來談?wù)凜anister和傳統(tǒng)進程不同點:Canister的副本遍布在子網(wǎng)的節(jié)點上。也就是說,當Canister在遇到WebAssembly的trap時,它不會像在進程中那樣崩潰,而是會回滾到當前消息執(zhí)行前的狀態(tài),這樣Canister可以繼續(xù)執(zhí)行新消息,實現(xiàn)了消息的異步。

          另外一點不同的是,Canister不像傳統(tǒng)系統(tǒng)中的進程那樣,有exit() abort()這樣的系統(tǒng)命令,也就無法像進程那樣被CPU從進程表中移除掉。

          它只能被IC的控制器(Controller)通過管理員命令的方式從系統(tǒng)中移除或更新它的狀態(tài)。這個控制器可以是用戶也可以是其它Canister,當在IC上構(gòu)建自治服務(wù)時,一個Canister控制、調(diào)用另一個Canister就成了一個關(guān)鍵因素。



           

          Canister作為WebAssembly模塊的實例




          Canister對于Web工程師來說相當于WebAssembly模塊的實例。這不僅僅是一個類比,而是Canister在IC上實際執(zhí)行的方式。也就是說,你運行在IC上應(yīng)用的Motoko代碼(Motoko是一種為互聯(lián)網(wǎng)計算機設(shè)計的編程語言,類似Solidity之于以太坊)需要被編譯成一個WebAssembly模塊后,才能被部署在Canister中執(zhí)行。

          WebAssembly(WASM)是一種能在現(xiàn)代計算機硬件上運行的低級計算機指令格式,它廣泛支持運行在互聯(lián)網(wǎng)上的應(yīng)用,并原生支持互聯(lián)網(wǎng)計算機(IC)平臺上的應(yīng)用。

          它設(shè)計的目是為諸如C、C++和Rust等語言提供一個高效的編譯目標。換句話說,開發(fā)者可以通過Motoko編譯成可移植的WebAssembly,同時還能以一種簡單的高級語言交付應(yīng)用。

          對于網(wǎng)絡(luò)平臺而言,這具有巨大的意義——這為客戶端app提供了一種在網(wǎng)絡(luò)平臺以接近本地速度的方式運行多種語言編寫的代碼的方式;在這之前,客戶端app是不可能做到的。

          因此,WASM虛擬機也被看作解決區(qū)塊鏈虛擬機瓶頸的既定方案,被波卡、以太坊 2.0 等項目采用。
           
          從技術(shù)上講,Canister的代碼部分是一個加載系統(tǒng)API的WebAssembly模塊;也就是由IC提供給Canister的方法。此外,Canister可以導出自己的API,其他Canister也可以調(diào)用該API。WebAssembly的文檔中寫到:“模塊的實例是一個模塊的動態(tài)表示,包含它自己的狀態(tài)和執(zhí)行堆棧?!?/strong>因此,Canister不僅僅是WebAssembly模塊,而是一個WebAssembly模塊的實例。

          為了Canister在部署時的簡單和可靠,Canister包含編譯過的代碼和依賴(執(zhí)行環(huán)境)。此外,它還存儲了關(guān)于當前軟件狀態(tài)的信息,并記錄了前面的事件和用戶的交互。這個狀態(tài)信息包含執(zhí)行環(huán)境的狀態(tài)和執(zhí)行應(yīng)用中的方法后導致的狀態(tài)的改變。




          小結(jié)




          可以說Dfinity中的Canister是繼承、優(yōu)化并吸納了智能合約、Actor、進程和Webassembly這四個概念中的元素,達到了它致力于大規(guī)模網(wǎng)絡(luò)服務(wù)的可擴展、可互操作的需求。

          Canister是互聯(lián)網(wǎng)計算機的基石,也是組成網(wǎng)絡(luò)服務(wù)的原子——大規(guī)模的互聯(lián)網(wǎng)服務(wù)需要由眾多Canister互相協(xié)作完成。


          引用參考:

          • https://www.youtube.com/watch?v=LKpGuBOXxtQ&t=4s

          • https://en.wikipedia.org/wiki/Actor_model

          • https://webassembly.github.io/spec/core/intro/overview.html


          end


          聲明:本文系原力區(qū)原創(chuàng)稿件,版權(quán)屬原力區(qū)所有,未經(jīng)授權(quán)不得轉(zhuǎn)載,違者將依法追究責任。
          提示:投資有風險,入市須謹慎。本文不作為投資理財?shù)慕ㄗh。


          點個在看,讓更多人看到原力區(qū)~

          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99热久 | 亚洲性爱手机版 | 人人操人人摸人人射 | 爱草视频网站 | 操逼不卡 |