mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 09:53:48 +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")
|
||||
|
||||
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")
|
||||
argDBPath = flag.String("dbpath", "", "path to the server's DB directory")
|
||||
argIDFile = flag.String("idfile", "", "file name with node id (private key)")
|
||||
|
|
@ -199,11 +200,22 @@ func initialize() {
|
|||
}
|
||||
|
||||
if *bootstrapMode {
|
||||
if !*useLibP2P {
|
||||
if len(*argIP) == 0 {
|
||||
argIP = scanLineA("Please enter your IP and port (e.g. 127.0.0.1:30348): ")
|
||||
}
|
||||
} else if *fileReader {
|
||||
*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 {
|
||||
if *useLibP2P {
|
||||
var libp2pbootstrap *string
|
||||
|
|
@ -293,10 +305,8 @@ func initialize() {
|
|||
}
|
||||
|
||||
if *useLibP2P {
|
||||
var port uint
|
||||
var a string
|
||||
fmt.Scanf(*argIP, "%s:%d", &a, &port)
|
||||
server, err = whisper.NewLibP2PWhisperServer(port, shh)
|
||||
fmt.Println("Using port", *argPort)
|
||||
server, err = whisper.NewLibP2PWhisperServer(*argPort, shh)
|
||||
if err != nil {
|
||||
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.Println(server.Enode())
|
||||
fmt.Println("my address:", server.Enode())
|
||||
|
||||
if *bootstrapMode {
|
||||
configureNode()
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import (
|
|||
"math"
|
||||
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
libp2p "github.com/libp2p/go-libp2p"
|
||||
crypto "github.com/libp2p/go-libp2p-crypto"
|
||||
host "github.com/libp2p/go-libp2p-host"
|
||||
inet "github.com/libp2p/go-libp2p-net"
|
||||
|
|
@ -32,6 +31,8 @@ import (
|
|||
ma "github.com/multiformats/go-multiaddr"
|
||||
set "gopkg.in/fatih/set.v0"
|
||||
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
|
||||
|
|
@ -269,7 +270,7 @@ func (server *LibP2PWhisperServer) AddPeer(addr ma.Multiaddr) *LibP2PPeer {
|
|||
ipfsaddrpart, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", pid))
|
||||
ipaddr := addr.Decapsulate(ipfsaddrpart)
|
||||
server.Host.Peerstore().AddAddr(peerid, ipaddr, pstore.PermanentAddrTTL)
|
||||
newPeer := &LibP2PPeer{id: peer.ID(pid)}
|
||||
newPeer := &LibP2PPeer{id: peerid}
|
||||
server.Peers = append(server.Peers, newPeer)
|
||||
|
||||
return newPeer
|
||||
|
|
@ -278,16 +279,28 @@ func (server *LibP2PWhisperServer) AddPeer(addr ma.Multiaddr) *LibP2PPeer {
|
|||
// NewLibP2PWhisperServer creates a new WhisperServer with
|
||||
// a libp2p backend.
|
||||
func NewLibP2PWhisperServer(port uint, whisper *Whisper) (WhisperServer, error) {
|
||||
priv, _, err := crypto.GenerateKeyPair(crypto.Ed25519, 384)
|
||||
opts := []libp2p.Option{
|
||||
libp2p.ListenAddrStrings(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port)),
|
||||
libp2p.Identity(priv),
|
||||
priv, pub, err := crypto.GenerateKeyPair(crypto.Ed25519, 384)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Error creating libp2p server: %v", err)
|
||||
}
|
||||
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 {
|
||||
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}
|
||||
return server, nil
|
||||
|
|
|
|||
Loading…
Reference in a new issue