Skip to content

Commit 109e4a6

Browse files
authored
Fix potential ipv6 AnyAddress ending up in ENR (#3783)
1 parent c9311b7 commit 109e4a6

File tree

5 files changed

+29
-18
lines changed

5 files changed

+29
-18
lines changed

execution_chain/networking/eth1_discovery.nim

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,19 @@ func eligibleNode(proto: Eth1Discovery, rec: Record): bool =
117117
proc new*(
118118
_: type Eth1Discovery,
119119
privKey: PrivateKey,
120-
address: AddressV4,
120+
enrIp: Opt[IpAddress],
121+
enrTcpPort, enrUdpPort: Opt[Port],
121122
bootstrapNodes: BootstrapNodes,
122123
bindPort: Port,
123124
bindIp = IPv6_any(),
124125
rng = newRng(),
125126
compatibleForkId = CompatibleForkIdProc(nil)
126127
): Eth1Discovery =
128+
let address = enode.Address(
129+
ip: enrIp.valueOr(bindIp),
130+
tcpPort: enrTcpPort.valueOr(bindPort),
131+
udpPort: enrUdpPort.valueOr(bindPort),
132+
)
127133
Eth1Discovery(
128134
discv4: discoveryv4.newDiscoveryV4(
129135
privKey = privKey,
@@ -135,9 +141,9 @@ proc new*(
135141
),
136142
discv5: discoveryv5.newProtocol(
137143
privKey = privKey,
138-
enrIp = Opt.some(address.ip),
139-
enrTcpPort = Opt.some(address.tcpPort),
140-
enrUdpPort = Opt.some(address.udpPort),
144+
enrIp = enrIp,
145+
enrTcpPort = enrTcpPort,
146+
enrUdpPort = enrUdpPort,
141147
bootstrapRecords = bootstrapNodes.enrs,
142148
bindPort = bindPort,
143149
bindIp = bindIp,

execution_chain/networking/p2p.nim

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ type
3131

3232
proc newEthereumNode*(
3333
keys: KeyPair,
34-
address: Address,
34+
enrIp: Opt[IpAddress],
35+
enrTcpPort, enrUdpPort: Opt[Port],
3536
networkId: NetworkId,
3637
clientId = "nim-eth-p2p",
3738
minPeers = 10,
@@ -46,8 +47,13 @@ proc newEthereumNode*(
4647
raiseAssert "Cannot initialize RNG"
4748

4849
let
50+
address = enode.Address(
51+
ip: enrIp.valueOr(bindIp),
52+
tcpPort: enrTcpPort.valueOr(bindTcpPort),
53+
udpPort: enrUdpPort.valueOr(bindUdpPort),
54+
)
4955
discovery = Eth1Discovery.new(
50-
keys.seckey, address, bootstrapNodes, bindUdpPort, bindIp, rng, forkIdProcs.compatibleForkId)
56+
keys.seckey, enrIp, enrTcpPort, enrUdpPort, bootstrapNodes, bindUdpPort, bindIp, rng, forkIdProcs.compatibleForkId)
5157
node = EthereumNode(
5258
keys: keys,
5359
networkId: networkId,

execution_chain/nimbus_execution_client.nim

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,6 @@ proc setupP2P(nimbus: NimbusNode, conf: NimbusConf, com: CommonRef) =
105105
natId = NimbusName & " " & NimbusVersion
106106
(extIp, extTcpPort, extUdpPort) =
107107
setupAddress(conf.nat, conf.listenAddress, conf.tcpPort, conf.udpPort, natId)
108-
address = enode.Address(
109-
ip: extIp.valueOr(conf.listenAddress),
110-
tcpPort: extTcpPort.valueOr(conf.tcpPort),
111-
udpPort: extUdpPort.valueOr(conf.udpPort),
112-
)
113108

114109
bootstrapNodes = conf.getBootstrapNodes()
115110
fc = nimbus.fc
@@ -127,7 +122,7 @@ proc setupP2P(nimbus: NimbusNode, conf: NimbusConf, com: CommonRef) =
127122
)
128123

129124
nimbus.ethNode = newEthereumNode(
130-
keypair, address, conf.networkId, conf.agentString,
125+
keypair, extIp, extTcpPort, extUdpPort, conf.networkId, conf.agentString,
131126
minPeers = conf.maxPeers,
132127
bootstrapNodes = bootstrapNodes,
133128
bindUdpPort = conf.udpPort, bindTcpPort = conf.tcpPort,

tests/networking/p2p_test_helper.nim

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,17 @@ proc envConfig(): NimbusConf =
4646

4747
var nextPort = 30303
4848

49-
proc localAddress*(port: int): enode.Address =
50-
let port = Port(port)
51-
result = enode.Address(udpPort: port, tcpPort: port,
52-
ip: parseIpAddress("127.0.0.1"))
49+
func localAddress*(port: int): enode.Address =
50+
enode.Address(udpPort: Port(port), tcpPort: Port(port), ip: parseIpAddress("127.0.0.1"))
5351

5452
proc setupTestNode(rng: ref HmacDrbgContext): EthereumNode {.gcsafe.} =
5553
# Don't create new RNG every time in production code!
5654
let keys1 = KeyPair.random(rng[])
5755
var node = newEthereumNode(
58-
keys1, localAddress(nextPort),
56+
keys1,
57+
Opt.some(parseIpAddress("127.0.0.1")),
58+
Opt.some(Port(nextPort)),
59+
Opt.some(Port(nextPort)),
5960
networkId = 1.u256,
6061
bindUdpPort = Port(nextPort),
6162
bindTcpPort = Port(nextPort),

tests/test_helpers.nim

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,10 @@ proc setupEthNode*(
154154
ip: conf.listenAddress, tcpPort: conf.tcpPort, udpPort: conf.udpPort)
155155

156156
var node = newEthereumNode(
157-
keypair, srvAddress,
157+
keypair,
158+
Opt.some(conf.listenAddress),
159+
Opt.some(conf.tcpPort),
160+
Opt.some(conf.udpPort),
158161
conf.networkId,
159162
conf.agentString,
160163
bindUdpPort = conf.udpPort,

0 commit comments

Comments
 (0)