95 lines
2.3 KiB
Nim
95 lines
2.3 KiB
Nim
# Nimbus
|
|
# Copyright (c) 2024 Status Research & Development GmbH
|
|
# Licensed under either of
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
# at your option.
|
|
# This file may not be copied, modified, or distributed except according to
|
|
# those terms.
|
|
|
|
import
|
|
chronos,
|
|
eth/p2p,
|
|
metrics/chronos_httpserver,
|
|
./rpc/rpc_server,
|
|
./core/sealer,
|
|
./core/chain,
|
|
./core/tx_pool,
|
|
./sync/peers,
|
|
./sync/beacon,
|
|
./sync/legacy,
|
|
# ./sync/snap, # -- todo
|
|
./sync/stateless,
|
|
./sync/full,
|
|
./beacon/beacon_engine,
|
|
./common,
|
|
./config
|
|
|
|
export
|
|
chronos,
|
|
p2p,
|
|
chronos_httpserver,
|
|
rpc_server,
|
|
sealer,
|
|
chain,
|
|
tx_pool,
|
|
peers,
|
|
beacon,
|
|
legacy,
|
|
#snap,
|
|
stateless,
|
|
full,
|
|
beacon_engine,
|
|
common,
|
|
config
|
|
|
|
type
|
|
NimbusState* = enum
|
|
Starting, Running, Stopping
|
|
|
|
NimbusNode* = ref object
|
|
httpServer*: NimbusHttpServerRef
|
|
engineApiServer*: NimbusHttpServerRef
|
|
ethNode*: EthereumNode
|
|
state*: NimbusState
|
|
sealingEngine*: SealingEngineRef
|
|
ctx*: EthContext
|
|
chainRef*: ChainRef
|
|
txPool*: TxPoolRef
|
|
networkLoop*: Future[void]
|
|
peerManager*: PeerManagerRef
|
|
legaSyncRef*: LegacySyncRef
|
|
# snapSyncRef*: SnapSyncRef # -- todo
|
|
fullSyncRef*: FullSyncRef
|
|
beaconSyncRef*: BeaconSyncRef
|
|
statelessSyncRef*: StatelessSyncRef
|
|
beaconEngine*: BeaconEngineRef
|
|
metricsServer*: MetricsHttpServerRef
|
|
|
|
{.push gcsafe, raises: [].}
|
|
|
|
proc stop*(nimbus: NimbusNode, conf: NimbusConf) {.async, gcsafe.} =
|
|
trace "Graceful shutdown"
|
|
if nimbus.httpServer.isNil.not:
|
|
await nimbus.httpServer.stop()
|
|
if nimbus.engineApiServer.isNil.not:
|
|
await nimbus.engineApiServer.stop()
|
|
if conf.engineSigner != ZERO_ADDRESS and nimbus.sealingEngine.isNil.not:
|
|
await nimbus.sealingEngine.stop()
|
|
if conf.maxPeers > 0:
|
|
await nimbus.networkLoop.cancelAndWait()
|
|
if nimbus.peerManager.isNil.not:
|
|
await nimbus.peerManager.stop()
|
|
if nimbus.statelessSyncRef.isNil.not:
|
|
nimbus.statelessSyncRef.stop()
|
|
#if nimbus.snapSyncRef.isNil.not:
|
|
# nimbus.snapSyncRef.stop()
|
|
if nimbus.fullSyncRef.isNil.not:
|
|
nimbus.fullSyncRef.stop()
|
|
if nimbus.beaconSyncRef.isNil.not:
|
|
nimbus.beaconSyncRef.stop()
|
|
if nimbus.metricsServer.isNil.not:
|
|
await nimbus.metricsServer.stop()
|
|
|
|
{.pop.}
|