瀏覽代碼

本地节点准备完成,准备实现server核心

skyfffire 2 年之前
父節點
當前提交
2d799b3427
共有 4 個文件被更改,包括 42 次插入43 次删除
  1. 29 0
      p2p/caps.go
  2. 0 20
      p2p/protocol.go
  3. 13 12
      p2p/server.go
  4. 0 11
      params/caps.go

+ 29 - 0
p2p/caps.go

@@ -0,0 +1,29 @@
+package p2p
+
+import "fmt"
+
+var OurCaps = []Cap{
+	{Name: "diff", Version: 1},
+	{Name: "snap", Version: 1},
+	{Name: "eth", Version: 65},
+	{Name: "eth", Version: 66},
+	{Name: "eth", Version: 67},
+}
+
+// Cap is the structure of a peer capability.
+type Cap struct {
+	Name    string
+	Version uint
+}
+
+func (cap Cap) String() string {
+	return fmt.Sprintf("%s/%d", cap.Name, cap.Version)
+}
+
+type capsByNameAndVersion []Cap
+
+func (cs capsByNameAndVersion) Len() int      { return len(cs) }
+func (cs capsByNameAndVersion) Swap(i, j int) { cs[i], cs[j] = cs[j], cs[i] }
+func (cs capsByNameAndVersion) Less(i, j int) bool {
+	return cs[i].Name < cs[j].Name || (cs[i].Name == cs[j].Name && cs[i].Version < cs[j].Version)
+}

+ 0 - 20
p2p/protocol.go

@@ -17,8 +17,6 @@
 package p2p
 
 import (
-	"fmt"
-
 	"blockchain-go/p2p/enode"
 	"blockchain-go/p2p/enr"
 )
@@ -66,21 +64,3 @@ type Protocol struct {
 func (p Protocol) cap() Cap {
 	return Cap{p.Name, p.Version}
 }
-
-// Cap is the structure of a peer capability.
-type Cap struct {
-	Name    string
-	Version uint
-}
-
-func (cap Cap) String() string {
-	return fmt.Sprintf("%s/%d", cap.Name, cap.Version)
-}
-
-type capsByNameAndVersion []Cap
-
-func (cs capsByNameAndVersion) Len() int      { return len(cs) }
-func (cs capsByNameAndVersion) Swap(i, j int) { cs[i], cs[j] = cs[j], cs[i] }
-func (cs capsByNameAndVersion) Less(i, j int) bool {
-	return cs[i].Name < cs[j].Name || (cs[i].Name == cs[j].Name && cs[i].Version < cs[j].Version)
-}

+ 13 - 12
p2p/server.go

@@ -101,7 +101,7 @@ func (server *Server) Start() (err error) {
 func (server *Server) run() {
 	server.loopWG.Add(1)
 
-	fmt.Printf("Started P2P networking, self: %v.", server.localnode.Node().URLv4())
+	fmt.Printf("Started P2P networking, self: %v.\n", server.localnode.Node().URLv4())
 	defer server.loopWG.Done()
 	defer server.discmix.Close()
 	defer server.dialsched.stop()
@@ -121,7 +121,16 @@ running:
 
 // 本地协议
 func (server *Server) setupCaps() (err error) {
-	for _, capability := range params.Caps {
+	// 创建握手器
+	publicKey := crypto.FromECDSAPub(&server.PrivateKey.PublicKey)
+	server.ourHandshake = &protoHandshake{
+		Version: baseProtocolVersion,
+		Name:    server.Name,
+		ID:      publicKey[1:],
+	}
+
+	// 配置握手器
+	for _, capability := range OurCaps {
 		server.ourHandshake.Caps = append(server.ourHandshake.Caps, capability)
 	}
 	sort.Sort(capsByNameAndVersion(server.ourHandshake.Caps))
@@ -152,7 +161,7 @@ func (server *Server) setupDiscovery() (err error) {
 	}
 
 	realAddr := conn.LocalAddr().(*net.UDPAddr)
-	fmt.Printf("UDP listener up, addr: %v.", realAddr)
+	fmt.Printf("UDP listener up, addr: %v.\n", realAddr)
 
 	if server.NAT != nil {
 		if !realAddr.IP.IsLoopback() {
@@ -246,14 +255,6 @@ func (server *Server) maxDialedConns() (limit int) {
 
 // 配置本地节点
 func (server *Server) setupLocalNode() (err error) {
-	// 创建握手所需对象
-	publicKey := crypto.FromECDSAPub(&server.PrivateKey.PublicKey)
-	server.ourHandshake = &protoHandshake{
-		Version: baseProtocolVersion,
-		Name:    server.Name,
-		ID:      publicKey[1:],
-	}
-
 	// 创建本地节点
 	server.localnode = enode.NewLocalNode(server.PrivateKey)
 	server.localnode.SetFallbackIP(net.IP{127, 0, 0, 1})
@@ -296,7 +297,7 @@ func (server *Server) setupListening() (err error) {
 }
 
 func (server *Server) listenLoop() {
-	fmt.Printf("TCP Listener up, addr: %v.", server.listener.Addr())
+	fmt.Printf("TCP Listener up, addr: %v.\n", server.listener.Addr())
 
 	tokens := defaultMaxPendingPeers
 	slots := make(chan struct{}, tokens)

+ 0 - 11
params/caps.go

@@ -1,11 +0,0 @@
-package params
-
-import "blockchain-go/p2p"
-
-var Caps = []p2p.Cap{
-	{Name: "diff", Version: 1},
-	{Name: "snap", Version: 1},
-	{Name: "eth", Version: 65},
-	{Name: "eth", Version: 66},
-	{Name: "eth", Version: 67},
-}