mirror of
https://github.com/logos-messaging/logos-messaging-go.git
synced 2026-01-10 18:03:07 +00:00
fix: invalid ENR generated for addresses
This commit is contained in:
parent
c91d666f35
commit
6bcd2ff6b3
@ -216,15 +216,6 @@ func Execute(options Options) {
|
||||
addPeers(wakuNode, options.LightPush.Nodes, lightpush.LightPushID_v20beta1)
|
||||
addPeers(wakuNode, options.Filter.Nodes, filter.FilterID_v20beta1)
|
||||
|
||||
if options.DNSDiscovery.Enable || options.DiscV5.Enable {
|
||||
for _, addr := range wakuNode.ListenAddresses() {
|
||||
ip, _ := addr.ValueForProtocol(multiaddr.P_IP4)
|
||||
// TODO: use enode.New
|
||||
enr := enode.NewV4(&prvKey.PublicKey, net.ParseIP(ip), hostAddr.Port, 0)
|
||||
log.Info("ENR: ", enr)
|
||||
}
|
||||
}
|
||||
|
||||
if err = wakuNode.Start(); err != nil {
|
||||
log.Fatal(fmt.Errorf("could not start waku node, %w", err))
|
||||
}
|
||||
|
||||
@ -186,6 +186,14 @@ func (w *WakuNode) checkForAddressChanges() {
|
||||
case <-first:
|
||||
for _, addr := range addrs {
|
||||
log.Info("Listening on ", addr)
|
||||
|
||||
// TODO: make this optional depending on DNS Disc being enabled
|
||||
enr, ip, err := utils.GetENRandIP(addr, w.opts.privKey)
|
||||
if err != nil {
|
||||
log.Error("could not obtain ENR record from multiaddress", err)
|
||||
} else {
|
||||
log.Info(fmt.Sprintf("ENR for IP %s: %s", ip, enr))
|
||||
}
|
||||
}
|
||||
case <-w.addressChangesSub.Out():
|
||||
newAddrs := w.ListenAddresses()
|
||||
@ -206,6 +214,14 @@ func (w *WakuNode) checkForAddressChanges() {
|
||||
for _, addr := range newAddrs {
|
||||
w.addrChan <- addr
|
||||
log.Warn("Listening on ", addr)
|
||||
|
||||
// TODO: make this optional depending on DNS Disc being enabled
|
||||
enr, ip, err := utils.GetENRandIP(addr, w.opts.privKey)
|
||||
if err != nil {
|
||||
log.Error("could not obtain ENR record from multiaddress", err)
|
||||
} else {
|
||||
log.Warn(fmt.Sprintf("ENR for IP %s: %s", ip, enr))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,15 +2,19 @@ package utils
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/ecdsa"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
ma "github.com/multiformats/go-multiaddr"
|
||||
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||
logging "github.com/ipfs/go-log"
|
||||
"github.com/libp2p/go-libp2p-core/host"
|
||||
"github.com/libp2p/go-libp2p-core/peer"
|
||||
@ -134,3 +138,35 @@ func EnodeToPeerInfo(node *enode.Node) (*peer.AddrInfo, error) {
|
||||
|
||||
return peer.AddrInfoFromP2pAddr(address)
|
||||
}
|
||||
|
||||
func GetENRandIP(addr ma.Multiaddr, privK *ecdsa.PrivateKey) (*enode.Node, *net.TCPAddr, error) {
|
||||
ip, err := addr.ValueForProtocol(ma.P_IP4)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
portStr, err := addr.ValueForProtocol(ma.P_TCP)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
port, err := strconv.Atoi(portStr)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
tcpAddr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", ip, port))
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
r := &enr.Record{}
|
||||
r.Set(enr.TCP(port))
|
||||
r.Set(enr.IP(net.ParseIP(ip)))
|
||||
|
||||
enode.SignV4(r, privK)
|
||||
|
||||
node, err := enode.New(enode.ValidSchemes, r)
|
||||
|
||||
return node, tcpAddr, err
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user