diff --git a/.gitmodules b/.gitmodules index e6214d80..aa74a5bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -183,16 +183,12 @@ [submodule "vendor/nph"] path = vendor/nph url = https://github.com/arnetheduck/nph.git -[submodule "vendor/nim-quic"] - path = vendor/nim-quic - url = https://github.com/vacp2p/nim-quic.git - ignore = untracked - branch = main -[submodule "vendor/nim-ngtcp2"] - path = vendor/nim-ngtcp2 - url = https://github.com/vacp2p/nim-ngtcp2.git - ignore = untracked - branch = main [submodule "vendor/nim-merkletree"] path = vendor/nim-merkletree url = https://github.com/logos-storage/nim-merkletree +[submodule "vendor/nim-boringssl"] + path = vendor/nim-boringssl + url = https://github.com/vacp2p/nim-boringssl.git +[submodule "vendor/nim-lsquic"] + path = vendor/nim-lsquic + url = https://github.com/vacp2p/nim-lsquic 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/peers/peercontext.nim b/storage/blockexchange/peers/peercontext.nim index 9e7c80f6..959809ba 100644 --- a/storage/blockexchange/peers/peercontext.nim +++ b/storage/blockexchange/peers/peercontext.nim @@ -8,6 +8,7 @@ ## those terms. import std/math +import std/options import pkg/libp2p import pkg/chronos diff --git a/storage/conf.nim b/storage/conf.nim index a6d0b571..49f84f08 100644 --- a/storage/conf.nim +++ b/storage/conf.nim @@ -30,7 +30,7 @@ import pkg/toml_serialization import pkg/metrics import pkg/metrics/chronos_httpserver import pkg/stew/byteutils -import pkg/libp2p +import pkg/libp2p except NATConfig import pkg/questionable import pkg/questionable/results import pkg/stew/base64 diff --git a/storage/manifest/coders.nim b/storage/manifest/coders.nim index 80a9879e..8f0ae128 100644 --- a/storage/manifest/coders.nim +++ b/storage/manifest/coders.nim @@ -14,6 +14,7 @@ import times {.push raises: [].} import std/tables +import std/options import pkg/libp2p import pkg/questionable diff --git a/storage/rng.nim b/storage/rng.nim index 3b46f963..1a83f71a 100644 --- a/storage/rng.nim +++ b/storage/rng.nim @@ -9,11 +9,10 @@ import std/sugar import pkg/libp2p/crypto/crypto -import pkg/bearssl/rand -type - RngSampleError = object of CatchableError - Rng* = ref HmacDrbgContext +export crypto.Rng, crypto.newRng + +type RngSampleError = object of CatchableError var rng {.threadvar.}: Rng @@ -31,7 +30,7 @@ proc rand*(rng: Rng, max: Natural): int = return 0 while true: - let x = rng[].generate(uint64) + let x = rng.generate(uint64) if x < randMax - (randMax mod (uint64(max) + 1'u64)): # against modulo bias return int(x mod (uint64(max) + 1'u64)) diff --git a/storage/stores/networkstore.nim b/storage/stores/networkstore.nim index 8c781f6b..19faacd5 100644 --- a/storage/stores/networkstore.nim +++ b/storage/stores/networkstore.nim @@ -9,6 +9,7 @@ {.push raises: [].} +import std/options import pkg/chronos import pkg/libp2p import pkg/questionable/results diff --git a/storage/utils/keyutils.nim b/storage/utils/keyutils.nim index 372777c2..8929c83f 100644 --- a/storage/utils/keyutils.nim +++ b/storage/utils/keyutils.nim @@ -27,7 +27,7 @@ proc setupKey*(path: string): ?!PrivateKey = if not path.fileAccessible({AccessFlags.Find}): info "Creating a private key and saving it" let - res = ?PrivateKey.random(Rng.instance()[]).mapFailure(StorageKeyError) + res = ?PrivateKey.random(Rng.instance()).mapFailure(StorageKeyError) bytes = ?res.getBytes().mapFailure(StorageKeyError) ?path.secureWriteFile(bytes).mapFailure(StorageKeyError) diff --git a/tests/storage/blockexchange/discovery/testdiscovery.nim b/tests/storage/blockexchange/discovery/testdiscovery.nim index d467361e..66d1941e 100644 --- a/tests/storage/blockexchange/discovery/testdiscovery.nim +++ b/tests/storage/blockexchange/discovery/testdiscovery.nim @@ -1,6 +1,7 @@ import std/sequtils import std/sugar import std/tables +import std/options import pkg/chronos diff --git a/tests/storage/blockexchange/testnetwork.nim b/tests/storage/blockexchange/testnetwork.nim index dd035a44..32316ae3 100644 --- a/tests/storage/blockexchange/testnetwork.nim +++ b/tests/storage/blockexchange/testnetwork.nim @@ -1,3 +1,4 @@ +import std/importutils import std/[sequtils, tables] import pkg/chronos @@ -12,10 +13,12 @@ import ../../asynctest import ../examples import ../helpers +privateAccess(BlockExcNetwork) + asyncchecksuite "Network - Handlers": let rng = Rng.instance() - seckey = PrivateKey.random(rng[]).tryGet() + seckey = PrivateKey.random(rng).tryGet() peerId = PeerId.init(seckey.getPublicKey().tryGet()).tryGet() chunker = RandomChunker.new(Rng.instance(), size = 1024, chunkSize = 256) @@ -185,7 +188,7 @@ asyncchecksuite "Network - Test Limits": switch1 = newStandardSwitch() switch2 = newStandardSwitch() - network1 = BlockExcNetwork.new(switch = switch1, maxInflight = 0) + network1 = BlockExcNetwork.new(switch = switch1, maxInflight = 1) switch1.mount(network1) network2 = BlockExcNetwork.new(switch = switch2) @@ -205,6 +208,8 @@ asyncchecksuite "Network - Test Limits": ): Future[void] {.async: (raises: []).} = check false + await network1.inflightSema.acquire() + let fut = network1.send(switch2.peerInfo.peerId, Message()) await sleepAsync(100.millis) diff --git a/tests/storage/examples.nim b/tests/storage/examples.nim index 4b171b82..c948dc1f 100644 --- a/tests/storage/examples.nim +++ b/tests/storage/examples.nim @@ -16,7 +16,7 @@ proc example*(_: type bt.Block, size: int = 4096): bt.Block = bt.Block.new(bytes).tryGet() proc example*(_: type PeerId): PeerId = - let key = PrivateKey.random(Rng.instance[]).get + let key = PrivateKey.random(Rng.instance).get PeerId.init(key.getPublicKey().get).get proc example*(_: type PeerContext): PeerContext = diff --git a/tests/storage/helpers.nim b/tests/storage/helpers.nim index 423d2b69..f1a3ef2a 100644 --- a/tests/storage/helpers.nim +++ b/tests/storage/helpers.nim @@ -14,6 +14,7 @@ import pkg/storage/utils import ./examples import ./helpers/nodeutils +import ./helpers/switchutils import ./helpers/datasetutils import ./helpers/randomchunker import ./helpers/mockchunker @@ -22,8 +23,8 @@ import ./helpers/always import ../checktest export - randomchunker, nodeutils, datasetutils, mockdiscovery, mockchunker, always, checktest, - manifest + randomchunker, nodeutils, switchutils, datasetutils, mockdiscovery, mockchunker, + always, checktest, manifest export libp2p except setup, eventually diff --git a/tests/storage/helpers/nodeutils.nim b/tests/storage/helpers/nodeutils.nim index 328f1e6b..1d76c564 100644 --- a/tests/storage/helpers/nodeutils.nim +++ b/tests/storage/helpers/nodeutils.nim @@ -6,6 +6,7 @@ import pkg/libp2p import pkg/libp2p/errors import pkg/codexdht/discv5/routing_table +import ./switchutils import pkg/storage/discovery import pkg/storage/stores import pkg/storage/blocktype as bt @@ -226,7 +227,7 @@ proc generateNodes*( if config.enableBootstrap: waitFor switch.peerInfo.update() let (announceAddrs, discoveryAddrs) = nattedAddress( - NatConfig(hasExtIp: false, nat: NatNone), + nat.NatConfig(hasExtIp: false, nat: NatNone), switch.peerInfo.addrs, bindPort.Port, ) diff --git a/tests/storage/helpers/switchutils.nim b/tests/storage/helpers/switchutils.nim new file mode 100644 index 00000000..f66c6876 --- /dev/null +++ b/tests/storage/helpers/switchutils.nim @@ -0,0 +1,27 @@ +import pkg/libp2p +import pkg/libp2p/errors + +import pkg/storage/rng + +proc newStandardSwitch*( + addrs: MultiAddress | seq[MultiAddress] = newSeq[MultiAddress](), + transportFlags: set[ServerFlags] = {}, + sendSignedPeerRecord = false, +): Switch {.raises: [LPError].} = + var addrs = + when addrs is MultiAddress: + @[addrs] + else: + addrs + if addrs.len == 0: + addrs = @[MultiAddress.init("/ip4/127.0.0.1/tcp/0").expect("invalid multiaddress")] + + SwitchBuilder + .new() + .withRng(Rng.instance()) + .withSignedPeerRecord(sendSignedPeerRecord) + .withAddresses(addrs) + .withTcpTransport(transportFlags) + .withMplex() + .withNoise() + .build() diff --git a/vendor/logos-storage-nim-dht b/vendor/logos-storage-nim-dht index 1af8dcf5..6179bfb2 160000 --- a/vendor/logos-storage-nim-dht +++ b/vendor/logos-storage-nim-dht @@ -1 +1 @@ -Subproject commit 1af8dcf50447b5f68d1843e321c71dd871ecf245 +Subproject commit 6179bfb23f9fe6192c0f0769a9fa34a5e1ff42cb diff --git a/vendor/nim-boringssl b/vendor/nim-boringssl new file mode 160000 index 00000000..1c91a4a2 --- /dev/null +++ b/vendor/nim-boringssl @@ -0,0 +1 @@ +Subproject commit 1c91a4a2579123597df43bbdea70cc575957bdea diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index e82080f7..9d5cab51 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit e82080f7b1aa61c6d35fa5311b873f41eff4bb52 +Subproject commit 9d5cab51d79ccf968933744e9b893749706e2472 diff --git a/vendor/nim-lsquic b/vendor/nim-lsquic new file mode 160000 index 00000000..800697e9 --- /dev/null +++ b/vendor/nim-lsquic @@ -0,0 +1 @@ +Subproject commit 800697e9bcbce574c86bda389d91432c40c051e7 diff --git a/vendor/nim-ngtcp2 b/vendor/nim-ngtcp2 deleted file mode 160000 index 791eb859..00000000 --- a/vendor/nim-ngtcp2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 791eb859145f9f268eb23eb9cbe777bdd7699c4d diff --git a/vendor/nim-protobuf-serialization b/vendor/nim-protobuf-serialization index 4d74e157..38d24eb3 160000 --- a/vendor/nim-protobuf-serialization +++ b/vendor/nim-protobuf-serialization @@ -1 +1 @@ -Subproject commit 4d74e157cdf1bdcd0ffd41519ebde740c4b80447 +Subproject commit 38d24eb3bd93e605fb88199da71d36b1ec0ad60d diff --git a/vendor/nim-quic b/vendor/nim-quic deleted file mode 160000 index 6d8678a1..00000000 --- a/vendor/nim-quic +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d8678a159bfb902f9725f0081d542134cd93916 diff --git a/vendor/nim-websock b/vendor/nim-websock index 35ae76f1..37a8b293 160000 --- a/vendor/nim-websock +++ b/vendor/nim-websock @@ -1 +1 @@ -Subproject commit 35ae76f1559e835c80f9c1a3943bf995d3dd9eb5 +Subproject commit 37a8b2935a49de15aeca71360c1f8adce5b81148