一、从简单的依赖少的模块开始,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回滚。
(未完待续)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。