@@ -46,11 +46,12 @@ type MeshHandler struct {
4646 callersPastelID string
4747 passphrase string
4848
49- Nodes SuperNodeList
50- UseMaxNodes bool
51- checkDDDatabaseHashes bool
52- HashCheckMaxRetries int
53- logRequestID string
49+ Nodes SuperNodeList
50+ UseMaxNodes bool
51+ checkDDDatabaseHashes bool
52+ HashCheckMaxRetries int
53+ requireSNAgreementOnMNTopList bool
54+ logRequestID string
5455}
5556
5657// MeshHandlerOpts set of options to pass to NewMeshHandler
@@ -65,34 +66,36 @@ type MeshHandlerOpts struct {
6566
6667// MeshHandlerConfig config subset used by MeshHandler
6768type MeshHandlerConfig struct {
68- PastelID string
69- Passphrase string
70- MinSNs int
71- ConnectToNodeTimeout time.Duration
72- AcceptNodesTimeout time.Duration
73- ConnectToNextNodeDelay time.Duration
74- UseMaxNodes bool
75- CheckDDDatabaseHashes bool
76- HashCheckMaxRetries int
69+ PastelID string
70+ Passphrase string
71+ MinSNs int
72+ ConnectToNodeTimeout time.Duration
73+ AcceptNodesTimeout time.Duration
74+ ConnectToNextNodeDelay time.Duration
75+ UseMaxNodes bool
76+ CheckDDDatabaseHashes bool
77+ HashCheckMaxRetries int
78+ RequireSNAgreementOnMNTopList bool
7779}
7880
7981// NewMeshHandler returns new NewMeshHandler
8082func NewMeshHandler (opts MeshHandlerOpts ) * MeshHandler {
8183 return & MeshHandler {
82- task : opts .Task ,
83- nodeMaker : opts .NodeMaker ,
84- pastelHandler : opts .PastelHandler ,
85- nodeClient : opts .NodeClient ,
86- callersPastelID : opts .Configs .PastelID ,
87- passphrase : opts .Configs .Passphrase ,
88- minNumberSuperNodes : opts .Configs .MinSNs ,
89- connectToNodeTimeout : opts .Configs .ConnectToNodeTimeout ,
90- acceptNodesTimeout : opts .Configs .AcceptNodesTimeout ,
91- connectToNextNodeDelay : opts .Configs .ConnectToNextNodeDelay ,
92- UseMaxNodes : opts .Configs .UseMaxNodes ,
93- checkDDDatabaseHashes : opts .Configs .CheckDDDatabaseHashes ,
94- HashCheckMaxRetries : opts .Configs .HashCheckMaxRetries ,
95- logRequestID : opts .LogRequestID ,
84+ task : opts .Task ,
85+ nodeMaker : opts .NodeMaker ,
86+ pastelHandler : opts .PastelHandler ,
87+ nodeClient : opts .NodeClient ,
88+ callersPastelID : opts .Configs .PastelID ,
89+ passphrase : opts .Configs .Passphrase ,
90+ minNumberSuperNodes : opts .Configs .MinSNs ,
91+ connectToNodeTimeout : opts .Configs .ConnectToNodeTimeout ,
92+ acceptNodesTimeout : opts .Configs .AcceptNodesTimeout ,
93+ connectToNextNodeDelay : opts .Configs .ConnectToNextNodeDelay ,
94+ UseMaxNodes : opts .Configs .UseMaxNodes ,
95+ checkDDDatabaseHashes : opts .Configs .CheckDDDatabaseHashes ,
96+ HashCheckMaxRetries : opts .Configs .HashCheckMaxRetries ,
97+ requireSNAgreementOnMNTopList : opts .Configs .RequireSNAgreementOnMNTopList ,
98+ logRequestID : opts .LogRequestID ,
9699 }
97100}
98101
@@ -158,9 +161,14 @@ func (m *MeshHandler) findNValidTopSuperNodes(ctx context.Context, n int, skipNo
158161 }
159162 log .WithContext (ctx ).Infof ("Found %d Supernodes" , len (WNTopNodes ))
160163
161- candidateNodes , err := m .GetCandidateNodes (ctx , WNTopNodes )
162- if err != nil {
163- log .WithContext (ctx ).WithError (err ).Error ("error getting candidate nodes" )
164+ var candidateNodes SuperNodeList
165+ if m .requireSNAgreementOnMNTopList {
166+ candidateNodes , err = m .GetCandidateNodes (ctx , WNTopNodes )
167+ if err != nil {
168+ log .WithContext (ctx ).WithError (err ).Error ("error getting candidate nodes" )
169+ }
170+ } else {
171+ candidateNodes = WNTopNodes
164172 }
165173
166174 if len (candidateNodes ) < n {
0 commit comments