当前位置: 首页 > news >正文

go ethreum eth之Ethereum

结构

«interface»
Lifecycle
Node
Ethereum
AccountManager
p2p.Server

LifeCycle:组件生命周期接口,其定义为

type Lifecycle interface {// Start is called after all services have been constructed and the networking// layer was also initialized to spawn any goroutines required by the service.Start() error// Stop terminates all goroutines belonging to the service, blocking until they// are all terminated.Stop() error
}

Ethereum

结构定义为

type Ethereum struct {// core protocol objectsconfig         *ethconfig.ConfigtxPool         *txpool.TxPoolblobTxPool     *blobpool.BlobPoollocalTxTracker *locals.TxTrackerblockchain     *core.BlockChainhandler *handlerdiscmix *enode.FairMixdropper *dropper// DB interfaceschainDb ethdb.Database // Block chain databaseeventMux       *event.TypeMuxengine         consensus.EngineaccountManager *accounts.ManagerfilterMaps      *filtermaps.FilterMapscloseFilterMaps chan chan struct{}APIBackend *EthAPIBackendminer    *miner.MinergasPrice *big.IntnetworkID     uint64netRPCService *ethapi.NetAPIp2pServer *p2p.Serverlock sync.RWMutex // Protects the variadic fields (e.g. gas price and etherbase)shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully
}

关键成员有

  • blockchain:类型为*core.BlockChain
  • txPool :类型为 *txpool.TxPool
  • blobTxPool:类型为*blobpool.BlobPool
  • engine:类型为consensus.Engine,共识引擎
  • miner:类型为 *miner.Miner
  • netRPCService:类型为*ethapi.NetAPI,rpc服务
  • APIBackend:类型为 *EthAPIBackend,处理rpc请求

其实现了LifeCycle接口,同时与rpc.API和p2p.Protocol相关的接口有

func (s *Ethereum) APIs() []rpc.API
func (s *Ethereum) Protocols() []p2p.Protocol

在创建Ethereum时向Node注册eth服务时,会将rpc.API和p2p.Protocol以及向自己注册到node

stack.RegisterAPIs(eth.APIs())
stack.RegisterProtocols(eth.Protocols())
stack.RegisterLifecycle(eth)

在node.openEndpoint时会开启服务,启动p2p server
ethereum依赖EthAPIBackend

Ethereum
EthAPIBackend
ethapi.Backend

EthAPIBackend:实现了ethapi.Backend接口
在创建Ethereum时会注册rpc.API,主要包含有

  • eth
    • NewEthereumAPI(apiBackend)
    • NewBlockChainAPI(apiBackend)
    • NewTransactionAPI(apiBackend, nonceLock)
    • NewEthereumAccountAPI(apiBackend.AccountManager())
    • downloader.NewDownloaderAPI(s.handler.downloader, s.blockchain, s.eventMux)
    • filters.NewFilterAPI(filterSystem)
  • txpool
    • NewTxPoolAPI(apiBackend)
  • debug
    • NewDebugAPI(apiBackend)
    • NewDebugAPI(s)
    • NewAPI(backend)
    • NewAPI(s):s为Syncer
  • miner
    • NewMinerAPI(s)
  • admin
    • NewAdminAPI(s)
  • net
    • s.netRPCService
  • dev
    • newSimulatedBeaconAPI(sim)
  • engine
    • NewConsensusAPI(backend)

代码为

eth.netRPCService = ethapi.NewNetAPI(eth.p2pServer, networkID)// Register the backend on the node
stack.RegisterAPIs(eth.APIs())func (s *Ethereum) APIs() []rpc.API {apis := ethapi.GetAPIs(s.APIBackend)// Append all the local APIs and returnreturn append(apis, []rpc.API{{Namespace: "miner",Service:   NewMinerAPI(s),}, {Namespace: "eth",Service:   downloader.NewDownloaderAPI(s.handler.downloader, s.blockchain, s.eventMux),}, {Namespace: "admin",Service:   NewAdminAPI(s),}, {Namespace: "debug",Service:   NewDebugAPI(s),}, {Namespace: "net",Service:   s.netRPCService,},}...)
}func GetAPIs(apiBackend Backend) []rpc.API {nonceLock := new(AddrLocker)return []rpc.API{{Namespace: "eth",Service:   NewEthereumAPI(apiBackend),}, {Namespace: "eth",Service:   NewBlockChainAPI(apiBackend),}, {Namespace: "eth",Service:   NewTransactionAPI(apiBackend, nonceLock),}, {Namespace: "txpool",Service:   NewTxPoolAPI(apiBackend),}, {Namespace: "debug",Service:   NewDebugAPI(apiBackend),}, {Namespace: "eth",Service:   NewEthereumAccountAPI(apiBackend.AccountManager()),},}
}stack.RegisterAPIs(tracers.APIs(backend.APIBackend))
func APIs(backend Backend) []rpc.API {// Append all the local APIs and returnreturn []rpc.API{{Namespace: "debug",Service:   NewAPI(backend),},}
}filterSystem := utils.RegisterFilterAPI(stack, backend, &cfg.Eth)
func RegisterFilterAPI(stack *node.Node, backend ethapi.Backend, ethcfg *ethconfig.Config) *filters.FilterSystem {filterSystem := filters.NewFilterSystem(backend, filters.Config{LogCacheSize: ethcfg.FilterLogCacheSize,})stack.RegisterAPIs([]rpc.API{{Namespace: "eth",Service:   filters.NewFilterAPI(filterSystem),}})return filterSystem
}

在创建全节点时,会注册一些api,lifecycle以及handler,api的上面已经说过,还有api, lifecycle和handler
api的有

  • RegisterSyncOverrideService
  • RegisterSimulatedBeaconAPIs
  • catalyst.Register

handler的有

  • RegisterGraphQLService

lifecycle有

  • RegisterEthStatsService
  • RegisterSyncOverrideService
  • stack.RegisterLifecycle(simBeacon):其中simBeacon是通过catalyst.NewSimulatedBeacon创建
  • stack.RegisterLifecycle(blsyncer):其中blsyncer是通过blsync.NewClient创建
func RegisterGraphQLService(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cfg *node.Config) {err := graphql.New(stack, backend, filterSystem, cfg.GraphQLCors, cfg.GraphQLVirtualHosts)if err != nil {Fatalf("Failed to register the GraphQL service: %v", err)}
}func New(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cors, vhosts []string) error {_, err := newHandler(stack, backend, filterSystem, cors, vhosts)return err
}func newHandler(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cors, vhosts []string) (*handler, error) {q := Resolver{backend, filterSystem}s, err := graphql.ParseSchema(schema, &q, graphql.MaxDepth(maxQueryDepth))if err != nil {return nil, err}h := handler{Schema: s}handler := node.NewHTTPHandlerStack(h, cors, vhosts, nil)stack.RegisterHandler("GraphQL UI", "/graphql/ui", GraphiQL{})stack.RegisterHandler("GraphQL UI", "/graphql/ui/", GraphiQL{})stack.RegisterHandler("GraphQL", "/graphql", handler)stack.RegisterHandler("GraphQL", "/graphql/", handler)return &h, nil
}func RegisterEthStatsService(stack *node.Node, backend *eth.EthAPIBackend, url string) {if err := ethstats.New(stack, backend, backend.Engine(), url); err != nil {Fatalf("Failed to register the Ethereum Stats service: %v", err)}
}func New(node *node.Node, backend backend, engine consensus.Engine, url string) error {parts, err := parseEthstatsURL(url)if err != nil {return err}ethstats := &Service{backend: backend,engine:  engine,server:  node.Server(),node:    parts[0],pass:    parts[1],host:    parts[2],pongCh:  make(chan struct{}),histCh:  make(chan []uint64, 1),}node.RegisterLifecycle(ethstats)return nil
}func RegisterSyncOverrideService(stack *node.Node, eth *eth.Ethereum, target common.Hash, exitWhenSynced bool) {if target != (common.Hash{}) {log.Info("Registered sync override service", "hash", target, "exitWhenSynced", exitWhenSynced)} else {log.Info("Registered sync override service")}syncer.Register(stack, eth, target, exitWhenSynced)
}func Register(stack *node.Node, backend *eth.Ethereum, target common.Hash, exitWhenSynced bool) (*Syncer, error) {s := &Syncer{stack:          stack,backend:        backend,target:         target,request:        make(chan *syncReq),closed:         make(chan struct{}),exitWhenSynced: exitWhenSynced,}stack.RegisterAPIs(s.APIs())stack.RegisterLifecycle(s)return s, nil
}
func (s *Syncer) APIs() []rpc.API {return []rpc.API{{Namespace: "debug",Service:   NewAPI(s),},}
}catalyst.RegisterSimulatedBeaconAPIs(stack, simBeacon)
stack.RegisterLifecycle(simBeacon)func RegisterSimulatedBeaconAPIs(stack *node.Node, sim *SimulatedBeacon) {api := newSimulatedBeaconAPI(sim)stack.RegisterAPIs([]rpc.API{{Namespace: "dev",Service:   api,Version:   "1.0",},})
}blsyncer := blsync.NewClient(utils.MakeBeaconLightConfig(ctx))
blsyncer.SetEngineRPC(rpc.DialInProc(srv))
stack.RegisterLifecycle(blsyncer)func Register(stack *node.Node, backend *eth.Ethereum) error {log.Warn("Engine API enabled", "protocol", "eth")stack.RegisterAPIs([]rpc.API{{Namespace:     "engine",Service:       NewConsensusAPI(backend),Authenticated: true,},})return nil
}
http://www.dtcms.com/a/557825.html

相关文章:

  • 襄阳做网站多少钱休闲旅游网站建设
  • Day04 函数
  • 基于 GEE MODIS 数据的区域干旱监测——从植被状况指数(VCI)计算到干旱分级与空间分布可视化
  • 论坛的网站制作北京企业网站建设哪家服务好
  • map和set介绍
  • 做网站总费用广告公司业务员小刘与客户马经理
  • C++ 面向对象三大特性之一——继承
  • seo 网站描述长度统计wordpress访问量
  • 校园网站建设的系统分析东莞网站的建设
  • 网站上传完成后要怎么做wordpress手机中文版
  • C#数据级联操作的法宝DataRelation
  • 摄影网站在线建设wordpress 文章编辑框插件
  • 一般的网站是由什么语言做的wordpress挂黑页
  • Springboot微信小程序在线考试系统w47h61gy(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 3.1.1.Java基础知识
  • 2025年江西省职业院校技能大赛高职组“区块链技术应用”任务书(5卷)
  • docker安装mongo
  • Langgraph研究
  • 企业网站都没的百度快照咋办单位网站建设与管理
  • 【分布式缓存】Redis持久化和集群部署攻略
  • 下载 | Win11 24H2 正式版更新!(ISO映像、多合一版本、26100.7019、Windows 11)
  • 第五章Langchain4j之基于内存和redis实现聊天持久化
  • 微信如何建立网站如何制作营销网站模板下载
  • 做网站图片多少钱推广普通话手抄报一等奖
  • android面试题2
  • AI学习日记——Transformer的架构:编码器与解码器
  • 如何推广自己网站的关键词网络营销方案例文
  • 网站文章收录慢微信小程序制作费用
  • Nginx第三方模块集成:丰富功能实战
  • ms-swift框架微调qwen3-0.6b模型