Skip to content

Commit b24804d

Browse files
authored
les: fix nodiscover option on the client side (#22422)
1 parent ba99910 commit b24804d

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

les/client.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) {
115115
p2pConfig: &stack.Config().P2P,
116116
}
117117

118-
leth.serverPool, leth.serverPoolIterator = vfc.NewServerPool(lesDb, []byte("serverpool:"), time.Second, leth.prenegQuery, &mclock.System{}, config.UltraLightServers, requestList)
118+
var prenegQuery vfc.QueryFunc
119+
if leth.p2pServer.DiscV5 != nil {
120+
prenegQuery = leth.prenegQuery
121+
}
122+
leth.serverPool, leth.serverPoolIterator = vfc.NewServerPool(lesDb, []byte("serverpool:"), time.Second, prenegQuery, &mclock.System{}, config.UltraLightServers, requestList)
119123
leth.serverPool.AddMetrics(suggestedTimeoutGauge, totalValueGauge, serverSelectableGauge, serverConnectedGauge, sessionValueMeter, serverDialedMeter)
120124

121125
leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool.GetTimeout)
@@ -194,6 +198,9 @@ func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) {
194198

195199
// VfluxRequest sends a batch of requests to the given node through discv5 UDP TalkRequest and returns the responses
196200
func (s *LightEthereum) VfluxRequest(n *enode.Node, reqs vflux.Requests) vflux.Replies {
201+
if s.p2pServer.DiscV5 == nil {
202+
return nil
203+
}
197204
reqsEnc, _ := rlp.EncodeToBytes(&reqs)
198205
repliesEnc, _ := s.p2pServer.DiscV5.TalkRequest(s.serverPool.DialNode(n), "vfx", reqsEnc)
199206
var replies vflux.Replies
@@ -208,6 +215,9 @@ func (s *LightEthereum) VfluxRequest(n *enode.Node, reqs vflux.Requests) vflux.R
208215
func (s *LightEthereum) vfxVersion(n *enode.Node) uint {
209216
if n.Seq() == 0 {
210217
var err error
218+
if s.p2pServer.DiscV5 == nil {
219+
return 0
220+
}
211221
if n, err = s.p2pServer.DiscV5.RequestENR(n); n != nil && err == nil && n.Seq() != 0 {
212222
s.serverPool.Persist(n)
213223
} else {

les/vflux/client/serverpool.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ type nodeHistoryEnc struct {
9191
// queryFunc sends a pre-negotiation query and blocks until a response arrives or timeout occurs.
9292
// It returns 1 if the remote node has confirmed that connection is possible, 0 if not
9393
// possible and -1 if no response arrived (timeout).
94-
type queryFunc func(*enode.Node) int
94+
type QueryFunc func(*enode.Node) int
9595

9696
var (
9797
clientSetup = &nodestate.Setup{Version: 2}
@@ -150,7 +150,7 @@ var (
150150
)
151151

152152
// NewServerPool creates a new server pool
153-
func NewServerPool(db ethdb.KeyValueStore, dbKey []byte, mixTimeout time.Duration, query queryFunc, clock mclock.Clock, trustedURLs []string, requestList []RequestInfo) (*ServerPool, enode.Iterator) {
153+
func NewServerPool(db ethdb.KeyValueStore, dbKey []byte, mixTimeout time.Duration, query QueryFunc, clock mclock.Clock, trustedURLs []string, requestList []RequestInfo) (*ServerPool, enode.Iterator) {
154154
s := &ServerPool{
155155
db: db,
156156
clock: clock,
@@ -246,7 +246,7 @@ func (s *ServerPool) AddSource(source enode.Iterator) {
246246
// addPreNegFilter installs a node filter mechanism that performs a pre-negotiation query.
247247
// Nodes that are filtered out and does not appear on the output iterator are put back
248248
// into redialWait state.
249-
func (s *ServerPool) addPreNegFilter(input enode.Iterator, query queryFunc) enode.Iterator {
249+
func (s *ServerPool) addPreNegFilter(input enode.Iterator, query QueryFunc) enode.Iterator {
250250
s.fillSet = NewFillSet(s.ns, input, sfQueried)
251251
s.ns.SubscribeState(sfQueried, func(n *enode.Node, oldState, newState nodestate.Flags) {
252252
if newState.Equals(sfQueried) {

les/vflux/client/serverpool_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (s *ServerPoolTest) addTrusted(i int) {
107107
}
108108

109109
func (s *ServerPoolTest) start() {
110-
var testQuery queryFunc
110+
var testQuery QueryFunc
111111
if s.preNeg {
112112
testQuery = func(node *enode.Node) int {
113113
idx := testNodeIndex(node.ID())

0 commit comments

Comments
 (0)