From 06bd7842c1d654ee9a4693171bd9dd4d0610bc1c Mon Sep 17 00:00:00 2001 From: Arnaud Date: Fri, 12 Jun 2026 17:14:18 +0400 Subject: [PATCH] Apply libp2p update --- config.nims | 2 +- storage/blockexchange/network/network.nim | 9 +++++- storage/logutils.nim | 4 ++- storage/storage.nim | 5 +-- tests/storage/node/helpers.nim | 1 - tests/storage/testdiscovery.nim | 2 +- tests/storage/testnatdetection.nim | 16 +++++----- tests/storage/testnatreaction.nim | 15 ++++----- tests/storage/testnatsimulation.nim | 38 +++++++++++------------ vendor/nim-libp2p | 2 +- 10 files changed, 53 insertions(+), 41 deletions(-) diff --git a/config.nims b/config.nims index 5b1ecb00..f369ca80 100644 --- a/config.nims +++ b/config.nims @@ -140,7 +140,7 @@ switch("warning", "ObservableStores:off") # Too many false positives for "Warning: method has lock level , but another method has 0 [LockLevel]" switch("warning", "LockLevel:off") -switch("define", "libp2p_pki_schemes=secp256k1") +switch("define", "libp2p_pki_schemes=secp256k1,rsa") #TODO this infects everything in this folder, ideally it would only # apply to storage.nim, but since storage.nims is used for other purpose # we can't use it. And storage.cfg doesn't work diff --git a/storage/blockexchange/network/network.nim b/storage/blockexchange/network/network.nim index 1d7ebafb..b99d8af7 100644 --- a/storage/blockexchange/network/network.nim +++ b/storage/blockexchange/network/network.nim @@ -314,8 +314,15 @@ proc new*( ## Create a new BlockExcNetwork instance ## + # libp2p now requires a non-nil handler at construction; the real one is set + # by self.init() below. This placeholder only exists until then. + proc placeholder( + conn: Connection, proto: string + ): Future[void] {.async: (raises: [CancelledError]).} = + discard + let self = lp_protocol.new( - BlockExcNetwork, @[Codec], nil, maxIncomingStreamsTotal = maxInflight + BlockExcNetwork, @[Codec], placeholder, maxIncomingStreamsTotal = maxInflight ) self.switch = switch self.getConn = connProvider diff --git a/storage/logutils.nim b/storage/logutils.nim index ebf41fd1..cbf41916 100644 --- a/storage/logutils.nim +++ b/storage/logutils.nim @@ -94,7 +94,7 @@ import std/typetraits import pkg/chronicles except toJson, `%` import json_serialization/writer as json_serialization_writer from pkg/chronos import TransportAddress -from pkg/libp2p import Cid, MultiAddress, `$` +from pkg/libp2p import Cid, MultiAddress, SignedPeerRecord, `$` import pkg/questionable import pkg/questionable/results import ./utils/json except formatIt # TODO: remove exception? @@ -248,6 +248,8 @@ formatIt(UInt256): $it formatIt(MultiAddress): $it +formatIt(SignedPeerRecord): + $it formatIt(LogFormat.textLines, array[32, byte]): it.short0xHexLog formatIt(LogFormat.json, array[32, byte]): diff --git a/storage/storage.nim b/storage/storage.nim index dfe0fb12..aa0ddc84 100644 --- a/storage/storage.nim +++ b/storage/storage.nim @@ -263,7 +263,8 @@ proc new*( var switchBuilder = SwitchBuilder .new() .withPrivateKey(privateKey) - .withAddresses(@[listenMultiAddr], enableWildcardResolver = true) + .withAddresses(@[listenMultiAddr]) + .withWildcardResolver() .withIdentifyPusher(false) .withRng(random.Rng.instance().libp2pRng) .withNoise() @@ -469,7 +470,7 @@ proc new*( info "Relay reservation updated", addresses = publicAddrs # relay addresses are for download traffic only, not DHT routing discovery.announceRelayAddrs(publicAddrs), - rng = random.Rng.instance(), + rng = random.Rng.instance().libp2pRng, ) relayService.setup(switch) diff --git a/tests/storage/node/helpers.nim b/tests/storage/node/helpers.nim index af4012b8..d5e9678f 100644 --- a/tests/storage/node/helpers.nim +++ b/tests/storage/node/helpers.nim @@ -7,7 +7,6 @@ import pkg/storage/chunker import pkg/storage/stores import ../../asynctest -import ../helpers/switchutils type CountingStore* = ref object of NetworkStore lookups*: Table[Cid, int] diff --git a/tests/storage/testdiscovery.nim b/tests/storage/testdiscovery.nim index 8178319b..f0cb5a3a 100644 --- a/tests/storage/testdiscovery.nim +++ b/tests/storage/testdiscovery.nim @@ -20,7 +20,7 @@ suite "Discovery - SPR record logic": udpPort = Port(8090) setup: - key = PrivateKey.random(Rng.instance()).get() + key = PrivateKey.random(Rng.instance().libp2pRng).get() disc = Discovery.new(key, announceAddrs = @[]) test "announceDirectAddrs sets the SPR with both TCP and UDP addresses": diff --git a/tests/storage/testnatdetection.nim b/tests/storage/testnatdetection.nim index 3cc01f34..e6c73d89 100644 --- a/tests/storage/testnatdetection.nim +++ b/tests/storage/testnatdetection.nim @@ -56,8 +56,8 @@ method sendDialRequest*( proc serverSwitch(): Switch = SwitchBuilder .new() - .withRng(Rng.instance()) - .withPrivateKey(PrivateKey.random(Rng.instance()).get()) + .withRng(Rng.instance().libp2pRng) + .withPrivateKey(PrivateKey.random(Rng.instance().libp2pRng).get()) .withAddresses(@[MultiAddress.init(listenAddr).get()]) .withTcpTransport(flags) .withNoise() @@ -77,8 +77,8 @@ asyncchecksuite "NAT detection - simulated NAT": let relayClient = relayClientModule.RelayClient.new() natNode = SwitchBuilder .new() - .withRng(Rng.instance()) - .withPrivateKey(PrivateKey.random(Rng.instance()).get()) + .withRng(Rng.instance().libp2pRng) + .withPrivateKey(PrivateKey.random(Rng.instance().libp2pRng).get()) .withAddresses(@[MultiAddress.init(listenAddr).get()]) .withNatTransport(router, flags) .withNoise() @@ -86,9 +86,11 @@ asyncchecksuite "NAT detection - simulated NAT": .withCircuitRelay(relayClient) .build() - relay = AutoRelayService.new(1, relayClient, nil, Rng.instance()) + relay = AutoRelayService.new(1, relayClient, nil, Rng.instance().libp2pRng) autorelayservice.setup(relay, natNode) - disc = Discovery.new(PrivateKey.random(Rng.instance()).get(), announceAddrs = @[]) + disc = Discovery.new( + PrivateKey.random(Rng.instance().libp2pRng).get(), announceAddrs = @[] + ) # nodes start in client mode until Reachable disc.protocol.clientMode = true @@ -203,7 +205,7 @@ asyncchecksuite "NAT detection - dial request candidates": test "autonat handles the observed dialable address": let mockClient = MockAutonatV2Client() let autonat = AutonatV2Service.new( - Rng.instance(), + Rng.instance().libp2pRng, mockClient, AutonatV2ServiceConfig.new( enableDialableCandidates = true, maxQueueSize = 1, minConfidence = 0.5 diff --git a/tests/storage/testnatreaction.nim b/tests/storage/testnatreaction.nim index 258f8606..6607c1a0 100644 --- a/tests/storage/testnatreaction.nim +++ b/tests/storage/testnatreaction.nim @@ -36,9 +36,10 @@ asyncchecksuite "NAT reaction - port mapping": var autoRelay: AutoRelayService setup: - autoRelay = - AutoRelayService.new(1, relayClientModule.RelayClient.new(), nil, Rng.instance()) - key = PrivateKey.random(Rng.instance()).get() + autoRelay = AutoRelayService.new( + 1, relayClientModule.RelayClient.new(), nil, Rng.instance().libp2pRng + ) + key = PrivateKey.random(Rng.instance().libp2pRng).get() disc = Discovery.new(key, announceAddrs = @[]) sw = newStandardSwitch() await sw.start() @@ -149,7 +150,7 @@ asyncchecksuite "NAT reaction - address announcing": var disc: Discovery setup: - key = PrivateKey.random(Rng.instance()).get() + key = PrivateKey.random(Rng.instance().libp2pRng).get() disc = Discovery.new(key, announceAddrs = @[]) sw = newStandardSwitch() await sw.start() @@ -179,7 +180,7 @@ asyncchecksuite "NAT reaction - address announcing": check disc.getSpr().data.seqNo == seqNo test "peerInfo observer announces addresses when Reachable": - let autonat = AutonatV2Service.new(Rng.instance()) + let autonat = AutonatV2Service.new(Rng.instance().libp2pRng) discard setupPeerInfoObserver( sw, autonat, disc, NatPortMapper(discoveryPort: discoveryPort) ) @@ -193,7 +194,7 @@ asyncchecksuite "NAT reaction - address announcing": check disc.announceAddrs == sw.peerInfo.addrs test "peerInfo observer announces the mapped external UDP port when a mapping is active": - let autonat = AutonatV2Service.new(Rng.instance()) + let autonat = AutonatV2Service.new(Rng.instance().libp2pRng) let mapper = NatPortMapper(discoveryPort: discoveryPort, activeUdpPort: some(Port(40001))) discard setupPeerInfoObserver(sw, autonat, disc, mapper) @@ -210,7 +211,7 @@ asyncchecksuite "NAT reaction - address announcing": sprAddrs test "peerInfo observer does not announce when the node is not Reachable": - let autonat = AutonatV2Service.new(Rng.instance()) + let autonat = AutonatV2Service.new(Rng.instance().libp2pRng) discard setupPeerInfoObserver( sw, autonat, disc, NatPortMapper(discoveryPort: discoveryPort) ) diff --git a/tests/storage/testnatsimulation.nim b/tests/storage/testnatsimulation.nim index 00f6652d..6e046526 100644 --- a/tests/storage/testnatsimulation.nim +++ b/tests/storage/testnatsimulation.nim @@ -4,7 +4,7 @@ import pkg/libp2p/wire import ./helpers import ../asynctest -import ../../storage/rng +import ../../storage/rng as storage_rng import ../../storage/nat import ./natsimulation @@ -22,22 +22,22 @@ proc cannotConnect(a, b: Switch): Future[bool] {.async.} = return false return not a.isConnected(b.peerInfo.peerId) -proc newSwitch(rng: Rng): Switch = +proc newSwitch(rng: storage_rng.Rng): Switch = SwitchBuilder .new() - .withRng(rng) - .withPrivateKey(PrivateKey.random(rng).get()) + .withRng(rng.libp2pRng) + .withPrivateKey(PrivateKey.random(rng.libp2pRng).get()) .withAddresses(@[MultiAddress.init(listenAddr).get()]) .withTcpTransport(flags) .withNoise() .withYamux() .build() -proc newNatSwitch(router: NatRouter, rng: Rng): Switch = +proc newNatSwitch(router: NatRouter, rng: storage_rng.Rng): Switch = SwitchBuilder .new() - .withRng(rng) - .withPrivateKey(PrivateKey.random(rng).get()) + .withRng(rng.libp2pRng) + .withPrivateKey(PrivateKey.random(rng.libp2pRng).get()) .withAddresses(@[MultiAddress.init(listenAddr).get()]) .withNatTransport(router, flags) .withNoise() @@ -49,8 +49,8 @@ asyncchecksuite "Nat transport - Endpoint-Independent Filtering": setup: let router = NatRouter.new(EndpointIndependent) - bootstrap = newSwitch(Rng.instance()) - natNode = newNatSwitch(router, Rng.instance()) + bootstrap = newSwitch(storage_rng.Rng.instance()) + natNode = newNatSwitch(router, storage_rng.Rng.instance()) await bootstrap.start() await natNode.start() @@ -67,9 +67,9 @@ asyncchecksuite "Nat transport - Address-Dependent Filtering": setup: let router = NatRouter.new(AddressDependent) - bootstrap = newSwitch(Rng.instance()) - thirdNode = newSwitch(Rng.instance()) - natNode = newNatSwitch(router, Rng.instance()) + bootstrap = newSwitch(storage_rng.Rng.instance()) + thirdNode = newSwitch(storage_rng.Rng.instance()) + natNode = newNatSwitch(router, storage_rng.Rng.instance()) await bootstrap.start() await thirdNode.start() await natNode.start() @@ -99,9 +99,9 @@ asyncchecksuite "Nat transport - Address-and-Port-Dependent Filtering": setup: let router = NatRouter.new(AddressAndPortDependent) - bootstrap = newSwitch(Rng.instance()) - thirdNode = newSwitch(Rng.instance()) - natNode = newNatSwitch(router, Rng.instance()) + bootstrap = newSwitch(storage_rng.Rng.instance()) + thirdNode = newSwitch(storage_rng.Rng.instance()) + natNode = newNatSwitch(router, storage_rng.Rng.instance()) await bootstrap.start() await thirdNode.start() await natNode.start() @@ -131,8 +131,8 @@ asyncchecksuite "Nat transport - Double NAT": setup: router = NatRouter.new(DoubleNat) - bootstrap = newSwitch(Rng.instance()) - natNode = newNatSwitch(router, Rng.instance()) + bootstrap = newSwitch(storage_rng.Rng.instance()) + natNode = newNatSwitch(router, storage_rng.Rng.instance()) await bootstrap.start() await natNode.start() @@ -154,8 +154,8 @@ asyncchecksuite "Nat transport - Port Mapping": setup: router = NatRouter.new(AddressAndPortDependent) - bootstrap = newSwitch(Rng.instance()) - natNode = newNatSwitch(router, Rng.instance()) + bootstrap = newSwitch(storage_rng.Rng.instance()) + natNode = newNatSwitch(router, storage_rng.Rng.instance()) await bootstrap.start() await natNode.start() diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index 2be4e5ed..1bd3b986 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit 2be4e5edb39c113be7c293d53ec17c6cadbb9640 +Subproject commit 1bd3b986c82ab37a509fc84ca0ad7ea67a705a1b