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
关闭程序

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.