mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 18:02:24 +00:00
whisper: fix libp2p connection
Caller gets an EOF very often, though
This commit is contained in:
parent
03d4401f47
commit
5628f88028
2 changed files with 36 additions and 13 deletions
|
|
@ -100,6 +100,7 @@ var (
|
||||||
argServerPoW = flag.Float64("mspow", whisper.DefaultMinimumPoW, "PoW requirement for Mail Server request")
|
argServerPoW = flag.Float64("mspow", whisper.DefaultMinimumPoW, "PoW requirement for Mail Server request")
|
||||||
|
|
||||||
argIP = flag.String("ip", "", "IP address and port of this node (e.g. 127.0.0.1:30303)")
|
argIP = flag.String("ip", "", "IP address and port of this node (e.g. 127.0.0.1:30303)")
|
||||||
|
argPort = flag.Uint("port", 0, "Port to be used byt the libp2p server")
|
||||||
argPub = flag.String("pub", "", "public key for asymmetric encryption")
|
argPub = flag.String("pub", "", "public key for asymmetric encryption")
|
||||||
argDBPath = flag.String("dbpath", "", "path to the server's DB directory")
|
argDBPath = flag.String("dbpath", "", "path to the server's DB directory")
|
||||||
argIDFile = flag.String("idfile", "", "file name with node id (private key)")
|
argIDFile = flag.String("idfile", "", "file name with node id (private key)")
|
||||||
|
|
@ -199,11 +200,22 @@ func initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if *bootstrapMode {
|
if *bootstrapMode {
|
||||||
|
if !*useLibP2P {
|
||||||
if len(*argIP) == 0 {
|
if len(*argIP) == 0 {
|
||||||
argIP = scanLineA("Please enter your IP and port (e.g. 127.0.0.1:30348): ")
|
argIP = scanLineA("Please enter your IP and port (e.g. 127.0.0.1:30348): ")
|
||||||
}
|
}
|
||||||
} else if *fileReader {
|
} else if *fileReader {
|
||||||
*bootstrapMode = true
|
*bootstrapMode = true
|
||||||
|
} else {
|
||||||
|
if *argPort == 0 {
|
||||||
|
for {
|
||||||
|
fmt.Print("Please enter the port to use: ")
|
||||||
|
if _, err := fmt.Scanf("%d", argPort); err != nil || *argPort >= 1024 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if *useLibP2P {
|
if *useLibP2P {
|
||||||
var libp2pbootstrap *string
|
var libp2pbootstrap *string
|
||||||
|
|
@ -293,10 +305,8 @@ func initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if *useLibP2P {
|
if *useLibP2P {
|
||||||
var port uint
|
fmt.Println("Using port", *argPort)
|
||||||
var a string
|
server, err = whisper.NewLibP2PWhisperServer(*argPort, shh)
|
||||||
fmt.Scanf(*argIP, "%s:%d", &a, &port)
|
|
||||||
server, err = whisper.NewLibP2PWhisperServer(port, shh)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Error starting the libp2p client: %v", err)
|
utils.Fatalf("Error starting the libp2p client: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -330,7 +340,7 @@ func startServer() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("my public key: %s \n", common.ToHex(crypto.FromECDSAPub(&asymKey.PublicKey)))
|
fmt.Printf("my public key: %s \n", common.ToHex(crypto.FromECDSAPub(&asymKey.PublicKey)))
|
||||||
fmt.Println(server.Enode())
|
fmt.Println("my address:", server.Enode())
|
||||||
|
|
||||||
if *bootstrapMode {
|
if *bootstrapMode {
|
||||||
configureNode()
|
configureNode()
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ import (
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/p2p"
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
libp2p "github.com/libp2p/go-libp2p"
|
|
||||||
crypto "github.com/libp2p/go-libp2p-crypto"
|
crypto "github.com/libp2p/go-libp2p-crypto"
|
||||||
host "github.com/libp2p/go-libp2p-host"
|
host "github.com/libp2p/go-libp2p-host"
|
||||||
inet "github.com/libp2p/go-libp2p-net"
|
inet "github.com/libp2p/go-libp2p-net"
|
||||||
|
|
@ -32,6 +31,8 @@ import (
|
||||||
ma "github.com/multiformats/go-multiaddr"
|
ma "github.com/multiformats/go-multiaddr"
|
||||||
set "gopkg.in/fatih/set.v0"
|
set "gopkg.in/fatih/set.v0"
|
||||||
pstore "github.com/libp2p/go-libp2p-peerstore"
|
pstore "github.com/libp2p/go-libp2p-peerstore"
|
||||||
|
swarm "github.com/libp2p/go-libp2p-swarm"
|
||||||
|
"github.com/libp2p/go-libp2p/p2p/host/basic"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LibP2PStream is a wrapper used to implement the MsgReadWriter
|
// LibP2PStream is a wrapper used to implement the MsgReadWriter
|
||||||
|
|
@ -269,7 +270,7 @@ func (server *LibP2PWhisperServer) AddPeer(addr ma.Multiaddr) *LibP2PPeer {
|
||||||
ipfsaddrpart, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", pid))
|
ipfsaddrpart, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", pid))
|
||||||
ipaddr := addr.Decapsulate(ipfsaddrpart)
|
ipaddr := addr.Decapsulate(ipfsaddrpart)
|
||||||
server.Host.Peerstore().AddAddr(peerid, ipaddr, pstore.PermanentAddrTTL)
|
server.Host.Peerstore().AddAddr(peerid, ipaddr, pstore.PermanentAddrTTL)
|
||||||
newPeer := &LibP2PPeer{id: peer.ID(pid)}
|
newPeer := &LibP2PPeer{id: peerid}
|
||||||
server.Peers = append(server.Peers, newPeer)
|
server.Peers = append(server.Peers, newPeer)
|
||||||
|
|
||||||
return newPeer
|
return newPeer
|
||||||
|
|
@ -278,16 +279,28 @@ func (server *LibP2PWhisperServer) AddPeer(addr ma.Multiaddr) *LibP2PPeer {
|
||||||
// NewLibP2PWhisperServer creates a new WhisperServer with
|
// NewLibP2PWhisperServer creates a new WhisperServer with
|
||||||
// a libp2p backend.
|
// a libp2p backend.
|
||||||
func NewLibP2PWhisperServer(port uint, whisper *Whisper) (WhisperServer, error) {
|
func NewLibP2PWhisperServer(port uint, whisper *Whisper) (WhisperServer, error) {
|
||||||
priv, _, err := crypto.GenerateKeyPair(crypto.Ed25519, 384)
|
priv, pub, err := crypto.GenerateKeyPair(crypto.Ed25519, 384)
|
||||||
opts := []libp2p.Option{
|
if err != nil {
|
||||||
libp2p.ListenAddrStrings(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port)),
|
return nil, fmt.Errorf("Error creating libp2p server: %v", err)
|
||||||
libp2p.Identity(priv),
|
}
|
||||||
|
nodeID, err := peer.IDFromPublicKey(pub)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Error creating libp2p server identity: %v pubkey=%v", err, pub)
|
||||||
|
}
|
||||||
|
serverAddr, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Error creating libp2p server address: %v port=%d", err, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
h, err := libp2p.New(context.Background(), opts...)
|
ps := pstore.NewPeerstore()
|
||||||
|
ps.AddPrivKey(nodeID, priv)
|
||||||
|
ps.AddPubKey(nodeID, pub)
|
||||||
|
|
||||||
|
network, err := swarm.NewNetwork(context.Background(), []ma.Multiaddr{serverAddr}, nodeID, ps, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Error setting up the libp2p network: %s", err)
|
return nil, fmt.Errorf("Error creating libp2p network: %v port=%d", err, port)
|
||||||
}
|
}
|
||||||
|
h := basichost.New(network)
|
||||||
|
|
||||||
server := &LibP2PWhisperServer{h, []*LibP2PPeer{}, whisper}
|
server := &LibP2PWhisperServer{h, []*LibP2PPeer{}, whisper}
|
||||||
return server, nil
|
return server, nil
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue