Skip to content
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
<PackageVersion Include="NUnit.Analyzers" Version="4.11.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageVersion Include="Open.NAT.Core" Version="2.1.0.5" />
<PackageVersion Include="PierTwo.Lantern.Discv5.WireProtocol" Version="1.0.0-preview.6" />
<PackageVersion Include="PierTwo.Lantern.Discv5.WireProtocol" Version="1.0.0-preview.7" />
<PackageVersion Include="Polly" Version="8.6.5" />
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
<PackageVersion Include="Prometheus.Client.MetricPusher" Version="3.3.0" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
// SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System.Diagnostics.CodeAnalysis;
Expand Down Expand Up @@ -205,7 +205,7 @@ public async Task StartAsync()

public async IAsyncEnumerable<Node> DiscoverNodes([EnumeratorCancellation] CancellationToken token)
{
Channel<Node> ch = Channel.CreateBounded<Node>(1);
Channel<Node> discoveredNodesChannel = Channel.CreateBounded<Node>(1);

async Task DiscoverAsync(IEnumerable<IEnr> startingNode, byte[] nodeId)
{
Expand Down Expand Up @@ -243,8 +243,10 @@ static int[] GetDistances(byte[] srcNodeId, byte[] destNodeId)

if (TryGetNodeFromEnr(newEntry, out Node? node2))
{
await ch.Writer.WriteAsync(node2!, token);
discoveredNodesChannel.Writer.TryWrite(node2!);

if (_logger.IsDebug) _logger.Debug($"A node discovered via discv5: {newEntry} = {node2}.");

_discoveryReport?.NodeFound();
}

Expand All @@ -253,13 +255,11 @@ static int[] GetDistances(byte[] srcNodeId, byte[] destNodeId)
continue;
}

IEnumerable<IEnr>? newNodesFound = (await _discv5Protocol.SendFindNodeAsync(newEntry, GetDistances(newEntry.NodeId, nodeId)))?.Where(x => !checkedNodes.Contains(x));

if (newNodesFound is not null)
foreach (IEnr newEnr in await _discv5Protocol.SendFindNodeAsync(newEntry, GetDistances(newEntry.NodeId, nodeId)) ?? [])
{
foreach (IEnr? node in newNodesFound)
if (!checkedNodes.Contains(newEnr))
{
nodesToCheck.Enqueue(node);
nodesToCheck.Enqueue(newEnr);
}
}
}
Expand All @@ -272,16 +272,16 @@ static int[] GetDistances(byte[] srcNodeId, byte[] destNodeId)

Task discoverTask = Task.Run(async () =>
{
byte[] randomNodeId = new byte[32];
while (!token.IsCancellationRequested)
{
try
{
List<Task> discoverTasks = new List<Task>();
List<Task> discoverTasks = [];
discoverTasks.Add(DiscoverAsync(GetStartingNodes(), _discv5Protocol.SelfEnr.NodeId));

for (int i = 0; i < RandomNodesToLookupCount; i++)
{
byte[] randomNodeId = new byte[32];
random.NextBytes(randomNodeId);
discoverTasks.Add(DiscoverAsync(GetStartingNodes(), randomNodeId));
}
Expand All @@ -293,11 +293,11 @@ static int[] GetDistances(byte[] srcNodeId, byte[] destNodeId)
if (_logger.IsError) _logger.Error($"Discovery via custom random walk failed.", ex);
}
}
});
}, token);

try
{
await foreach (Node node in ch.Reader.ReadAllAsync(token))
await foreach (Node node in discoveredNodesChannel.Reader.ReadAllAsync(token))
{
yield return node;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
// SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System.Net;
Expand Down Expand Up @@ -36,9 +36,12 @@ public NettyDiscoveryV5Handler(ILogManager loggerManager) : base(loggerManager)

protected override void ChannelRead0(IChannelHandlerContext ctx, DatagramPacket msg)
{
var udpPacket = new UdpReceiveResult(msg.Content.ReadAllBytesAsArray(), (IPEndPoint)msg.Sender);
if (!_inboundQueue.Writer.TryWrite(udpPacket) && _logger.IsWarn)
UdpReceiveResult udpPacket = new(msg.Content.ReadAllBytesAsArray(), (IPEndPoint)msg.Sender);

if (!_inboundQueue.Writer.TryWrite(udpPacket) && _logger.IsDebug)
{
_logger.Warn("Skipping discovery v5 message as inbound buffer is full");
}
}

public async Task SendAsync(byte[] data, IPEndPoint destination)
Expand All @@ -53,7 +56,7 @@ public async Task SendAsync(byte[] data, IPEndPoint destination)
}
catch (SocketException exception)
{
if (_logger.IsError) _logger.Error("Error sending data", exception);
if (_logger.IsDebug) _logger.Error("Error sending data", exception);
throw;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@
"Optimism": {
"SequencerUrl": "https://sepolia-sequencer.base.org"
}
}
}
22 changes: 11 additions & 11 deletions src/Nethermind/Nethermind.Runner/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -510,20 +510,20 @@
},
"PierTwo.Lantern.Discv5.Enr": {
"type": "Transitive",
"resolved": "1.0.0-preview.6",
"contentHash": "rHuVBANEsOdf+5p1uU35mrdJfb+2z9EtDU5LeHKWDWx5nfGMRK4LtcrbfvDnrdsTLQbxmV88PoBuS23FMLrpYQ==",
"resolved": "1.0.0-preview.7",
"contentHash": "oNF8cPIbYt+8xWoCqPCDfKOEsxhlFUWEXmoV45/XTKipU5ZqvmdTsESCv0o97TP2sNZaZrFrvpovf7aNk3BUKw==",
"dependencies": {
"Keccak256": "1.0.0",
"Multiformats.Base": "2.0.2",
"Multiformats.Hash": "1.5.0",
"NBitcoin.Secp256k1": "3.1.5",
"PierTwo.Lantern.Discv5.Rlp": "1.0.0-preview.6"
"PierTwo.Lantern.Discv5.Rlp": "1.0.0-preview.7"
}
},
"PierTwo.Lantern.Discv5.Rlp": {
"type": "Transitive",
"resolved": "1.0.0-preview.6",
"contentHash": "X1mOhKZytX60uZwh9aCex0BVidN0hVlf5jKZsufacWpfsN/yMstc/fh3aRM9JWm8x7PQVeY300JXVFhDk4roqA=="
"resolved": "1.0.0-preview.7",
"contentHash": "tAwonG4x8SWFBxd06JvzYNo0xvTsDoM9xfk2tnwIcFzCvY7PORvpOiy9AQcyjqomFQmCNqF4ezwZoRZJV32iQg=="
},
"Polly.Core": {
"type": "Transitive",
Expand Down Expand Up @@ -1002,7 +1002,7 @@
"Nethermind.Facade": "[1.37.0-unstable, )",
"Nethermind.Network": "[1.37.0-unstable, )",
"Nethermind.Network.Enr": "[1.37.0-unstable, )",
"PierTwo.Lantern.Discv5.WireProtocol": "[1.0.0-preview.6, )"
"PierTwo.Lantern.Discv5.WireProtocol": "[1.0.0-preview.7, )"
}
},
"nethermind.network.dns": {
Expand Down Expand Up @@ -1519,14 +1519,14 @@
},
"PierTwo.Lantern.Discv5.WireProtocol": {
"type": "CentralTransitive",
"requested": "[1.0.0-preview.6, )",
"resolved": "1.0.0-preview.6",
"contentHash": "WjVYiDxyZ3z00kuJJXuWJwRqkWfTrZF1v7qWz4mMASRP6AEhDCF4jMdCuAWkH1uPj00kkluONOc426Z//FcjDw==",
"requested": "[1.0.0-preview.7, )",
"resolved": "1.0.0-preview.7",
"contentHash": "wfa8Drf8r8Ty8r6cebobxANFmM2h0ckA/fWIKkQCnC+Af91IKFTAtiVhtu5oCjRxY21MLuWxqObV8r+JkKSYrg==",
"dependencies": {
"BouncyCastle.Cryptography": "2.4.0",
"NBitcoin.Secp256k1": "3.1.5",
"PierTwo.Lantern.Discv5.Enr": "1.0.0-preview.6",
"PierTwo.Lantern.Discv5.Rlp": "1.0.0-preview.6"
"PierTwo.Lantern.Discv5.Enr": "1.0.0-preview.7",
"PierTwo.Lantern.Discv5.Rlp": "1.0.0-preview.7"
}
},
"Polly": {
Expand Down
Loading