ethereumj代码走读

查看代码目录,看项目包含哪些组件
查看构建工具,包括build.gradle、travis.yml

一、从简单的依赖少的模块开始,json模块。

依赖fastjson包,包含两个类, JSONHelper 和 EtherObjectMapper。
JSONHelper用于dump Block。EtherObjectMapper对fastjson的ObjectMapper序列化分隔符做了调整。

二、再看facade模块,这个模块是这个项目的对外入口。
先看Blockchain,这是个接口,主要是对Blockchain store的查询接口,包括根据块高块hash查询块的函数、查询最新块,也有直接查询blockStore实例对象。注解里有函数说明及参数返回值。

Ethereum也是个接口,定义了节点管理方法,包括启动节点发现、连接节点等,定义了处理交易的方法,包括创建交易、发送交易、执行只读交易,提供获得Repository实例对象的接口,定义查询节点状态,包括交易池中的交易、miner信息、gas价格、admininfo等。

类EthereumFactory,用来创建并启动一个Ethereum服务,其中使用AnnotationConfigApplicationContext从配置类中读取配置。

类EthereumImpl包含Ethereum所有组件和服务。组件包括 WorldManager、AdminInfo、ChannelManager、ApplicationContext、BlockLoader、ProgramInvokeFactory、Whisper、PendingState、SyncManager、CommonConfig等,组件还包括监听器CompositeEthereumListener、GasPriceTracker,每一个组件都对应一个核心功能,可以逐一分解研究。

  • 节点发现、链接,通过WorldManager组件完成。块信息也通过WorldManager组件获得。同步信息从SyncManager获得。
  • 交易创建后写入PendingState,写入以前先创建一个future,放入channelManager,在任务完成时回调。执行流程细节待深入查看。
  • replayBlock,块重放。执行流程是先根据hash获取上一个块的Repository快照,(这个功能作为存储组件的一个特殊功能说明),根据Repository构造一个TransactionExecutor执行器,模拟执行块中的每笔交易,执行完所有交易,Repository回滚。

(未完待续)

你可能感兴趣的:(以太坊)