diff --git a/README.md b/README.md index c8ccb408e..ad9abb74a 100644 --- a/README.md +++ b/README.md @@ -50,29 +50,29 @@ mev-tendermint introduces a new section of config in `config.toml` called `[side # **EXAMPLE** below (please use the correct values) [sidecar] -relayer_peer_string = "d1463b730c6e0dcea59db726836aeaff13a8119f@uni-5-sentinel.skip.money:26656" -relayer_rpc_string = "uni-5-gateway.skip.money" +sentinel_peer_string = "d1463b730c6e0dcea59db726836aeaff13a8119f@uni-5-sentinel.skip.money:26656" +sentinel_rpc_string = "uni-5-gateway.skip.money" api_key = "2314ajinashg2389jfjap" personal_peer_ids = "557611c7a7307ce023a7d13486b570282521296d,5740acbf39a9ae59953801fe4997421b6736e091" ``` Here’s an explanation of what these are: -### `relayer_peer_string` +### `sentinel_peer_string` - The `p2p@ip:port` for the Skip Sentinel that is used to establish a secret, authenticated handshake between your node and the Skip sentinel - For nodes that should not communicate with the sentinel directly (e.g. validator nodes that have sentries), this does not need to be set. -- **⭐  Find the `relayer_peer_string` here:** [⚙️ Skip Configurations By Chain](https://www.notion.so/Skip-Configurations-By-Chain-a6076cfa743f4ab38194096403e62f3c) +- **⭐  Find the `sentinel_peer_string` here:** [⚙️ Skip Configurations By Chain](https://www.notion.so/Skip-Configurations-By-Chain-a6076cfa743f4ab38194096403e62f3c) -### `relayer_rpc_string` +### `sentinel_rpc_string` - The `api` for the Skip Sentinel that is used to register your node - For nodes that should not communicate with the sentinel directly (e.g. validator nodes that have sentries), this does not need to be set. -- **⭐  Find the `relayer_rpc_string` here:** [⚙️ Skip Configurations By Chain](https://www.notion.so/Skip-Configurations-By-Chain-a6076cfa743f4ab38194096403e62f3c) +- **⭐  Find the `sentinel_rpc_string` here:** [⚙️ Skip Configurations By Chain](https://www.notion.so/Skip-Configurations-By-Chain-a6076cfa743f4ab38194096403e62f3c) ### `api_key` -- This is the unique string key Skip uses to ensure a node establishing a connection with our relay actually belongs to your validator. +- This is the unique string key Skip uses to ensure a node establishing a connection with our Sentinel actually belongs to your validator. - If you don't have one, please request one from the Skip team on our **[discord](https://discord.gg/amAgf9Z39w)** ### `personal_peer_ids` @@ -102,7 +102,7 @@ After you have completed the steps above, you can check you connectivity either - Check if you are peered with the sentinel by calling `curl http://localhost:26657/status` ```jsx - ”is_peered_with_relayer”: true + ”is_peered_with_sentinel”: true ``` - Check if you are running `mev-tendermint` by running either: @@ -115,7 +115,7 @@ After you have completed the steps above, you can check you connectivity either junod version --long | grep mev ``` -- Via the new prometheus metrics exposed on mev-tendermint, in particular `sidecar_relay_connected` +- Via the new prometheus metrics exposed on mev-tendermint, in particular `mev_sentinel_connected` --- @@ -221,10 +221,10 @@ The design goals of MEV-Tendermint is to allow & preserve: | Name | Type | Description | | --- | --- | --- | -| sidecar_size_bytes | Histogram | Histogram of sidecar mev transaction sizes, in bytes | -| sidecar_size | Gauge | Size of the sidecar | -| sidecar_num_bundles_total | Counter | Number of MEV bundles received by the sidecar in total | -| sidecar_num_bundles_last_block | Gauge | Number of mev bundles received during the last block | -| sidecar_num_mev_txs_total | Counter | Number of mev transactions added in total | -| sidecar_num_mev_txs_last_block | Gauge | Number of mev transactions received by sidecar in the last block | -| p2p_relay_connected | Gauge | Whether or not a node is connected to the relay, 1 if connected, 0 if not. | \ No newline at end of file +| mev_tx_size_bytes | Histogram | Histogram of mev transaction sizes, in bytes | +| mev_bundle_mempool_size | Gauge | Size of the MEV bundle mempool | +| mev_num_bundles_total | Counter | Number of MEV bundles received in total | +| mev_num_bundles_last_block | Gauge | Number of mev bundles received during the last block | +| mev_num_txs_total | Counter | Number of mev transactions added in total | +| mev_num_txs_last_block | Gauge | Number of mev transactions received in the last block | +| mev_sentinel_connected | Gauge | Whether or not a node is connected to the sentinel, 1 if connected, 0 if not. | \ No newline at end of file diff --git a/cmd/tendermint/commands/root.go b/cmd/tendermint/commands/root.go index b74dc3a49..4cf8d28c3 100644 --- a/cmd/tendermint/commands/root.go +++ b/cmd/tendermint/commands/root.go @@ -53,19 +53,26 @@ func ParseConfig(cmd *cobra.Command) (*cfg.Config, error) { if err := conf.ValidateBasic(); err != nil { return nil, fmt.Errorf("error in config file: %v", err) } - // Add auction relayer to config if not present and set - if len(conf.Sidecar.RelayerPeerString) > 0 { - relayerID := strings.Split(conf.Sidecar.RelayerPeerString, "@")[0] - if !strings.Contains(conf.P2P.PrivatePeerIDs, relayerID) { + // Add auction sentinel to config if not present and set + // Temporarily support both SentinelPeerString and RelayerPeerString + sentinelPeerString := conf.Sidecar.SentinelPeerString + if len(sentinelPeerString) == 0 { + logger.Info(`[mev-tendermint]: WARNING: sentinel_peer_string not found in config.toml. + relayer_peer_string is being deprecated for sentinel_peer_string`) + sentinelPeerString = conf.Sidecar.RelayerPeerString + } + if len(sentinelPeerString) > 0 { + sentinelID := strings.Split(sentinelPeerString, "@")[0] + if !strings.Contains(conf.P2P.PrivatePeerIDs, sentinelID) { // safety check to not blow away existing private peers if any if len(conf.P2P.PrivatePeerIDs) > 0 { if conf.P2P.PrivatePeerIDs[len(conf.P2P.PrivatePeerIDs)-1:] == "," { - conf.P2P.PrivatePeerIDs = conf.P2P.PrivatePeerIDs + relayerID + conf.P2P.PrivatePeerIDs = conf.P2P.PrivatePeerIDs + sentinelID } else { - conf.P2P.PrivatePeerIDs = conf.P2P.PrivatePeerIDs + "," + relayerID + conf.P2P.PrivatePeerIDs = conf.P2P.PrivatePeerIDs + "," + sentinelID } } else { - conf.P2P.PrivatePeerIDs = relayerID + conf.P2P.PrivatePeerIDs = sentinelID } } } diff --git a/config/config.go b/config/config.go index 41657c38a..c15d3121d 100644 --- a/config/config.go +++ b/config/config.go @@ -1084,9 +1084,13 @@ func (cfg *ConsensusConfig) ValidateBasic() error { // SidecarConfig // Sidecar defines configuration for gossiping the private sidecar -// mempool among the relayer and the nodes that belong to a particular proposer +// mempool among the sentinel and the nodes that belong to a particular proposer type SidecarConfig struct { - RootDir string `mapstructure:"home"` + RootDir string `mapstructure:"home"` + // Temporarily support both Sentinel and Relayer names + SentinelRPCString string `mapstructure:"sentinel_rpc_string"` + SentinelPeerString string `mapstructure:"sentinel_peer_string"` + RelayerRPCString string `mapstructure:"relayer_rpc_string"` RelayerPeerString string `mapstructure:"relayer_peer_string"` @@ -1100,9 +1104,9 @@ func DefaultSidecarConfig() *SidecarConfig { func TestSidecarConfig() *SidecarConfig { return &SidecarConfig{ - RelayerRPCString: "test-api.skip.money", - RelayerPeerString: "79044d1d81d24a8ff3c7fd7e010f455f7ae9e1ad@1.2.3.4:26656", - APIKey: "api-key", + SentinelRPCString: "test-api.skip.money", + SentinelPeerString: "79044d1d81d24a8ff3c7fd7e010f455f7ae9e1ad@1.2.3.4:26656", + APIKey: "api-key", } } diff --git a/config/toml.go b/config/toml.go index 0f4f3816f..772c236d4 100644 --- a/config/toml.go +++ b/config/toml.go @@ -543,8 +543,8 @@ namespace = "{{ .Instrumentation.Namespace }}" # nodes in your network receive auction-winning # txs when when your validator is the proposer) personal_peer_ids = "{{ .Sidecar.PersonalPeerIDs }}" -relayer_peer_string = "{{ .Sidecar.RelayerPeerString }}" -relayer_rpc_string = "{{ .Sidecar.RelayerRPCString }}" +sentinel_peer_string = "{{ .Sidecar.SentinelPeerString }}" +sentinel_rpc_string = "{{ .Sidecar.SentinelRPCString }}" api_key = "{{ .Sidecar.APIKey }}" ` diff --git a/config/toml_test.go b/config/toml_test.go index bca6470be..42420c05a 100644 --- a/config/toml_test.go +++ b/config/toml_test.go @@ -84,8 +84,8 @@ func checkConfig(configFile string) bool { "max", "genesis", "skip", - "relayer_rpc_string", - "relayer_peer_string", + "sentinel_rpc_string", + "sentinel_peer_string", "personal_peer_ids", } for _, e := range elems { diff --git a/mev/metrics.go b/mev/metrics.go index c1a37af13..1cfb9bd2b 100644 --- a/mev/metrics.go +++ b/mev/metrics.go @@ -15,8 +15,8 @@ const ( // Metrics contains metrics exposed by this package. type Metrics struct { - // Whether or not a node is connected to the relay. - RelayConnected metrics.Gauge + // Whether or not a node is connected to the sentinel. + SentinelConnected metrics.Gauge // SIDECAR METRICS // Size of the sidecar. @@ -44,11 +44,11 @@ func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { labels = append(labels, labelsAndValues[i]) } return &Metrics{ - RelayConnected: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ + SentinelConnected: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ Namespace: namespace, Subsystem: MetricsSubsystem, - Name: "relay_connected", - Help: "Whether or not a node is connected to the mev relay / sentinel. 1 if yes, 0 if no.", + Name: "sentinel_connected", + Help: "Whether or not a node is connected to the mev sentinel. 1 if yes, 0 if no.", }, labels).With(labelsAndValues...), // SIDECAR METRICS MevBundleMempoolSize: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ @@ -93,7 +93,7 @@ func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { // NopMetrics returns no-op Metrics. func NopMetrics() *Metrics { return &Metrics{ - RelayConnected: discard.NewGauge(), + SentinelConnected: discard.NewGauge(), // SIDECAR METRICS MevBundleMempoolSize: discard.NewGauge(), MevTxSizeBytes: discard.NewHistogram(), diff --git a/node/node.go b/node/node.go index d2f1d82ad..f133e7b1b 100644 --- a/node/node.go +++ b/node/node.go @@ -594,11 +594,19 @@ func createSwitch(config *cfg.Config, p2pLogger log.Logger) *p2p.Switch { sidecarPeers := splitAndTrimEmpty(config.Sidecar.PersonalPeerIDs, ",", " ") + // Temporarily support both SentinelPeerString and RelayerPeerString + sentinelPeerString := config.Sidecar.SentinelPeerString + if len(sentinelPeerString) == 0 { + p2pLogger.Info(`[mev-tendermint]: WARNING: sentinel_peer_string not found in config.toml. + relayer_peer_string is being deprecated for sentinel_peer_string`) + sentinelPeerString = config.Sidecar.RelayerPeerString + } + sw := p2p.NewSwitch( config.P2P, sidecarPeers, transport, - config.Sidecar.RelayerPeerString, + sentinelPeerString, p2p.WithMetrics(p2pMetrics), p2p.WithMevMetrics(mevMetrics), p2p.SwitchPeerFilters(peerFilters...), @@ -885,26 +893,35 @@ func NewNode(config *cfg.Config, return nil, fmt.Errorf("could not add peers from persistent_peers field: %w", err) } - if config.Sidecar.RelayerPeerString != "" { - err = sw.SetRelayerPeer(config.Sidecar.RelayerPeerString) + // Temporarily support both SentinelPeerString and RelayerPeerString + sentinelPeerString := config.Sidecar.SentinelPeerString + if len(sentinelPeerString) == 0 && len(config.Sidecar.RelayerPeerString) > 0 { + logger.Info(`[mev-tendermint]: WARNING: sentinel_peer_string not found in config.toml. + relayer_peer_string is being deprecated for sentinel_peer_string. Please update your + config.toml to use sentinel_peer_string.`) + sentinelPeerString = config.Sidecar.RelayerPeerString + } + + if sentinelPeerString != "" { + err = sw.SetSentinelPeer(sentinelPeerString) if err != nil { - return nil, fmt.Errorf("could not add relayer from relayer_conn_string field: %w", err) + return nil, fmt.Errorf("could not add sentinel from sentinel_peer_string field: %w", err) } } else { - logger.Info("[node startup]: No relayer_conn_string specified, not adding relayer as peer") + logger.Info("[node startup]: No sentinel_peer_string specified, not adding sentinel as peer") } unconditionalPeerIDs := splitAndTrimEmpty(config.P2P.UnconditionalPeerIDs, ",", " ") - if config.Sidecar.RelayerPeerString != "" { - splitStr := strings.Split(config.Sidecar.RelayerPeerString, "@") + if sentinelPeerString != "" { + splitStr := strings.Split(sentinelPeerString, "@") if len(splitStr) > 0 { - relayerID := splitStr[0] - logger.Info("[node startup]: Adding relayer as an unconditional peer", relayerID) - unconditionalPeerIDs = append(unconditionalPeerIDs, relayerID) + sentinelID := splitStr[0] + logger.Info("[node startup]: Adding sentinel as an unconditional peer", sentinelID) + unconditionalPeerIDs = append(unconditionalPeerIDs, sentinelID) } else { - fmt.Println("[node startup]: ERR: Could not parse relayer peer string", + fmt.Println("[node startup]: ERR: Could not parse sentinel peer string", " to add as unconditional peer, is it correctly configured?", - config.Sidecar.RelayerPeerString) + sentinelPeerString) } } err = sw.AddUnconditionalPeerIDs(unconditionalPeerIDs) @@ -994,27 +1011,44 @@ func (n *Node) OnStart() error { time.Sleep(genTime.Sub(now)) } + // Temporarily support both SentinelRPCString and RelayerRPCString + sentinelRPCString := n.config.Sidecar.SentinelRPCString + if len(sentinelRPCString) == 0 && len(n.config.Sidecar.RelayerRPCString) > 0 { + n.Logger.Info(`[mev-tendermint]: WARNING: sentinel_rpc_string not found in config.toml. + relayer_rpc_string is being deprecated for sentinel_rpc_string. Please update your + config.toml to use sentinel_rpc_string.`) + sentinelRPCString = n.config.Sidecar.RelayerRPCString + } + // If all required info is set in config, register with sentinel - if n.config.Sidecar.APIKey != "" && n.config.Sidecar.RelayerRPCString != "" { + if n.config.Sidecar.APIKey != "" && sentinelRPCString != "" { p2p.RegisterWithSentinel(n.Logger, n.config.Sidecar.APIKey, - string(n.nodeInfo.ID()), n.config.Sidecar.RelayerRPCString) + string(n.nodeInfo.ID()), sentinelRPCString) } else { - n.Logger.Info("[node startup]: Not registering with relayer, config has API Key:", n.config.Sidecar.APIKey, - "relayer rpc string:", n.config.Sidecar.RelayerRPCString) + n.Logger.Info("[node startup]: Not registering with sentinel, config has API Key:", n.config.Sidecar.APIKey, + "sentinel rpc string:", sentinelRPCString) + } + + // Temporarily support both SentinelPeerString and RelayerPeerString + sentinelPeerString := n.config.Sidecar.SentinelPeerString + if len(sentinelPeerString) == 0 { + n.Logger.Info(`[mev-tendermint]: WARNING: sentinel_peer_string not found in config.toml. + relayer_peer_string is being deprecated for sentinel_peer_string`) + sentinelPeerString = n.config.Sidecar.RelayerPeerString } // Add private IDs to addrbook to block those peers being added privateIDs := splitAndTrimEmpty(n.config.P2P.PrivatePeerIDs, ",", " ") - if n.config.Sidecar.RelayerPeerString != "" { - splitStr := strings.Split(n.config.Sidecar.RelayerPeerString, "@") + if sentinelPeerString != "" { + splitStr := strings.Split(sentinelPeerString, "@") if len(splitStr) > 1 { - relayerID := splitStr[0] - n.Logger.Info("[node startup]: Adding relayer as a private peer", relayerID) - privateIDs = append(privateIDs, relayerID) + sentinelID := splitStr[0] + n.Logger.Info("[node startup]: Adding sentinel as a private peer", sentinelID) + privateIDs = append(privateIDs, sentinelID) } else { - n.Logger.Info("[node startup]: ERR Could not parse relayer peer string ", + n.Logger.Info("[node startup]: ERR Could not parse sentinel peer string ", "to add as private peer, is it correctly configured?", - n.config.Sidecar.RelayerPeerString) + sentinelPeerString) } } n.addrBook.AddPrivateIDs(privateIDs) @@ -1053,16 +1087,16 @@ func (n *Node) OnStart() error { // Always connect to persistent peers peersToDialOnStartup := splitAndTrimEmpty(n.config.P2P.PersistentPeers, ",", " ") - if n.config.Sidecar.RelayerPeerString != "" { - peersToDialOnStartup = append(peersToDialOnStartup, n.config.Sidecar.RelayerPeerString) + if sentinelPeerString != "" { + peersToDialOnStartup = append(peersToDialOnStartup, sentinelPeerString) } else { - n.Logger.Info("[node startup]: No relayer_conn_string specified, not dialing relayer on startup") + n.Logger.Info("[node startup]: No sentinel_peer_string specified, not dialing sentinel on startup") } err = n.sw.DialPeersAsync(peersToDialOnStartup) if err != nil { return fmt.Errorf("could not dial peers from persistent_peers field: %w", err) } - n.sw.StartRelayerConnectionCheckRoutine() + n.sw.StartSentinelConnectionCheckRoutine() // Run state sync if n.stateSync { diff --git a/p2p/switch.go b/p2p/switch.go index 4ca25b1ec..42fcde9e5 100644 --- a/p2p/switch.go +++ b/p2p/switch.go @@ -92,13 +92,13 @@ type Switch struct { rng *rand.Rand // seed for randomizing dial times and orders - metrics *Metrics - mevMetrics *mev.Metrics - sidecarPeers sidecarPeers - RelayerPeerString string - RelayerNetAddr *NetAddress + metrics *Metrics + mevMetrics *mev.Metrics + sidecarPeers sidecarPeers + SentinelPeerString string + SentinelNetAddr *NetAddress - relayerReconnectionMtx sync.Mutex + sentinelReconnectionMtx sync.Mutex } // NetAddress returns the address the switch is listening on. @@ -134,7 +134,7 @@ func NewSwitch( cfg *config.P2PConfig, sidecarPeerList []string, transport Transport, - relayerPeerString string, + sentinelPeerString string, options ...SwitchOption, ) *Switch { sw := &Switch{ @@ -150,13 +150,13 @@ func NewSwitch( filterTimeout: defaultFilterTimeout, persistentPeersAddrs: make([]*NetAddress, 0), unconditionalPeerIDs: make(map[ID]struct{}), - RelayerPeerString: relayerPeerString, + SentinelPeerString: sentinelPeerString, } - if relayerPeerString != "" { - relayerID := strings.Split(relayerPeerString, "@")[0] - if !contains(sidecarPeerList, relayerID) { - sidecarPeerList = append(sidecarPeerList, relayerID) + if sentinelPeerString != "" { + sentinelID := strings.Split(sentinelPeerString, "@")[0] + if !contains(sidecarPeerList, sentinelID) { + sidecarPeerList = append(sidecarPeerList, sentinelID) } } sidecarPeers, err := newSidecarPeers(sidecarPeerList) @@ -376,10 +376,10 @@ func (sw *Switch) StopPeerForError(peer Peer, reason interface{}) { sw.Logger.Error("Stopping peer for error", "peer", peer, "err", reason) sw.stopAndRemovePeer(peer, reason) - sw.Logger.Info("Looking to reconnect after StopPeerForError, peer is ", peer, "relayer is ", sw.RelayerNetAddr) - if sw.RelayerNetAddr != nil && peer.ID() == sw.RelayerNetAddr.ID { - sw.Logger.Info("Relayer peer disconnected, attempting to reconnect") - go sw.reconnectToRelayerPeer() + sw.Logger.Info("Looking to reconnect after StopPeerForError, peer is ", peer, "sentinel is ", sw.SentinelNetAddr) + if sw.SentinelNetAddr != nil && peer.ID() == sw.SentinelNetAddr.ID { + sw.Logger.Info("Sentinel peer disconnected, attempting to reconnect") + go sw.reconnectToSentinelPeer() } else if peer.IsPersistent() { var addr *NetAddress if peer.IsOutbound() { // socket address for outbound peers @@ -423,41 +423,41 @@ func (sw *Switch) stopAndRemovePeer(peer Peer, reason interface{}) { sw.metrics.Peers.Add(float64(-1)) // check if we removed sentinel, if so, alert metrics - splitStr := strings.Split(sw.RelayerPeerString, "@") + splitStr := strings.Split(sw.SentinelPeerString, "@") if len(splitStr) > 1 { - relayerIDConv := ID(splitStr[0]) - if err := validateID(relayerIDConv); err == nil { - if peer.ID() == relayerIDConv { - sw.mevMetrics.RelayConnected.Set(0) + sentinelIDConv := ID(splitStr[0]) + if err := validateID(sentinelIDConv); err == nil { + if peer.ID() == sentinelIDConv { + sw.mevMetrics.SentinelConnected.Set(0) } } else { - sw.Logger.Error("Error validating relayer ID", "err", err, "is it correctly configured?", sw.RelayerPeerString) + sw.Logger.Error("Error validating sentinel ID", "err", err, "is it correctly configured?", sw.SentinelPeerString) } } else { - sw.Logger.Error("Error splitting relayer ID", "is it correctly configured?", sw.RelayerPeerString) + sw.Logger.Error("Error splitting sentinel ID", "is it correctly configured?", sw.SentinelPeerString) } } } -func (sw *Switch) reconnectToRelayerPeer() { - sw.Logger.Info("[relayer-reconnection]: starting relayer reconnect routine") +func (sw *Switch) reconnectToSentinelPeer() { + sw.Logger.Info("[sentinel-reconnection]: starting sentinel reconnect routine") shouldReturn := func() bool { - sw.relayerReconnectionMtx.Lock() - defer sw.relayerReconnectionMtx.Unlock() + sw.sentinelReconnectionMtx.Lock() + defer sw.sentinelReconnectionMtx.Unlock() - if sw.reconnecting.Has(sw.RelayerPeerString) { - sw.Logger.Info("[relayer-reconnection]: already have a reconnection routine for ", sw.RelayerPeerString) + if sw.reconnecting.Has(sw.SentinelPeerString) { + sw.Logger.Info("[sentinel-reconnection]: already have a reconnection routine for ", sw.SentinelPeerString) return true } - sw.reconnecting.Set(sw.RelayerPeerString, struct{}{}) + sw.reconnecting.Set(sw.SentinelPeerString, struct{}{}) return false }() if shouldReturn { return } - defer sw.reconnecting.Delete(sw.RelayerPeerString) + defer sw.reconnecting.Delete(sw.SentinelPeerString) i := 0 for { @@ -466,19 +466,19 @@ func (sw *Switch) reconnectToRelayerPeer() { } i++ - // This performs another IP lookup and saves the result in sw.RelayerNetAddr - err := sw.SetRelayerPeer(sw.RelayerPeerString) + // This performs another IP lookup and saves the result in sw.SentinelNetAddr + err := sw.SetSentinelPeer(sw.SentinelPeerString) if err != nil { sw.Logger.Info( - "[relayer-reconnection]: Error resolving IP from relayer peer string. Trying again", + "[sentinel-reconnection]: Error resolving IP from sentinel peer string. Trying again", "tries", i, "err", err, - "relayerPeerString", sw.RelayerPeerString, + "sentinelPeerString", sw.SentinelPeerString, ) sw.randomSleep(30 * time.Second) continue } - addr := sw.RelayerNetAddr + addr := sw.SentinelNetAddr err = sw.DialPeerWithAddress(addr) if err == nil { @@ -487,7 +487,7 @@ func (sw *Switch) reconnectToRelayerPeer() { return } - sw.Logger.Info("[relayer-reconnection]: Error reconnecting to relayer. Trying again", "tries", i, "err", err, "addr", addr) + sw.Logger.Info("[sentinel-reconnection]: Error reconnecting to sentinel. Trying again", "tries", i, "err", err, "addr", addr) // sleep a set amount sw.randomSleep(30 * time.Second) } @@ -679,14 +679,14 @@ func (sw *Switch) IsDialingOrExistingAddress(addr *NetAddress) bool { (!sw.config.AllowDuplicateIP && sw.peers.HasIP(addr.IP)) } -func (sw *Switch) SetRelayerPeer(addr string) error { - sw.Logger.Info("Adding relayer as peer", "addr", addr) +func (sw *Switch) SetSentinelPeer(addr string) error { + sw.Logger.Info("Adding sentinel as peer", "addr", addr) netAddr, err := NewNetAddressString(addr) if err != nil { - sw.Logger.Error("Error in relayer's address", "err", err) + sw.Logger.Error("Error in sentinel's address", "err", err) return err } - sw.RelayerNetAddr = netAddr + sw.SentinelNetAddr = netAddr return nil } @@ -852,18 +852,17 @@ func (sw *Switch) addOutboundPeerWithConfig( addr *NetAddress, cfg *config.P2PConfig, ) error { - - if sw.RelayerNetAddr != nil && addr.ID == sw.RelayerNetAddr.ID { - sw.Logger.Info("[relayer-reconnection]: DIALING RELAYER", "address", addr, "time", time.Now()) + if sw.SentinelNetAddr != nil && addr.ID == sw.SentinelNetAddr.ID { + sw.Logger.Info("[sentinel-reconnection]: DIALING SENTINEL", "address", addr, "time", time.Now()) } else { sw.Logger.Info("Dialing peer", "address", addr) } // XXX(xla): Remove the leakage of test concerns in implementation. if cfg.TestDialFail { - if sw.RelayerNetAddr != nil && addr.ID == sw.RelayerNetAddr.ID { - go sw.reconnectToRelayerPeer() - return fmt.Errorf("dial err relayer (peerConfig.DialFail == true)") + if sw.SentinelNetAddr != nil && addr.ID == sw.SentinelNetAddr.ID { + go sw.reconnectToSentinelPeer() + return fmt.Errorf("dial err sentinel (peerConfig.DialFail == true)") } go sw.reconnectToPeer(addr) return fmt.Errorf("dial err (peerConfig.DialFail == true)") @@ -891,8 +890,8 @@ func (sw *Switch) addOutboundPeerWithConfig( // retry persistent peers after // any dial error besides IsSelf() - if sw.RelayerNetAddr != nil && addr.ID == sw.RelayerNetAddr.ID { - go sw.reconnectToRelayerPeer() + if sw.SentinelNetAddr != nil && addr.ID == sw.SentinelNetAddr.ID { + go sw.reconnectToSentinelPeer() } else if sw.IsPeerPersistent(addr) { go sw.reconnectToPeer(addr) } @@ -906,8 +905,8 @@ func (sw *Switch) addOutboundPeerWithConfig( _ = p.Stop() } return err - } else if sw.RelayerNetAddr != nil && addr.ID == sw.RelayerNetAddr.ID { - sw.Logger.Info("[relayer-reconnection]: RELAYER RECONNECTED!", "address", addr) + } else if sw.SentinelNetAddr != nil && addr.ID == sw.SentinelNetAddr.ID { + sw.Logger.Info("[sentinel-reconnection]: SENTINEL RECONNECTED!", "address", addr) } return nil @@ -945,9 +944,9 @@ func (sw *Switch) filterPeer(p Peer) error { // the peer is filtered out or failed to start or can't be added. func (sw *Switch) addPeer(p Peer) error { if err := sw.filterPeer(p); err != nil { - // if peer is relayer, log the error - if sw.RelayerNetAddr != nil && p.ID() == sw.RelayerNetAddr.ID { - sw.Logger.Error("[relayer-reconnection]: filterPeer filtered relayer", "err", err) + // if peer is sentinel, log the error + if sw.SentinelNetAddr != nil && p.ID() == sw.SentinelNetAddr.ID { + sw.Logger.Error("[sentinel-reconnection]: filterPeer filtered sentinel", "err", err) } return err } @@ -986,18 +985,18 @@ func (sw *Switch) addPeer(p Peer) error { sw.metrics.Peers.Add(float64(1)) // check if we removed sentinel, if so, alert metrics - splitStr := strings.Split(sw.RelayerPeerString, "@") + splitStr := strings.Split(sw.SentinelPeerString, "@") if len(splitStr) > 1 { - relayerIDConv := ID(splitStr[0]) - if err := validateID(relayerIDConv); err == nil { - if p.ID() == relayerIDConv { - sw.mevMetrics.RelayConnected.Set(1) + sentinelIDConv := ID(splitStr[0]) + if err := validateID(sentinelIDConv); err == nil { + if p.ID() == sentinelIDConv { + sw.mevMetrics.SentinelConnected.Set(1) } } else { - sw.Logger.Error("Error validating relayer ID", "err", err, "is it correctly configured?", sw.RelayerPeerString) + sw.Logger.Error("Error validating sentinel ID", "err", err, "is it correctly configured?", sw.SentinelPeerString) } } else { - sw.Logger.Error("Error splitting relayer ID", "is it correctly configured?", sw.RelayerPeerString) + sw.Logger.Error("Error splitting sentinel ID", "is it correctly configured?", sw.SentinelPeerString) } // Start all the reactor protocols on the peer. @@ -1010,18 +1009,18 @@ func (sw *Switch) addPeer(p Peer) error { return nil } -func (sw *Switch) StartRelayerConnectionCheckRoutine() { +func (sw *Switch) StartSentinelConnectionCheckRoutine() { go func() { for { // Do this check roughly every 5 minutes sw.randomSleep(5 * 60 * time.Second) - sw.Logger.Info("[relayer-check]: Entering periodic check for relayer peer connection") - if !sw.peers.Has(ID(strings.Split(sw.RelayerPeerString, "@")[0])) { - sw.Logger.Info("[relayer-check]: Relayer connection check routine didn't find relayer peer, starting reconnection routine") - go sw.reconnectToRelayerPeer() + sw.Logger.Info("[sentinel-check]: Entering periodic check for sentinel peer connection") + if !sw.peers.Has(ID(strings.Split(sw.SentinelPeerString, "@")[0])) { + sw.Logger.Info("[sentinel-check]: Sentinel connection check routine didn't find sentinel peer, starting reconnection routine") + go sw.reconnectToSentinelPeer() } else { - sw.Logger.Info("[relayer-check]: Found existing connection to relayer, going back to sleep") + sw.Logger.Info("[sentinel-check]: Found existing connection to sentinel, going back to sleep") } } }() diff --git a/p2p/switch_test.go b/p2p/switch_test.go index 425726179..aadd5f9b5 100644 --- a/p2p/switch_test.go +++ b/p2p/switch_test.go @@ -846,19 +846,19 @@ func BenchmarkSwitchBroadcast(b *testing.B) { b.Logf("success: %v, failure: %v", numSuccess, numFailure) } -func TestSetRelayerPeer(t *testing.T) { +func TestSetSentinelPeer(t *testing.T) { sw := MakeSwitch(cfg, 1, "testing", "123.123.123", initSwitchFunc) - relayerString := "79044d1d81d24a8ff3c7fd7e010f455f7ae9e1ad@1.2.3.4:26656" - relayerNetAddr, _ := NewNetAddressString(relayerString) + sentinelString := "79044d1d81d24a8ff3c7fd7e010f455f7ae9e1ad@1.2.3.4:26656" + sentinelNetAddr, _ := NewNetAddressString(sentinelString) - err := sw.SetRelayerPeer(relayerString) + err := sw.SetSentinelPeer(sentinelString) if err != nil { - t.Errorf("Err in SetRelayerPeer: %s", err) + t.Errorf("Err in SetSentinelPeer: %s", err) } - assert.Equal(t, relayerNetAddr, sw.RelayerNetAddr, "Expected RelayerNetAddr %s, got %s", relayerNetAddr, sw.RelayerNetAddr) + assert.Equal(t, sentinelNetAddr, sw.SentinelNetAddr, "Expected SentinelNetAddr %s, got %s", sentinelNetAddr, sw.SentinelNetAddr) - errRelayerString := "abcd@1.2.3.4:26656" - err = sw.SetRelayerPeer(errRelayerString) - assert.True(t, err != nil, "Expected err with invalid relayer string") + errSentinelString := "abcd@1.2.3.4:26656" + err = sw.SetSentinelPeer(errSentinelString) + assert.True(t, err != nil, "Expected err with invalid sentinel string") } diff --git a/rpc/core/status.go b/rpc/core/status.go index a8855fbe3..e05e44ae1 100644 --- a/rpc/core/status.go +++ b/rpc/core/status.go @@ -53,12 +53,17 @@ func Status(ctx *rpctypes.Context) (*ctypes.ResultStatus, error) { } var ( - isPeeredWithRelayer bool + isPeeredWithSentinel bool lastReceivedBundleHeight int64 ) - if relayer := env.SidecarConfig.RelayerPeerString; relayer != "" { - isPeeredWithRelayer = env.P2PPeers.Peers().Has(p2p.ID(strings.Split(relayer, "@")[0])) + // Temporarily support both SentinelPeerString and RelayerPeerString + sentinel := env.SidecarConfig.SentinelPeerString + if len(sentinel) == 0 { + sentinel = env.SidecarConfig.RelayerPeerString + } + if sentinel != "" { + isPeeredWithSentinel = env.P2PPeers.Peers().Has(p2p.ID(strings.Split(sentinel, "@")[0])) } if env.Sidecar != nil { @@ -84,7 +89,7 @@ func Status(ctx *rpctypes.Context) (*ctypes.ResultStatus, error) { VotingPower: votingPower, }, MevInfo: ctypes.MevInfo{ - IsPeeredWithRelayer: isPeeredWithRelayer, + IsPeeredWithSentinel: isPeeredWithSentinel, LastReceivedBundleHeight: lastReceivedBundleHeight, }, } diff --git a/rpc/core/types/responses.go b/rpc/core/types/responses.go index 0a0454dd2..0cae6f3a5 100644 --- a/rpc/core/types/responses.go +++ b/rpc/core/types/responses.go @@ -92,7 +92,7 @@ type ValidatorInfo struct { } type MevInfo struct { - IsPeeredWithRelayer bool `json:"is_peered_with_relayer"` + IsPeeredWithSentinel bool `json:"is_peered_with_sentinel"` LastReceivedBundleHeight int64 `json:"last_received_bundle_height"` }