以太坊源碼分析(一 簡介)

ethereum - build unstoppable applications

簡介

以太坊作為目前區(qū)塊鏈技術2.0的代表作品峭弟,無論是它獨創(chuàng)的智能合約以及它本身交易的速度都優(yōu)于bitcoin,通過看它的白皮書以及一些文章也略微了解了它的一些原理遭顶,但是總體還是對它的實現(xiàn)半知半解驶睦。
因此就想分析下它的實現(xiàn)源碼锻梳,再結合白皮書也許可以深入的理解它的實現(xiàn)俏橘。

準備工作

  1. 源碼下載
    git clone https://github.com/ethereum/ethereumj.git

  2. 導入到intellij

  • File -> New -> Project from existing sources…
  • Select ethereumj/build.gradle
  • Dialog “Import Project from gradle”: press “OK”
  1. 結構介紹
    本項目主要使用spring來管理對象,使用netty完成通信井联,使用leveldb負責存儲卜壕,整體的包的結構如下所示:


    image.png

每個包的作用大致為:

  • cli : 負責啟動參數(shù)的處理
  • config: 負責配置文件注入以及一些bean的注入
    1. 公共部分:包含系統(tǒng)配置變量(SystemProperties)、配置初始化(Initializer 完成配置的初始化)烙常、倉庫轴捎、數(shù)據(jù)源、驗證器等的注入
    2. blockchain:包含的是一些以太坊發(fā)布時各個版本的不同的特性,這些特性包括不限于難度值計算以及其他一些EIP所描述的bug或者features
    3. net:包含的是以太坊支持的不同的網(wǎng)絡配置轮蜕,包含主網(wǎng)或者測試網(wǎng)絡不同的配置信息昨悼,所謂的配置信息就是blockchain配置所描述的一些不同的EIP或者其他的features
  • core: 核心部分,它包含賬戶跃洛、區(qū)塊率触、創(chuàng)世塊、區(qū)塊鏈汇竭、transaction葱蝗、bloom的定義以及區(qū)塊如何驗證、如何加入鏈以及transaction如何使用vm執(zhí)行也就是智能合約的執(zhí)行都在這里完成
  • crypto: 加密工具包含不限于hash算法细燎、ECC算法等
  • datasource: 提供了兩種數(shù)據(jù)源實現(xiàn)內存以及l(fā)eveldb两曼,并使用者兩種數(shù)據(jù)源擴展了不同實現(xiàn),這包含緩存數(shù)據(jù)源玻驻、鏈數(shù)據(jù)源悼凑,依據(jù)于此又封裝出讀寫緩存、異步讀寫緩存以及鏈存儲相關的數(shù)據(jù)源實現(xiàn)璧瞬。
  • db: 定義了如何使用datasource存儲block户辫、transaction,換句話說就是block嗤锉、transaction的存儲數(shù)據(jù)結構
  • facade: 包含了ethereum的實現(xiàn)渔欢,就是將塊存儲、驗證瘟忱、同步奥额、合約執(zhí)行等做的封裝
  • mine是挖礦相關的
  • net 涉及的都是網(wǎng)絡相關的,以太坊節(jié)點發(fā)現(xiàn)塊同步都是建立在rlpx協(xié)議之上访诱,這包含p2p垫挨、shh、eth等触菜,另外server包就是節(jié)點發(fā)現(xiàn)服務啟動入口
  • samples是一些測試例子
  • solidity是合約編譯部分的實現(xiàn)
  • sync 是負責負責塊的同步下載等
  • trie 是以太坊鏈存儲的數(shù)據(jù)結構棒拂,該包主要是實現(xiàn)該數(shù)據(jù)結構也就是MPT
  • utils 工具類,包含rlp編碼等
  • validator 這是一些驗證器玫氢,在驗證block的時候會用到
  • vm 以太坊vm實現(xiàn)
  • start是程序入口

以上為個人初步理解,如有不當之處望指正

注:資料查詢主要位置 wiki eip

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谜诫,一起剝皮案震驚了整個濱河市漾峡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喻旷,老刑警劉巖生逸,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡槽袄,警方通過查閱死者的電腦和手機烙无,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遍尺,“玉大人截酷,你說我怎么就攤上這事∏罚” “怎么了迂苛?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鼓择。 經(jīng)常有香客問我三幻,道長,這世上最難降的妖魔是什么呐能? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任念搬,我火速辦了婚禮,結果婚禮上摆出,老公的妹妹穿的比我還像新娘朗徊。我一直安慰自己,他們只是感情好懊蒸,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布荣倾。 她就那樣靜靜地躺著,像睡著了一般骑丸。 火紅的嫁衣襯著肌膚如雪舌仍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天通危,我揣著相機與錄音铸豁,去河邊找鬼。 笑死菊碟,一個胖子當著我的面吹牛节芥,可吹牛的內容都是我干的。 我是一名探鬼主播逆害,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼头镊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了魄幕?” 一聲冷哼從身側響起相艇,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纯陨,沒想到半個月后坛芽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體留储,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年咙轩,在試婚紗的時候發(fā)現(xiàn)自己被綠了获讳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡活喊,死狀恐怖丐膝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情胧弛,我是刑警寧澤尤误,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站结缚,受9級特大地震影響损晤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜红竭,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一尤勋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茵宪,春花似錦最冰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凰狞,卻和暖如春篇裁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赡若。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工达布, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逾冬。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓黍聂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親身腻。 傳聞我的和親對象是個殘疾皇子产还,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容

  • 以太坊白皮書地址:https://github.com/ethereum/wiki/wiki/White-Pape...
    rectinajh閱讀 17,839評論 0 46
  • 以太坊(Ethereum ):下一代智能合約和去中心化應用平臺 翻譯:巨蟹 、少平 譯者注:中文讀者可以到以太坊愛...
    車圣閱讀 3,761評論 1 7
  • 【中文版】以太坊白皮書 翻譯:少平嘀趟、 Seven當中本聰在 2009 年 1 月啟動比特幣區(qū)塊鏈時雕沉,他同時向世界引...
    __Seven__閱讀 4,244評論 0 10
  • 簡介 不管你們知不知道以太坊(Ethereum blockchain)是什么,但是你們大概都聽說過以太坊去件。最近在新...
    Lilymoana閱讀 3,893評論 1 22
  • 刪除存在的工作表尤溜。如果工作表不存在倔叼,則會返回錯誤。 將工作表放進對象變量宫莱,判斷工作表是否存在(有時候需要判斷工作表...
    葉知行閱讀 597評論 0 1