1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 2538字,需瀏覽 6分鐘

         ·

        2021-05-09 19:06

        原力區(qū)原作

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


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


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


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


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





        進程




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


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

        • 付款

        • 調用其它Canister

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

        • 對權限的管理

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


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

        說完了相似點,我們再來談談Canister和傳統(tǒng)進程不同點:Canister的副本遍布在子網的節(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上構建自治服務時,一個Canister控制、調用另一個Canister就成了一個關鍵因素。



         

        Canister作為WebAssembly模塊的實例




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

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

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

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

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

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




        小結




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

        Canister是互聯(lián)網計算機的基石,也是組成網絡服務的原子——大規(guī)模的互聯(lián)網服務需要由眾多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)稿件,版權屬原力區(qū)所有,未經授權不得轉載,違者將依法追究責任。
        提示:投資有風險,入市須謹慎。本文不作為投資理財?shù)慕ㄗh。


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

        瀏覽 56
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一区二区日韩国产 | 1000部A片无码成人免费看 | 又粗又硬又爽视频 | av电影天堂网 | 99re极品视频 | 操逼免费免看 | 欧美不卡视频在线观看 | 性少妇vide0seⅹfree | 极品尤物36D爆乳呻吟视频 | 97伊人大香蕉 |