ethereum源码分析 – 主流程

主要入口 cmd/geth/main.go/main() 线程与协程 dlv threads 查看,19个左右线程 dlv goroutines 查看,91个左右协程 主流程 (a) init: app.Before 主要是加载环境, 配置Cache,GC参数, 启动测量等 (b) main: app.Run -> app.Action -> geth() (1)创建Node (2)启动Node (3)Node等待结束 创建Node和启动Node为核心流程。 创建Node: (1)RegisterEthService: Light, Fast, Full模式 les.New(): 轻量级 eth.New(): db,blockchain,network,mine,rpc等创建或打开 (2)RegisterDashboardService 用来监视状态 (3)RegisterShhService Whisper, 用于DApps之间通信 (4)RegisterGraphQLService 用于explore (5)RegisterEthStatsService 用于状态统计 其中(2)-(5)根据配置可选。 启动Node: (1)启动创建Node时注册的服务 (2)创建RPC client (3)钱包及钱包事件 (4)启动挖矿 (c) app.After 关闭程序