cmd/swarm, p2p, swarm: Enable ENR in binary/execadapter (#19309)
* cmd/swarm, p2p, swarm: Enable ENR in binary/execadapter * cmd/p2p/swarm: Remove comments + config.Enode nomarshal * p2p/simulations: Remove superfluous error check * p2p/simulation: Move init enode comment * swarm/api: Check error in config test * swarm, p2p/simulations, cmd/swarm: Use nodekey in binary record sign * cmd/swarm: Make nodekey available for swarm api config
This commit is contained in:
@ -92,6 +92,10 @@ func (e *ExecAdapter) NewNode(config *NodeConfig) (Node, error) {
|
||||
return nil, fmt.Errorf("error creating node directory: %s", err)
|
||||
}
|
||||
|
||||
err := config.initDummyEnode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// generate the config
|
||||
conf := &execNodeConfig{
|
||||
Stack: node.DefaultConfig,
|
||||
@ -407,6 +411,14 @@ func startExecNodeStack() (*node.Node, error) {
|
||||
if err := json.Unmarshal([]byte(confEnv), &conf); err != nil {
|
||||
return nil, fmt.Errorf("error decoding %s: %v", envNodeConfig, err)
|
||||
}
|
||||
// TODO verify that ListenAddr will contain the correct tcp addr
|
||||
// if we should start using exec adapters with other host than local
|
||||
nodeTcpConn, err := net.ResolveTCPAddr("tcp", conf.Stack.P2P.ListenAddr)
|
||||
if err != nil {
|
||||
conf.Node.initDummyEnode()
|
||||
} else {
|
||||
conf.Node.initEnode(nodeTcpConn.IP, nodeTcpConn.Port, nodeTcpConn.Port)
|
||||
}
|
||||
conf.Stack.P2P.PrivateKey = conf.Node.PrivateKey
|
||||
conf.Stack.Logger = log.New("node.id", conf.Node.ID.String())
|
||||
|
||||
|
@ -28,7 +28,6 @@ import (
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||
"github.com/ethereum/go-ethereum/p2p/simulations/pipes"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
)
|
||||
@ -93,23 +92,10 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// dialer in simulations based on ENR records
|
||||
// doesn't work unless we explicitly set localhost record
|
||||
ip := enr.IP(net.IPv4(127, 0, 0, 1))
|
||||
config.Record.Set(&ip)
|
||||
tcpPort := enr.TCP(0)
|
||||
config.Record.Set(&tcpPort)
|
||||
|
||||
err := enode.SignV4(&config.Record, config.PrivateKey)
|
||||
err := config.initDummyEnode()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to generate ENR: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
nod, err := enode.New(enode.V4ID{}, &config.Record)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to create enode: %v", err)
|
||||
}
|
||||
log.Trace("simnode new", "record", config.Record)
|
||||
config.node = nod
|
||||
|
||||
n, err := node.New(&node.Config{
|
||||
P2P: p2p.Config{
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
|
||||
"github.com/docker/docker/pkg/reexec"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
@ -265,3 +266,30 @@ func RegisterServices(services Services) {
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
// adds the host part to the configuration's ENR, signs it
|
||||
// creates and the corresponding enode object to the configuration
|
||||
func (n *NodeConfig) initEnode(ip net.IP, tcpport int, udpport int) error {
|
||||
enrIp := enr.IP(ip)
|
||||
n.Record.Set(&enrIp)
|
||||
enrTcpPort := enr.TCP(tcpport)
|
||||
n.Record.Set(&enrTcpPort)
|
||||
enrUdpPort := enr.UDP(tcpport)
|
||||
n.Record.Set(&enrUdpPort)
|
||||
|
||||
err := enode.SignV4(&n.Record, n.PrivateKey)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to generate ENR: %v", err)
|
||||
}
|
||||
nod, err := enode.New(enode.V4ID{}, &n.Record)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to create enode: %v", err)
|
||||
}
|
||||
log.Trace("simnode new", "record", n.Record)
|
||||
n.node = nod
|
||||
return nil
|
||||
}
|
||||
|
||||
func (n *NodeConfig) initDummyEnode() error {
|
||||
return n.initEnode(net.IPv4(127, 0, 0, 1), 0, 0)
|
||||
}
|
||||
|
Reference in New Issue
Block a user