Geth 源码系列:Geth 整体架构

频道:区块链行情 日期: 浏览:74

Geth 源码系列:Geth 整体架构

源码版本:https://github.com/ethereum/go-ethereum/commit/c8a9a9c0917dd57d077a79044e65dbbdd421458b

以太坊在进行 The Merge 升级之前,以太坊只有一个客户端,这个客户端及负责交易的执行,也会负责区块链的共识,保证区块链以一定的顺序产生新的区块。在 The Merge 升级之后,以太坊客户端分为了执行层和共识层,执行层负责交易的执行、状态和数据的维护,共识层则负责共识功能的实现,执行层和共识层通过 API 来通信。执行层和共识层有各自的规范,客户端可以使用不同的语言来实现,但是要符合对应的规范,其中 Geth 就是执行层客户端的一种实现。当前主流的执行层和共识层客户端有如下实现:

Nethermind:由 Nethermind 团队开发和维护,使用 C# 语言开发,早期获以太坊基金会和 Gitcoin 社区资助

  • Reth:由 Paradigm 主导开发,开发语言是 Rust,强调模块化和高性能,目前已经趋近成熟,可以在生产环境使用
  • Lighthouse:由 Sigma Prime 团队维护,使用 Rust 语言开发,主打高性能和企业级安全,适用于高负载场景

  • 2. 执行层简介

    执行层负责执行交易以及维护交易执行之后的状态,共识层负责选择哪些交易来执行。EVM 则是这个状态机中的状态转换函数,函数的输入会来源于多个地方,有可能来源于共识层提供的最新区块信息,也有可能来源于 p2p 网络下载的区块。

    存储:负责 state 以及区块等数据的存储

  • RPC 服务:提供访问节点的能力,比如用户向节点发送交易,共识层和执行层之间的交互
  • 下图展示了执行层的关键流程,以及每个部分的职能:
  • 如果是已经同步到最新状态的节点,那么就会持续通过 Engine API 从共识层获取到当前最新产出的区块,并验证区块,然后通过 EVM 执行区块中所有的交易来更新状态数据库,并将区块写入本地链

  • beacon:处理与以太坊信标链(Beacon Chain)的交互逻辑,支持权益证明(PoS)共识的合并(The Merge)后功能
  • common:通用工具类,如字节处理、地址格式转换、数学函数
  • core:区块链核心逻辑,处理区块/交易的生命周期管理、状态机、Gas计算等
  • eth:以太坊网络协议的完整实现,包括节点服务、区块同步(如快速同步、归档模式)、交易广播等
  • ethstats:收集并上报节点运行状态到统计服务,用于监控网络健康状态
  • internal:内部工具或限制外部访问的代码
  • miner:挖矿相关逻辑,生成新区块并打包交易(PoW 场景下)
  • params:定义以太坊网络参数(主网、测试网、创世区块配置)
  • signer:交易签名管理(硬件钱包集成)
  • 4. 执行层模块划分

    在 API 的下一层就核心功能的实现,包括交易池、交易打包、产出区块、区块和状态的同步等等。这些功能再往下就需要依赖更底层的能力,比如交易池、区块和状态的同步需要依赖 p2p 网络的能力,区块的产生以及从其他节点同步过来的区块需要被验证才能写入到本地的数据库,这些就需要依赖 EVM 和数据存储的能力。

    type Node struct {
    eventmux      *event.TypeMux
    config        *Config
    // 账户管理器,负责管理钱包和账户
    accman        *accounts.Manager
    log           log.Logger
    keyDir        string        
    keyDirTemp    bool          
    dirLock       *flock.Flock  
    stop          chan struct{}
    // p2p 网络实例 
    server        *p2p.Server   
    startStopLock sync.Mutex
    // 跟踪节点生命周期状态(初始化、运行中、已关闭)    
    state         int           
     
    lock          sync.Mutex
    // 所有注册的后端、服务和辅助服务
    lifecycles    []Lifecycle
    // 当前提供的 API 列表 
    rpcAPIs       []rpc.API
    // 为 RPC 提供的不同访问方式   
    http          *httpServer 
    ws            *httpServer 
    httpAuth      *httpServer 
    wsAuth        *httpServer 
    ipc           *ipcServer  
    inprocHandler *rpc.Server 
    databases map[*closeTrackingDB]struct{} 
    }

    计算:EVM

  • devp2p

    在 p2p/enode/node.go 中的 Node 结构代表了 p2p 网络中一个节点,其中 enr.Record 结构中存储了节点详细信息的键值对,包括身份信息(节点身份所使用的签名算法、公钥)、网络信息(IP 地址,端口号)、支持的协议信息(比如支持 eth/68 和 snap 协议)和其他的自定义信息,这些信息通过 RLP 的方式编码,具体的规范在 eip-778 中定义:

  • 本文仅整理公开市场数据,不构成任何投资或操作建议。根据中国法规,请用户遵守相关法律法规。