瀏覽代碼

setupBootstrapNodes

skyfffire 2 年之前
父節點
當前提交
c9eb44755f
共有 3 個文件被更改,包括 37 次插入5 次删除
  1. 2 1
      p2p/config.go
  2. 26 4
      p2p/server.go
  3. 9 0
      params/bootnodes.go

+ 2 - 1
p2p/config.go

@@ -3,6 +3,7 @@ package p2p
 import (
 	"blockchain-go/common/mclock"
 	"blockchain-go/log"
+	"blockchain-go/p2p/enode"
 	"blockchain-go/p2p/nat"
 	"blockchain-go/p2p/netutil"
 	"crypto/ecdsa"
@@ -68,7 +69,7 @@ type Config struct {
 
 	// BootstrapNodes are used to establish connectivity
 	// with the rest of the network.
-	//BootstrapNodes []*enode.Node
+	BootstrapNodes []*enode.Node
 
 	// BootstrapNodesV5 are used to establish connectivity
 	// with the rest of the network using the V5 discovery

+ 26 - 4
p2p/server.go

@@ -7,6 +7,7 @@ import (
 	"blockchain-go/p2p/enr"
 	"blockchain-go/p2p/nat"
 	"blockchain-go/p2p/rlpx"
+	"blockchain-go/params"
 	"crypto/ecdsa"
 	"errors"
 	"fmt"
@@ -67,6 +68,10 @@ func (server *Server) Start() (err error) {
 	server.checkpointPostHandshake = make(chan *conn)
 	server.checkpointAddPeer = make(chan *conn)
 
+	if err := server.setupBootstrapNodes(); err != nil {
+		return err
+	}
+
 	if err := server.setupLocalNode(); err != nil {
 		return err
 	}
@@ -129,10 +134,10 @@ func (server *Server) setupDiscovery() (err error) {
 	//	sconn = &sharedUDPConn{conn, unhandled}
 	//}
 	cfg := discover.Config{
-		PrivateKey: server.PrivateKey,
-		//NetRestrict: server.NetRestrict,
-		//Bootnodes:   server.BootstrapNodes,
-		Unhandled: unhandled,
+		PrivateKey:  server.PrivateKey,
+		NetRestrict: server.NetRestrict,
+		Bootnodes:   server.BootstrapNodes,
+		Unhandled:   unhandled,
 		//Log:         server.log,
 	}
 	ntab, err := discover.ListenV4(conn, server.localnode, cfg)
@@ -145,6 +150,23 @@ func (server *Server) setupDiscovery() (err error) {
 	return nil
 }
 
+func (server *Server) setupBootstrapNodes() (err error) {
+	urls := params.MainnetBootNodes
+
+	server.BootstrapNodes = make([]*enode.Node, 0, len(urls))
+	for _, url := range urls {
+		if url != "" {
+			node, err := enode.Parse(enode.ValidSchemes, url)
+			if err != nil {
+				return err
+			}
+			server.BootstrapNodes = append(server.BootstrapNodes, node)
+		}
+	}
+
+	return nil
+}
+
 // 设置拨号调度器
 func (server *Server) setupDialScheduler() {
 	config := dialConfig{

+ 9 - 0
params/bootnodes.go

@@ -0,0 +1,9 @@
+package params
+
+var MainnetBootNodes = []string{
+	// Ethereum Foundation Go Bootnodes
+	"enode://6334cdde2728b17486e4930c29e85128694faf118c23f559c7502e1cb42dd90a54f785c80c6a493d7d6f5ed23f3c9cf75e0392b024e45f7eadc81a84544a45ff@seed4.coredao.org:0?discport=35022",
+	"enode://20b605d5ee978c22bfb9ed208a40f2876d3dfafb1c60a6427c4db28e516520ee610cbc2a1c0ee05dd08578a041dc9070d92cf888422ed0869d0666b5103292b4@seed2.coredao.org:0?discport=35022",
+	"enode://04ffc724b82e2c52df47e2439a30ca4c0f7aca5ce270f6c6bcdf539581ce2ae4965afd5c5fe19106cd528ed6f379c68687a41310054ee751a73880b2c73e85d8@seed3.coredao.org:0?discport=35022",
+	"enode://e9a218f70debcb6a423d68f287c972c717606a70bfed278c2f7a876493d37bc535b05127abddeeca21941fc61497a6ca13387466c75a070050862ca6da11b0ca@seed1.coredao.org:0?discport=35022",
+}