Skip to content

Commit

Permalink
p2p/server: add DNS resolved candidates to distributed hash table (#370)
Browse files Browse the repository at this point in the history
Currently, DNS resolved candidates of eth protocol are added as candidates for
dialing but not added to DHT. The DHT's seed nodes are still configured via
hardcoded nodes in bootnodes flag. As we want to replace the hardcoded bootnodes
entirely with DNS resolved nodes, we resolve some nodes from the DNS discovery
URL and put them into DHT when setting up the p2p discovery.
  • Loading branch information
minh-bq authored Apr 4, 2024
1 parent 31c0980 commit 4a18ec4
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions p2p/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ const (

// Maximum amount of time allowed for writing a complete message.
frameWriteTimeout = 20 * time.Second

// The number of DHT seed nodes got from DNS resolve
numSeedNodesFromDns = 5

// Name of eth protocol
ethProtocolName = "eth"
)

var errServerStopped = errors.New("server stopped")
Expand Down Expand Up @@ -539,6 +545,22 @@ func (srv *Server) setupDiscovery() error {
added := make(map[string]bool)
for _, proto := range srv.Protocols {
if proto.DialCandidates != nil && !added[proto.Name] {
// If the protocol is eth, the dial candidates are retrieved from
// DNS URL. We want to use the DNS discovery for bootstrap nodes
// too, so resolve some nodes from DNS and add to DHT.
if proto.Name == ethProtocolName {
for i := 0; i < numSeedNodesFromDns; i++ {
if !proto.DialCandidates.Next() {
break
}

node := proto.DialCandidates.Node()
log.Info("Add resolved DNS node to discovery bootstrap nodes", "node", node.String())
srv.BootstrapNodes = append(srv.BootstrapNodes, node)
srv.BootstrapNodesV5 = append(srv.BootstrapNodesV5, node)
}
}

srv.discmix.AddSource(proto.DialCandidates)
added[proto.Name] = true
}
Expand Down

0 comments on commit 4a18ec4

Please sign in to comment.