eos原始碼賞析(二):eos程式碼主分支架構
在上篇文章中我們完成了在Ubuntu作業系統編譯eos的程式碼,我們會發現在原有的路徑下會多出一個名為build的資料夾,那麼這個資料夾裡面有什麼內容呢?這些東西是用來幹什麼的呢?古有庖丁解牛,現我們也將一一的分解eos程式碼主分支,看看這些程式碼都包含了什麼內容,恰如我們看書都會先翻一下序文和目錄一樣,讓我們大致看一下這些個【目錄】,這樣才能更容易開啟eos的大門。
eos主目錄下有以下資料夾:
我們挨個來看一下:
第一部分:CMakeModules主要是cmake編譯所需要使用的一些配置資訊。
cotire是加快編譯速度的cmake檔案。
doxygen可以將程式碼中的一些註釋生成相關文件。
gperftools包含了效能分析相關的配置。
findWasm檢測當前機器是否可以生成wasm32。
insatall提供安裝的相關配置資訊。
上文咱們說過eos的編譯需要wasm的支援,因此wasm.cmake檔案提供wasm相關的配置資訊。
第二部分:Contracts中包含有智慧合約的相關內容:
asserter中定義了assert的相關結構體,並完成對智慧合約事件的分發。
bancor即班科,定義了bancor結構體,包含有凱恩斯國際貨幣單位的相關內容,主要是貨幣單位之間的轉換。
currency定義了currency結構體,同樣為貨幣的相關內容。
dice中實現了一個擲骰子的小遊戲。
eosio.system
eosiolib中包含有eos執行所依賴的庫的標頭檔案。
exchange中包含有交易相關結構體的定義。
identity中包含有身份的相關定義,在eos中身份和賬戶是兩個相互分離的概念,身份和賬戶的對映需要服從一定的共識。
infinite從字面意義上理解是無限,程式碼中實現了一個不停的去列印的函式。
libc++中主要是c++所以來的庫。
musl是linux作業系統下的一個標準庫。
noop實現一個空的智慧合約。
proxy實現代理的相關內容。
simpleDB 包含了資料庫相關內容。
skeleton看不出有什麼內容。
social主要是方便使用者建立屬於自己的貨幣同時可以讓其進行投票等舉動(馬上要開始的21節點競爭就是通過投票來進行的)。
storage方便使用者去修改賬戶的名字。
第三部分:一些文件說明
docker方便使用者在Docker上執行eos。不多做介紹。
docs中是一些文件。
externals裡面是一些依賴的外部檔案。
第四部分:Libraries是eos依賴的一些庫,其中有:
abi_generator用於生成abi檔案。
appbase為一系列的外掛編譯提供了一個框架,他可以確保外掛正常配置、初始化、啟動、關閉這一個流程。
chain這裡麵包含有eos作為區塊鏈的核心內容。
chainbase是為了滿足區塊鏈應用設計的一個數據庫,但是也使用於任意需要一個魯棒性較高的交易資料庫。
egenesis主要是測試P2P網路用的。
utilitiles主要是一些通用的標準函式。
第五部分:eos編譯執行所需要的外掛:
account_history_api_plugin 賬戶歷史記錄的介面外掛。
account_history_plugin 賬戶歷史記錄外掛。
chain_api_plugin 鏈的介面外掛。
chain_plugin 鏈的外掛。
faucet_testnet_plugin水龍頭測試網路外掛。
http_plugin http外掛。
mongo_db_plugin mongoDB外掛。
net_api_plugin 網路介面外掛。
net_plugin 網路外掛。
wallet_api_plugin 錢包介面外掛。
wallet_plugin 錢包外掛。
第六部分:build資料夾下的內容
debug_node供開發者執行一些有趣的測試。比如當下一個硬分叉到來之前我生產了足夠多的區塊時會發生什麼。
eosio-abigen用於生成abi檔案。
eosd是eos的核心,它可以根據使用者的配置啟用外掛來執行一個節點。現在可用來產生區塊,封裝介面,本地開發等功能。
eosc其實是提供了命令列操作的eosd。要使用eosc首先要在初始化eosd的時候配置好ip和埠,同時載入eosio::chain_api_plugin。
eos-walletd eos的錢包核心執行緒,載入一些核心控制元件如http介面和PRC介面。
launcher launcher簡化了eosd節點跨區域網或者跨更寬泛的網路的分佈。
以上便是eos程式碼主分支下程式碼的基本骨骼,主要包含有cmake編譯所需配置檔案、智慧合約實現內容、一些文件說明、eos程式碼編譯的依賴庫、eos編譯執行所需外掛和編譯之後生成的內容。正是這些內容組成了eos程式碼的整體,接下來我們將簡單的介紹下eosio.system。