EOS原始碼分析(7)目錄結構

尹成發表於2018-05-13
# EOS 原始碼分析

區塊鏈的概念首次在2008年末由中本聰(Satoshi Nakamoto)在比特幣論文《Bitcoin: A Peer-to-Peer Eletronic Cash Sytem》中提出,論文中區塊鏈技術是構建比特幣資料結構與交易資訊加密傳輸的基礎技術,該技術實現了比特幣的挖礦與交易。

隨著電子貨幣的概念被更多的人所接受,其背後的區塊鏈技術也進一步被更多的技術人員和商業人員充分發掘,他們認為區塊鏈技術在很多領域中都將有廣泛的應用,這種去中心化的可信網路將重構現有的商業邏輯。

但是完整的開發和部署一套去中心化的區塊鏈網路並不是一件容易的事情,這需要投入巨大的研發精力和經費。於是有很多團隊開始嘗試開發一套底層區塊鏈系統,從而能夠方便更多的應用開發者在其基礎上構建分散式應用。大家比較熟悉的以太坊正是這樣一套區塊鏈公鏈系統。但這些系統也有自身的問題,例如效能太低,確認延遲太長,需要使用者付費等。

為了能夠解決這些問題,Block.One 公司啟動了EOS專案,這是一套基於區塊鏈底層的公鏈系統,簡單的說就是一套去中心化的作業系統,當EOS完成系統目標之後,任何團隊都可以在EOS 上以比較快的速度開發出所需要的Dapp(基於區塊鏈的分散式應用),這些應用可以讓普通人無需任何手續費就可以方便的使用,而EOS的高效能(100w+tps,可以在一秒之內進行100W次打包記賬)也可以承載數量眾多的Dapp應用,相信今後在此係統上將會誕生很多獨角獸級別的分散式應用。

為了能夠在此係統上建構高效的分散式應用,對於EOS系統的深入理解和分析必不可少,而原始碼的閱讀是深入理解EOS系統最有效的方式,本書就是從原始碼入手來分析EOS背後的概念和機制,從而讓大家對於區塊鏈技術有一個更加深入的瞭解。書中主要會涉及以下內容:

1. 對白皮書的解讀。EOS白皮書有中文版,但很多地方的翻譯非常晦澀,完全不通順,我根據自己對專案的理解進行了重新解讀
2. EOS 中涉及到的一些區塊鏈概念,在文中也給出了詳細介紹
3. 對於某些概念的現實意義,給出了自己的理解。從原始碼級別理解專案固然重要,但更重要的是對區塊鏈本身的認知升級,不斷的探索這些概念在現實世界中的使用場景,這才能更大程度的推進區塊鏈的發展。
4. 原始碼閱讀;原始碼之下,了無密碼。做技術的人往往更喜歡從原始碼級瞭解一個專案,這使得很多概念能夠對應到底層的演算法,對於理解這些概念將會很有幫助。理解了原始碼層,才能夠說真正理解了一個專案,你不僅知道他能幹什麼,更能知道他為什麼能夠這麼用,並且能夠深刻的理解它下一步的演進方向。


目前EOS還處於開發階段,原始碼還在不斷的迭代中,但整體流程和框架已經基本成型,目前已經發布到Dawn3.0 版本了,

 eos主目錄下有以下資料夾:



        我們挨個來看一下:

  1. 第一部分:CMakeModules主要是cmake編譯所需要使用的一些配置資訊。

    cotire是加快編譯速度的cmake檔案。

    doxygen可以將程式碼中的一些註釋生成相關文件。

    gperftools包含了效能分析相關的配置。

    findWasm檢測當前機器是否可以生成wasm32

    insatall提供安裝的相關配置資訊。

    上文我們們說過eos的編譯需要wasm的支援,因此wasm.cmake檔案提供wasm相關的配置資訊。

  2. 第二部分:Contracts中包含有智慧合約的相關內容



    asserter中定義了assert的相關結構體,並完成對智慧合約事件的分發。

    bancor即班科,定義了bancor結構體,包含有凱恩斯國際貨幣單位的相關內容,主要是貨幣單位之間的轉換。

    currency定義了currency結構體,同樣為貨幣的相關內容。

    dice中實現了一個擲骰子的小遊戲。

    eosio.system包含有eosio系統的相關內容,這個接下來會做相關專題介紹。

    eosiolib中包含有eos執行所依賴的庫的標頭檔案。

    exchange中包含有交易相關結構體的定義。

    identity中包含有身份的相關定義,在eos中身份和賬戶是兩個相互分離的概念,身份和賬戶的對映需要服從一定的共識。

    infinite從字面意義上理解是無限,程式碼中實現了一個不停的去列印的函式。

    libc++中主要是c++所以來的庫。

    musllinux作業系統下的一個標準庫。

    noop實現一個空的智慧合約。

    proxy實現代理的相關內容。

    simpleDB 包含了資料庫相關內容。

    skeleton看不出有什麼內容。

    social主要是方便使用者建立屬於自己的貨幣同時可以讓其進行投票等舉動(馬上要開始的21節點競爭就是通過投票來進行的)。

    storage方便使用者去修改賬戶的名字。

  3. 第三部分:一些文件說明



    docker方便使用者在Docker上執行eos。不多做介紹。

    docs中是一些文件。

    externals裡面是一些依賴的外部檔案。

  4. 第四部分:Librarieseos依賴的一些庫,其中有:




    abi_generator用於生成abi檔案。

    appbase為一系列的外掛編譯提供了一個框架,他可以確保外掛正常配置、初始化、啟動、關閉這一個流程。

    chain這裡麵包含有eos作為區塊鏈的核心內容。

    chainbase是為了滿足區塊鏈應用設計的一個資料庫,但是也使用於任意需要一個魯棒性較高的交易資料庫。

    egenesis主要是測試P2P網路用的。

    utilitiles主要是一些通用的標準函式。

  5. 第五部分: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 錢包外掛。

  6. 第六部分:build資料夾下的內容


    debug_node供開發者執行一些有趣的測試。比如當下一個硬分叉到來之前我生產了足夠多的區塊時會發生什麼。

    eosio-abigen用於生成abi檔案。

    eosdeos的核心,它可以根據使用者的配置啟用外掛來執行一個節點。現在可用來產生區塊,封裝介面,本地開發等功能。

    eosc其實是提供了命令列操作的eosd。要使用eosc首先要在初始化eosd的時候配置好ip和埠,同時載入eosio::chain_api_plugin

    eos-walletd eos的錢包核心執行緒,載入一些核心控制元件如http介面和PRC介面。

    launcher launcher簡化了eosd節點跨區域網或者跨更寬泛的網路的分佈。






網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN





網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN

相關文章