sequenceDiagram loop events扫描 alt http定时拉取,runScaner scaner ->> process: 定时获取events else websocket订阅,runSubscriber scaner -->> process: 第三方主动推送events end
process ->> process: abi根据事件ID解析具体事件内容 alt 订单事件,procOrderEventLog process ->> repository: 市价单、现价单 par 用户数据 repository ->> db: 订单表,事件表 end else 仓位事件,procPositionEventLog process -->> repository: 开仓、平仓 par 用户数据 repository ->> db: 成交表,事件表 repository ->> db: 成交积分,推荐积分 end else 池子事件,procPoolEventLog process -x repository: 添加、移除流动性 par 用户数据 repository ->> db: 池子订单表,事件表 end end
process ->> repository: 更新已消费区块号 end
loop 合约扫描,pairStatSchedule scaner ->> process: 定时获取池子统计数据 alt 是否零点 process ->> repository: 写入天表daily else process -->> repository: 写入分钟表timely end end
loop tx扫描,chainTxCostSchedule scaner ->> repository: 定时获取tx的gas alt 是否用户下单 repository ->> db: 用户tx_cost累加 end end
loop block扫描,chainBlockSchedule scaner ->> repository: 定时获取区块中失败的tx的gas alt 是否用户下单 repository ->> db: 用户tx_cost_failed累加 end end
loop 统计数据推送,procDailyStat statistics ->> repository: 北京时间8点推送统计数据 alt LP积分汇总 repository ->> db: 用户stacked_points累加 end alt NFT快照 repository ->> db: 用户积分累加 end end
flowchart TD A[cmd/geth/main.go] --> B[解析命令行参数 & 配置] B --> C[创建 Node 实例\nnode.New()] C --> D[注册 Ethereum 服务\nstack.Register(eth)] D --> E[启动节点 stack.Start()]
subgraph Ethereum 服务启动 E --> F[eth.New() - 创建以太坊服务] F --> G[初始化区块链 core/blockchain.go] F --> H[初始化交易池 core/tx_pool.go] F --> I[初始化共识 consensus/*] F --> J[初始化 P2P 协议 eth/handler.go] end
subgraph P2P 网络 J --> K[p2p/server.go - 启动 P2P Server] K --> L[节点发现\nKademlia DHT] K --> M[握手 & 同步协议] end
subgraph 区块链同步 M --> N[区块同步器 eth/sync.go] N --> O[区块验证\ncore/block_validator.go] O --> P[写入数据库 rawdb/*] end
subgraph RPC 服务 E --> Q[rpc/server.go - 启动 RPC] Q --> R[注册 API\neth/api.go] R --> S[对外提供 JSON-RPC/HTTP/WebSocket] end