eosiolib檔案解析

2021-08-29 17:58:23 字數 2066 閱讀 9725

source base on eos version: 1.0.5,some photo except.

在eos原始碼中,eosiolib庫在原始碼中的位置如下:

在\eos\contracts\eosiolib一共有46個檔案,其中很大部分都為標頭檔案,具體的實現都在 eos/libraries/chain/wasm_inte***ce.cpp中,下面我們對每個檔案都做乙個較為簡單的介紹。

此標頭檔案為介面函式,這些c api函式是在 eos/libraries/chain/wasm_inte***ce.cpp 中實現的,主要提供給四大合約使用。

主要包含有這些功能 :

在action.hpp中定義了action結構體,它是action打包後的資料形式,即所有push action產生的資料根據各自不同的資料格式進行封裝打包和傳送。其中還涉及到一些執行許可權相關的結構體的定義permission_level,它的處理流程如下圖展示:

最後action將會放在對應的vector迭代器中。

帳戶資產的定義,即乙個int64_t表示資金,symbol_type表示單位,目前被定義為sys。

查詢區塊鏈內部狀態的api,目前用於獲取活躍(active)的生產者,是從controller中拿取的,原始碼在eos/libraries/chain/wasm_inte***ce.cpp中實現。

工具鏈生成的編譯器內嵌部件的api。

定義所有智慧型合約的基類,如果自己寫合約,需要從這個基類派生,然後使用eosiocpp工具將自己的標頭檔案和原始檔生成wasm檔案及其相關的介面檔案。編寫智慧型合約需要注意各個檔名需要名稱相同,因為載入智慧型合約時填寫的引數是根據智慧型合約檔案路徑來的。

定義代幣的單位。

對給定的資料進行各種hash運算並進行儲存,或者對資料進行校驗。原始碼在eos/libraries/chain/wasm_inte***ce.cpp中實現。

貨幣(token合約)的建立、發行、轉帳、餘額查詢在裡實現。

定義資料流操作,可以把自定義的類的資料成員放到vector中,需要時可以再次讀取出來,方便資料的傳輸。

它定義了執行action的函式模板execute_action,使用遠端api呼叫action時,會執行這個函式。其中有兩個巨集:

包含其它一些型別的定義。在開發智慧型合約時,一般都包含這個標頭檔案進行智慧型合約的開發。

eosiolib中實現了eosio專案中自定義的記憶體管理,對常見的記憶體分配方式進行了重新編寫(其實只是簡單的封裝而已)

固定大小的按鍵按字典順序排序的key,使用資料成員std::array實現的。

32/64/128/256位版本的不動點變數,暫時還不知道做什麼用的。

重新封裝了多索引容器模板,最終裡面還是使用的boost:multi_index,這一點沒有變化,它具有以下幾個特點:

很多態別都使用了它來存放,如生產者,投票,單例等等。

可選型別,與boost:optinal基本一致

在eos/libraries/chain/wasm_inte***ce.cpp的permission_api類中實現,事務提交時需要檢驗執行者的許可權在這裡。具體的校驗在controller定義的資料庫去比對了。

eosio中各種引數型別列印函式的定義,最終使用的是std::ostringstream型別。

定義特權使用者的各種資源限制,事務相關引數,塊相關引數,以及資料傳輸時間間隔的各種限制。

出塊者相關資訊的封裝。

公匙c++實現的反射器,帶有大量的巨集,可以自行分析下,下面有乙個部落格對此有些講解:

單例模式的封裝,也儲存在multi_index中。

//nothing

代幣符號,規定為sys

系統時間函式和靜態斷言的定義

時間相關,類似boost中的實現

事務相關,主要是對action用vector封裝,另外,對nsaction的資料傳輸也做了各種限制,如預期時間,頻寬,cpu算力,延遲傳輸等等。還有乙個get action函式的實現,可以獲取當前區塊相關的資料。

eosiolib所有使用到的型別都在這裡定義,以及name識別符號與std::string型別之間轉換函式的定義;

所有檔案相互間的引用關係如下:

整型的定義,在datastream中有應用。

位元組陣列

解析xml檔案(DOM解析)

解析的檔案 醫院心電圖記錄單 門診號 1002080066 住院號 201800964 姓名 羅2 性別 女 年齡 26歲 心檢號 科室 婦產科 床號 9 複查時註明原心檢號 韻律 竇律 心房率 82 心室率 82 軸向 電軸正常 pr間期 0.13 qrs波 0.08 qt間期 0.34 正常心電...

解析xml Python解析XML檔案

今日分享 python解析xml檔案 閱讀本文大概約10分鐘 xml 全稱是extensible markup language,意為可擴充套件標記語言,是一種用於標記電子檔案使其具有結構性的標記語言。xml易於擴充套件,主要用來傳輸和儲存資料,聚焦的是資料的內容。以xml結構儲存資料的檔案即為xm...

etree解析xml XML 檔案解析

目錄 xml 介紹elementtree 基礎講解2.1 節點屬性2.2 節點搜尋獲取矩形框的座標和類別參考 我需要對目標檢測標註工具 labelimg 得到的xml檔案進行解析,得到其中矩形框對應的類別和座標值,所以對python下面的elementtree研究了一下。xml全稱為可擴充套件標記語...