diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 930d6c42ae..bf77aa36f5 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -2412,10 +2412,10 @@ func EnableNodeTrack(ctx *cli.Context, cfg *ethconfig.Config, stack *node.Node) metrics.GetOrRegisterLabel("node-stats", nil).Mark(map[string]interface{}{ "NodeType": parseNodeType(), "ENR": nodeInfo.ENR, - "Mining": ctx.Bool(MiningEnabledFlag.Name), "Etherbase": parseEtherbase(cfg), "MiningFeatures": parseMiningFeatures(ctx, cfg), "DBFeatures": parseDBFeatures(cfg, stack), + "NetFeatures": parseNetFeatures(stack), }) } } @@ -2468,6 +2468,17 @@ func parseMiningFeatures(ctx *cli.Context, cfg *ethconfig.Config) string { if cfg.Miner.VoteEnable { features = append(features, "FFVoting") } + if len(features) == 0 { + features = append(features, "Mining") + } + return strings.Join(features, "|") +} + +func parseNetFeatures(stack *node.Node) string { + var features []string + if stack.Config().EnableEVNFeatures { + features = append(features, "EVN") + } return strings.Join(features, "|") } diff --git a/eth/handler.go b/eth/handler.go index b5ae618d58..936a8f1d1d 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -382,6 +382,10 @@ func newHandler(config *handlerConfig) (*handler, error) { // protoTracker tracks the number of active protocol handlers. func (h *handler) protoTracker() { defer h.wg.Done() + + if h.enableEVNFeatures { + h.peers.enableEVNFeatures(h.queryValidatorNodeIDsMap(), h.evnNodeIdsWhitelistMap) + } updateTicker := time.NewTicker(10 * time.Second) defer updateTicker.Stop() var active int diff --git a/p2p/metrics.go b/p2p/metrics.go index 493acbf035..bc9bfdb9b5 100644 --- a/p2p/metrics.go +++ b/p2p/metrics.go @@ -69,7 +69,8 @@ var ( serveEncHandshakeError = metrics.NewRegisteredMeter("p2p/serves/error/rlpx/enc", nil) serveProtoHandshakeError = metrics.NewRegisteredMeter("p2p/serves/error/rlpx/proto", nil) - peerLatencyStat = metrics.NewRegisteredTimer("p2p/peers/latency", nil) + normalPeerLatencyStat = metrics.NewRegisteredTimer("p2p/peers/normal/latency", nil) + evnPeerLatencyStat = metrics.NewRegisteredTimer("p2p/peers/evn/latency", nil) ) // markDialError matches errors that occur while setting up a dial connection diff --git a/p2p/peer.go b/p2p/peer.go index 3992102878..aa5820a314 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -358,7 +358,11 @@ func (p *Peer) pingLoop() { latency := (time.Now().UnixMilli() - startPing.Load()) / 2 if latency > 0 { p.latency.Store(latency) - peerLatencyStat.Update(time.Duration(latency)) + if p.EVNPeerFlag.Load() { + evnPeerLatencyStat.Update(time.Duration(latency)) + } else { + normalPeerLatencyStat.Update(time.Duration(latency)) + } if latency > slowPeerLatencyThreshold { log.Warn("find a too slow peer", "id", p.ID(), "peer", p.RemoteAddr(), "latency", latency) } @@ -608,7 +612,8 @@ func (p *Peer) Info() *PeerInfo { info.Network.LocalAddress = p.LocalAddr().String() info.Network.RemoteAddress = p.RemoteAddr().String() info.Network.Inbound = p.rw.is(inboundConn) - info.Network.Trusted = p.rw.is(trustedConn) + // After Maxwell, we treat all EVN peers as trusted + info.Network.Trusted = p.rw.is(trustedConn) || p.EVNPeerFlag.Load() info.Network.Static = p.rw.is(staticDialedConn) // Gather all the running protocol infos