diff --git a/app/protocol/common/common.go b/app/protocol/common/common.go index e644d7efa..99dd549e3 100644 --- a/app/protocol/common/common.go +++ b/app/protocol/common/common.go @@ -3,6 +3,8 @@ package common import ( peerpkg "github.com/kaspanet/kaspad/app/protocol/peer" routerpkg "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + "os" + "sync" "time" "github.com/pkg/errors" @@ -25,3 +27,18 @@ type Flow struct { // FlowInitializeFunc is a function that is used in order to initialize a flow type FlowInitializeFunc func(route *routerpkg.Route, peer *peerpkg.Peer) error + +var isDNSSeeder bool +var isDNSSeederOnce sync.Once + +// IsDNSSeeder returns whether this node supports a DNS seeder. If this is the case, the node +// doesn't need to actually stay synced, and is mainly used for scanning the p2p network. +func IsDNSSeeder() bool { + isDNSSeederOnce.Do(func() { + isDNSSeederEnv := os.Getenv("DNSSEEDER") + if isDNSSeederEnv != "" { + isDNSSeeder = true + } + }) + return isDNSSeeder +} diff --git a/app/protocol/flows/v5/blockrelay/handle_relay_invs.go b/app/protocol/flows/v5/blockrelay/handle_relay_invs.go index 72736689f..61e977f4a 100644 --- a/app/protocol/flows/v5/blockrelay/handle_relay_invs.go +++ b/app/protocol/flows/v5/blockrelay/handle_relay_invs.go @@ -77,6 +77,11 @@ func (flow *handleRelayInvsFlow) start() error { return err } + if common.IsDNSSeeder() { + log.Debugf("IsDNSSeeder=true so skipping block inv") + continue + } + log.Debugf("Got relay inv for block %s", inv.Hash) blockInfo, err := flow.Domain().Consensus().GetBlockInfo(inv.Hash) diff --git a/app/protocol/flows/v5/transactionrelay/handle_relayed_transactions.go b/app/protocol/flows/v5/transactionrelay/handle_relayed_transactions.go index 401ac46fd..781954bdb 100644 --- a/app/protocol/flows/v5/transactionrelay/handle_relayed_transactions.go +++ b/app/protocol/flows/v5/transactionrelay/handle_relayed_transactions.go @@ -50,6 +50,11 @@ func (flow *handleRelayedTransactionsFlow) start() error { return err } + if common.IsDNSSeeder() { + log.Debugf("IsDNSSeeder=true so skipping tx inv") + continue + } + isNearlySynced, err := flow.IsNearlySynced() if err != nil { return err diff --git a/app/protocol/flows/v5/transactionrelay/log.go b/app/protocol/flows/v5/transactionrelay/log.go new file mode 100644 index 000000000..beafd2606 --- /dev/null +++ b/app/protocol/flows/v5/transactionrelay/log.go @@ -0,0 +1,9 @@ +package transactionrelay + +import ( + "github.com/kaspanet/kaspad/infrastructure/logger" + "github.com/kaspanet/kaspad/util/panics" +) + +var log = logger.RegisterSubSystem("TXRL") +var spawn = panics.GoroutineWrapperFunc(log)