ethereum - build unstoppable applications
簡介
以太坊作為目前區(qū)塊鏈技術2.0的代表作品峭弟,無論是它獨創(chuàng)的智能合約以及它本身交易的速度都優(yōu)于bitcoin,通過看它的白皮書以及一些文章也略微了解了它的一些原理遭顶,但是總體還是對它的實現(xiàn)半知半解驶睦。
因此就想分析下它的實現(xiàn)源碼锻梳,再結合白皮書也許可以深入的理解它的實現(xiàn)俏橘。
準備工作
源碼下載
git clone https://github.com/ethereum/ethereumj.git
導入到intellij
- File -> New -> Project from existing sources…
- Select ethereumj/build.gradle
- Dialog “Import Project from gradle”: press “OK”
-
結構介紹
本項目主要使用spring來管理對象,使用netty完成通信井联,使用leveldb負責存儲卜壕,整體的包的結構如下所示:
image.png
每個包的作用大致為:
- cli : 負責啟動參數(shù)的處理
- config: 負責配置文件注入以及一些bean的注入
- 公共部分:包含系統(tǒng)配置變量(SystemProperties)、配置初始化(Initializer 完成配置的初始化)烙常、倉庫轴捎、數(shù)據(jù)源、驗證器等的注入
- blockchain:包含的是一些以太坊發(fā)布時各個版本的不同的特性,這些特性包括不限于難度值計算以及其他一些EIP所描述的bug或者features
- 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是程序入口
以上為個人初步理解,如有不當之處望指正