mirror of
https://github.com/status-im/nimbus-eth2.git
synced 2025-01-10 06:16:25 +00:00
4f7a8cf79d
* register vc duties with subnet tracker * fix activation logging during startup * cache slot signature to avoid duplicate signature work * schedule aggregation duties one slot at a time to avoid CPU spike at each epoch * lower aggregation subnet pre-subscription time to 4 slots (lowers bandwidth and CPU usage) * update stability subnets in ENR on startup * log gossip state * perform gossip subscriptions just before the next slot starts * document stuff * add random include * don't overwrite subscription state when not subscribed * log target gossip state * updating gossip status once is enough * add test * remove syncQueueLen - this one is not updated at the end of the sync and may cause gossip to disconnect itself completely - use a simple head distance instead * fix gossip disconnection - if in hysteresis, node.gossipState will be set to disabled even though we don't disable topic subscriptions * fix extra duty registration call
89 lines
2.7 KiB
Nim
89 lines
2.7 KiB
Nim
# beacon_chain
|
|
# Copyright (c) 2018-2021 Status Research & Development GmbH
|
|
# Licensed and distributed under either of
|
|
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
|
|
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
# Common routines for a BeaconNode and a BeaconValidator node
|
|
|
|
import
|
|
std/osproc,
|
|
|
|
# Nimble packages
|
|
chronos, json_rpc/servers/httpserver, presto,
|
|
taskpools,
|
|
|
|
# Local modules
|
|
"."/[beacon_clock, beacon_chain_db, beacon_node_types, conf],
|
|
./gossip_processing/[eth2_processor, block_processor, consensus_manager],
|
|
./networking/eth2_network,
|
|
./eth1/eth1_monitor,
|
|
./consensus_object_pools/[blockchain_dag, block_quarantine, attestation_pool],
|
|
./spec/datatypes/base,
|
|
./sync/[sync_manager, request_manager],
|
|
./validators/action_tracker
|
|
|
|
export
|
|
osproc, chronos, httpserver, presto, action_tracker, beacon_clock,
|
|
beacon_chain_db, conf, attestation_pool, eth2_network, beacon_node_types,
|
|
eth1_monitor, request_manager, sync_manager, eth2_processor, blockchain_dag,
|
|
block_quarantine, base
|
|
|
|
type
|
|
RpcServer* = RpcHttpServer
|
|
TaskPoolPtr* = TaskPool
|
|
|
|
GossipState* = enum
|
|
Disconnected
|
|
ConnectedToPhase0
|
|
InTransitionToAltair
|
|
ConnectedToAltair
|
|
|
|
BeaconNode* = ref object
|
|
nickname*: string
|
|
graffitiBytes*: GraffitiBytes
|
|
network*: Eth2Node
|
|
netKeys*: NetKeyPair
|
|
db*: BeaconChainDB
|
|
config*: BeaconNodeConf
|
|
attachedValidators*: ref ValidatorPool
|
|
dag*: ChainDAGRef
|
|
quarantine*: QuarantineRef
|
|
attestationPool*: ref AttestationPool
|
|
syncCommitteeMsgPool*: ref SyncCommitteeMsgPool
|
|
exitPool*: ref ExitPool
|
|
eth1Monitor*: Eth1Monitor
|
|
rpcServer*: RpcServer
|
|
restServer*: RestServerRef
|
|
eventBus*: AsyncEventBus
|
|
vcProcess*: Process
|
|
requestManager*: RequestManager
|
|
syncManager*: SyncManager[Peer, PeerID]
|
|
genesisSnapshotContent*: string
|
|
actionTracker*: ActionTracker
|
|
processor*: ref Eth2Processor
|
|
blockProcessor*: ref BlockProcessor
|
|
consensusManager*: ref ConsensusManager
|
|
attachedValidatorBalanceTotal*: uint64
|
|
gossipState*: GossipState
|
|
beaconClock*: BeaconClock
|
|
taskpool*: TaskPoolPtr
|
|
onAttestationSent*: OnAttestationCallback
|
|
restKeysCache*: Table[ValidatorPubKey, ValidatorIndex]
|
|
|
|
const
|
|
MaxEmptySlotCount* = uint64(10*60) div SECONDS_PER_SLOT
|
|
|
|
# TODO stew/sequtils2
|
|
template findIt*(s: openArray, predicate: untyped): int =
|
|
var res = -1
|
|
for i, it {.inject.} in s:
|
|
if predicate:
|
|
res = i
|
|
break
|
|
res
|
|
|
|
proc currentSlot*(node: BeaconNode): Slot =
|
|
node.beaconClock.now.slotOrZero
|