[build] track nim-libp2p's unstable branch

This commit is contained in:
Michael Bradley, Jr 2022-09-13 19:13:16 -05:00
parent 14cfe05ef6
commit 8899b68d1a
No known key found for this signature in database
GPG Key ID: D0307DBCF21A9A58
35 changed files with 111 additions and 108 deletions

1
.gitignore vendored
View File

@ -29,3 +29,4 @@ nimble.paths
.update.timestamp
codex.nims
nimbus-build-system.paths

View File

@ -73,7 +73,7 @@ when isMainModule:
notice "Shutting down after having received SIGTERM"
waitFor server.stop()
c_signal(SIGTERM, SIGTERMHandler)
c_signal(ansi_c.SIGTERM, SIGTERMHandler)
waitFor server.start()
of StartUpCommand.initNode:

View File

@ -254,7 +254,7 @@ proc blocksHandler*(
trace "Got blocks from peer", peer, len = blocks.len
for blk in blocks:
if isErr (await b.localStore.putBlock(blk)):
trace "Unable to store block", cid = blk.cid
trace "Unable to store block", cid = $blk.cid
await b.resolveBlocks(blocks)
let peerCtx = b.peers.get(peer)

View File

@ -39,12 +39,12 @@ proc getWantHandle*(
if cid notin p.blocks:
p.blocks[cid] = newFuture[Block]().wait(timeout)
trace "Adding pending future for block", cid
trace "Adding pending future for block", cid = $cid
try:
return await p.blocks[cid]
except CancelledError as exc:
trace "Blocks cancelled", exc = exc.msg, cid
trace "Blocks cancelled", exc = exc.msg, cid = $cid
raise exc
except CatchableError as exc:
trace "Pending WANT failed or expired", exc = exc.msg

View File

@ -7,6 +7,9 @@
## This file may not be copied, modified, or distributed except according to
## those terms.
import pkg/upraises
push: {.upraises: [].}
import pkg/chronos
import pkg/chronicles
import pkg/protobuf_serialization
@ -21,6 +24,8 @@ const
MaxMessageSize = 100 * 1 shl 20 # manifest files can be big
type
ConnProvider* = proc(): Future[Connection] {.gcsafe, closure.}
RPCHandler* = proc(peer: NetworkPeer, msg: Message): Future[void] {.gcsafe.}
NetworkPeer* = ref object of RootObj

View File

@ -9,7 +9,7 @@
import std/hashes
import std/sequtils
import pkg/protobuf_serialization
import pkg/[protobuf_serialization, protobuf_serialization/proto_parser]
import pkg/libp2p
import_proto3 "message.proto"

View File

@ -76,7 +76,7 @@ proc encode*(
##
logScope:
original_cid = manifest.cid.get()
original_cid = $manifest.cid.get()
original_len = manifest.len
blocks = blocks
parity = parity
@ -118,7 +118,7 @@ proc encode*(
trace "Unable to retrieve block", error = error.msg
return failure error
trace "Encoding block", cid = blk.cid, pos = idx
trace "Encoding block", cid = $blk.cid, pos = idx
shallowCopy(data[j], blk.data)
else:
trace "Padding with empty block", pos = idx
@ -137,10 +137,10 @@ proc encode*(
trace "Unable to create parity block", err = error.msg
return failure(error)
trace "Adding parity block", cid = blk.cid, pos = idx
trace "Adding parity block", cid = $blk.cid, pos = idx
encoded[idx] = blk.cid
if isErr (await self.store.putBlock(blk)):
trace "Unable to store block!", cid = blk.cid
trace "Unable to store block!", cid = $blk.cid
return failure("Unable to store block!")
except CancelledError as exc:
trace "Erasure coding encoding cancelled"
@ -212,10 +212,10 @@ proc decode*(
continue
if idx >= encoded.K:
trace "Retrieved parity block", cid = blk.cid, idx
trace "Retrieved parity block", cid = $blk.cid, idx
shallowCopy(parityData[idx - encoded.K], if blk.isEmpty: emptyBlock else: blk.data)
else:
trace "Retrieved data block", cid = blk.cid, idx
trace "Retrieved data block", cid = $blk.cid, idx
shallowCopy(data[idx], if blk.isEmpty: emptyBlock else: blk.data)
resolved.inc
@ -241,9 +241,9 @@ proc decode*(
trace "Unable to create block!", exc = error.msg
return failure(error)
trace "Recovered block", cid = blk.cid
trace "Recovered block", cid = $blk.cid
if isErr (await self.store.putBlock(blk)):
trace "Unable to store block!", cid = blk.cid
trace "Unable to store block!", cid = $blk.cid
return failure("Unable to store block!")
except CancelledError as exc:
trace "Erasure coding decoding cancelled"

View File

@ -49,7 +49,7 @@ func `[]=`*(self: Manifest, i: BackwardsIndex, item: Cid) =
proc add*(self: Manifest, cid: Cid) =
assert not self.protected # we expect that protected manifests are created with properly-sized self.blocks
self.rootHash = Cid.none
trace "Adding cid to manifest", cid
trace "Adding cid to manifest", cid = $cid
self.blocks.add(cid)
self.originalBytes = self.blocks.len * self.blockSize

View File

@ -72,7 +72,7 @@ proc fetchManifest*(
containerType =? ManifestContainers.?[$contentType]:
return failure "CID has invalid content type for manifest"
trace "Received retrieval request", cid
trace "Received retrieval request", cid = $cid
without blk =? await node.blockStore.getBlock(cid), error:
return failure error
@ -125,9 +125,9 @@ proc retrieve*(
try:
# Spawn an erasure decoding job
without res =? (await node.erasure.decode(manifest)), error:
trace "Unable to erasure decode manifest", cid, exc = error.msg
trace "Unable to erasure decode manifest", cid = $cid, exc = error.msg
except CatchableError as exc:
trace "Exception decoding manifest", cid
trace "Exception decoding manifest", cid = $cid
#
asyncSpawn erasureJob()
else:
@ -151,7 +151,7 @@ proc retrieve*(
try:
await stream.pushData(blk.data)
except CatchableError as exc:
trace "Unable to send block", cid
trace "Unable to send block", cid = $cid
discard
finally:
await stream.pushEof()
@ -209,15 +209,15 @@ proc store*(
return failure("Unable to init block from manifest data!")
if isErr (await node.blockStore.putBlock(manifest)):
trace "Unable to store manifest", cid = manifest.cid
trace "Unable to store manifest", cid = $manifest.cid
return failure("Unable to store manifest " & $manifest.cid)
without cid =? blockManifest.cid, error:
trace "Unable to generate manifest Cid!", exc = error.msg
return failure(error.msg)
trace "Stored data", manifestCid = manifest.cid,
contentCid = cid,
trace "Stored data", manifestCid = $manifest.cid,
contentCid = $cid,
blocks = blockManifest.len
return manifest.cid.success
@ -238,19 +238,19 @@ proc requestStorage*(self: CodexNodeRef,
## - Run the PoR setup on the erasure dataset
## - Call into the marketplace and purchasing contracts
##
trace "Received a request for storage!", cid, duration, nodes, tolerance, reward
trace "Received a request for storage!", cid = $cid, duration, nodes, tolerance, reward
without contracts =? self.contracts:
trace "Purchasing not available"
return failure "Purchasing not available"
without manifest =? await self.fetchManifest(cid), error:
trace "Unable to fetch manifest for cid", cid
trace "Unable to fetch manifest for cid", cid = $cid
raise error
# Erasure code the dataset according to provided parameters
without encoded =? (await self.erasure.encode(manifest, nodes.int, tolerance.int)), error:
trace "Unable to erasure code dataset", cid
trace "Unable to erasure code dataset", cid = $cid
return failure(error)
without encodedData =? encoded.encode(), error:
@ -262,7 +262,7 @@ proc requestStorage*(self: CodexNodeRef,
return failure(error)
if isErr (await self.blockStore.putBlock(encodedBlk)):
trace "Unable to store encoded manifest block", cid = encodedBlk.cid
trace "Unable to store encoded manifest block", cid = $encodedBlk.cid
return failure("Unable to store encoded manifest block")
let request = StorageRequest(
@ -327,14 +327,14 @@ proc start*(node: CodexNodeRef) {.async.} =
##
without cid =? Cid.init(request.content.cid):
trace "Unable to parse Cid", cid
trace "Unable to parse Cid", cid = $cid
raise newException(CodexError, "Unable to parse Cid")
without manifest =? await node.fetchManifest(cid), error:
trace "Unable to fetch manifest for cid", cid
trace "Unable to fetch manifest for cid", cid = $cid
raise error
trace "Fetching block for manifest", cid
trace "Fetching block for manifest", cid = $cid
# TODO: This will probably require a call to `getBlock` either way,
# since fetching of blocks will have to be selective according
# to a combination of parameters, such as node slot position

View File

@ -186,7 +186,7 @@ proc initRestApi*(node: CodexNodeRef, conf: CodexConf): RestRouter =
trace "Excepting streaming blocks", exc = exc.msg
return RestApiResponse.error(Http500)
finally:
trace "Sent bytes", cid = id.get(), bytes
trace "Sent bytes", cid = $id.get(), bytes
if not stream.isNil:
await stream.close()

View File

@ -12,11 +12,11 @@ import pkg/upraises
push: {.upraises: [].}
import pkg/libp2p/crypto/crypto
import pkg/bearssl
import pkg/bearssl/rand
type
RngSampleError = object of CatchableError
Rng* = ref BrHmacDrbgContext
Rng* = ref HmacDrbgContext
var rng {.threadvar.}: Rng
@ -25,16 +25,15 @@ proc instance*(t: type Rng): Rng =
rng = newRng()
rng
# Random helpers: similar as in stdlib, but with BrHmacDrbgContext rng
# Random helpers: similar as in stdlib, but with HmacDrbgContext rng
# TODO: Move these somewhere else?
const randMax = 18_446_744_073_709_551_615'u64
proc rand*(rng: Rng, max: Natural): int =
if max == 0: return 0
var x: uint64
while true:
brHmacDrbgGenerate(addr rng[], addr x, csize_t(sizeof(x)))
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))

View File

@ -9,7 +9,7 @@
import std/sequtils
import pkg/protobuf_serialization
import pkg/[protobuf_serialization, protobuf_serialization/proto_parser]
import pkg/stew/results
import pkg/stew/objects
import pkg/blscurve

View File

@ -64,7 +64,7 @@ proc uploadTags*(
except CancelledError as exc:
raise exc
except CatchableError as exc:
trace "Exception submitting tags", cid, exc = exc.msg
trace "Exception submitting tags", cid = $cid, exc = exc.msg
return failure(exc.msg)
finally:
await conn.close()

View File

@ -1,4 +1,4 @@
import pkg/protobuf_serialization
import pkg/[protobuf_serialization, protobuf_serialization/proto_parser]
import_proto3 "stp.proto"

View File

@ -65,7 +65,7 @@ proc store*(
let res = io2.writeFile(path, Protobuf.encode(por));
res.isErr):
let error = io2.ioErrorMsg(res.error)
trace "Unable to store storage proofs", path, cid = cid, error
trace "Unable to store storage proofs", path, cid = $cid, error
return failure(
&"Unable to store storage proofs - path = ${path} cid = ${$cid} error = ${error}")
@ -106,7 +106,7 @@ proc store*(
let res = io2.writeFile(path, t.tag);
res.isErr):
let error = io2.ioErrorMsg(res.error)
trace "Unable to store tags", path, cid = cid, error
trace "Unable to store tags", path, cid = $cid, error
return failure(
&"Unable to store tags - path = ${path} cid = ${$cid} error = ${error}")

View File

@ -47,7 +47,7 @@ method getBlock*(self: CacheStore, cid: Cid): Future[?!Block] {.async.} =
## Get a block from the stores
##
trace "Getting block from cache", cid
trace "Getting block from cache", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
@ -59,14 +59,14 @@ method getBlock*(self: CacheStore, cid: Cid): Future[?!Block] {.async.} =
try:
return success self.cache[cid]
except CatchableError as exc:
trace "Error requesting block from cache", cid, error = exc.msg
trace "Error requesting block from cache", cid = $cid, error = exc.msg
return failure exc
method hasBlock*(self: CacheStore, cid: Cid): Future[?!bool] {.async.} =
## Check if the block exists in the blockstore
##
trace "Checking CacheStore for block presence", cid
trace "Checking CacheStore for block presence", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
return true.success
@ -108,7 +108,7 @@ method putBlock*(self: CacheStore, blk: Block): Future[?!void] {.async.} =
## Put a block to the blockstore
##
trace "Storing block in cache", cid = blk.cid
trace "Storing block in cache", cid = $blk.cid
if blk.isEmpty:
trace "Empty block, ignoring"
return success()
@ -120,7 +120,7 @@ method delBlock*(self: CacheStore, cid: Cid): Future[?!void] {.async.} =
## Delete a block from the blockstore
##
trace "Deleting block from cache", cid
trace "Deleting block from cache", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
return success()

View File

@ -43,9 +43,9 @@ method getBlock*(self: FSStore, cid: Cid): Future[?!Block] {.async.} =
##
if not self.cache.isNil:
trace "Getting block from cache or filestore", cid
trace "Getting block from cache or filestore", cid = $cid
else:
trace "Getting block from filestore", cid
trace "Getting block from filestore", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
@ -58,7 +58,7 @@ method getBlock*(self: FSStore, cid: Cid): Future[?!Block] {.async.} =
if not cachedBlockRes.isErr:
return success cachedBlockRes.get
else:
trace "Unable to read block from cache", cid, error = cachedBlockRes.error.msg
trace "Unable to read block from cache", cid = $cid, error = cachedBlockRes.error.msg
# Read file contents
var
@ -79,7 +79,7 @@ method getBlock*(self: FSStore, cid: Cid): Future[?!Block] {.async.} =
return failure "Error requesting block from filestore: " & error
without blk =? Block.new(cid, data), error:
trace "Unable to construct block from data", cid, error = error.msg
trace "Unable to construct block from data", cid = $cid, error = error.msg
return failure error
if not self.cache.isNil:
@ -87,7 +87,7 @@ method getBlock*(self: FSStore, cid: Cid): Future[?!Block] {.async.} =
putCachedRes = await self.cache.putBlock(blk)
if putCachedRes.isErr:
trace "Unable to store block in cache", cid, error = putCachedRes.error.msg
trace "Unable to store block in cache", cid = $cid, error = putCachedRes.error.msg
return success blk
@ -97,9 +97,9 @@ method putBlock*(self: FSStore, blk: Block): Future[?!void] {.async.} =
##
if not self.cache.isNil:
trace "Putting block into filestore and cache", cid = blk.cid
trace "Putting block into filestore and cache", cid = $blk.cid
else:
trace "Putting block into filestore", cid = blk.cid
trace "Putting block into filestore", cid = $blk.cid
if blk.isEmpty:
trace "Empty block, ignoring"
@ -118,7 +118,7 @@ method putBlock*(self: FSStore, blk: Block): Future[?!void] {.async.} =
let res = io2.writeFile(path, blk.data)
if res.isErr:
let error = io2.ioErrorMsg(res.error)
trace "Unable to store block", path, cid = blk.cid, error
trace "Unable to store block", path, cid = $blk.cid, error
return failure("Unable to store block")
if not self.cache.isNil:
@ -126,7 +126,7 @@ method putBlock*(self: FSStore, blk: Block): Future[?!void] {.async.} =
putCachedRes = await self.cache.putBlock(blk)
if putCachedRes.isErr:
trace "Unable to store block in cache", cid = blk.cid, error = putCachedRes.error.msg
trace "Unable to store block in cache", cid = $blk.cid, error = putCachedRes.error.msg
return success()
@ -135,9 +135,9 @@ method delBlock*(self: FSStore, cid: Cid): Future[?!void] {.async.} =
##
if not self.cache.isNil:
trace "Deleting block from cache and filestore", cid
trace "Deleting block from cache and filestore", cid = $cid
else:
trace "Deleting block from filestore", cid
trace "Deleting block from filestore", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
@ -148,7 +148,7 @@ method delBlock*(self: FSStore, cid: Cid): Future[?!void] {.async.} =
delCachedRes = await self.cache.delBlock(cid)
if delCachedRes.isErr:
trace "Unable to delete block from cache", cid, error = delCachedRes.error.msg
trace "Unable to delete block from cache", cid = $cid, error = delCachedRes.error.msg
let
path = self.blockPath(cid)
@ -156,7 +156,7 @@ method delBlock*(self: FSStore, cid: Cid): Future[?!void] {.async.} =
if res.isErr:
let error = io2.ioErrorMsg(res.error)
trace "Unable to delete block", path, cid, error
trace "Unable to delete block", path, cid = $cid, error
return error.failure
return success()
@ -165,7 +165,7 @@ method hasBlock*(self: FSStore, cid: Cid): Future[?!bool] {.async.} =
## Check if a block exists in the filestore
##
trace "Checking filestore for block existence", cid
trace "Checking filestore for block existence", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
return true.success

View File

@ -35,11 +35,11 @@ method getBlock*(self: NetworkStore, cid: Cid): Future[?!bt.Block] {.async.} =
## Get a block from a remote peer
##
trace "Getting block from local store or network", cid
trace "Getting block from local store or network", cid = $cid
without blk =? await self.localStore.getBlock(cid), error:
if not (error of BlockNotFoundError): return failure error
trace "Block not in local store", cid
trace "Block not in local store", cid = $cid
# TODO: What if block isn't available in the engine too?
# TODO: add retrieved block to the local store
return (await self.engine.requestBlock(cid)).catch
@ -50,7 +50,7 @@ method putBlock*(self: NetworkStore, blk: bt.Block): Future[?!void] {.async.} =
## Store block locally and notify the network
##
trace "Puting block into network store", cid = blk.cid
trace "Puting block into network store", cid = $blk.cid
let res = await self.localStore.putBlock(blk)
if res.isErr:
@ -63,7 +63,7 @@ method delBlock*(self: NetworkStore, cid: Cid): Future[?!void] =
## Delete a block from the blockstore
##
trace "Deleting block from network store", cid
trace "Deleting block from network store", cid = $cid
return self.localStore.delBlock(cid)
{.pop.}
@ -72,7 +72,7 @@ method hasBlock*(self: NetworkStore, cid: Cid): Future[?!bool] {.async.} =
## Check if the block exists in the blockstore
##
trace "Checking network store for block existence", cid
trace "Checking network store for block existence", cid = $cid
return await self.localStore.hasBlock(cid)
method close*(self: NetworkStore): Future[void] {.async.} =

View File

@ -64,7 +64,7 @@ proc blockKey*(blockCid: Cid): ?!Key =
keyRes = Key.init($blockCid)
if keyRes.isErr:
trace "Unable to construct CID from key", cid = blockCid, error = keyRes.error.msg
trace "Unable to construct CID from key", cid = $blockCid, error = keyRes.error.msg
keyRes
@ -76,9 +76,9 @@ method getBlock*(
##
if not self.cache.isNil:
trace "Getting block from cache or database", cid
trace "Getting block from cache or database", cid = $cid
else:
trace "Getting block from database", cid
trace "Getting block from database", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
@ -91,7 +91,7 @@ method getBlock*(
if cachedBlockRes.isOk:
return success cachedBlockRes.get
else:
trace "Unable to read block from cache", cid, error = cachedBlockRes.error.msg
trace "Unable to read block from cache", cid = $cid, error = cachedBlockRes.error.msg
without blkKey =? blockKey(cid), error:
return failure error
@ -104,7 +104,7 @@ method getBlock*(
return failure (ref BlockNotFoundError)(msg: "Block not in database")
without blk =? Block.new(cid, data), error:
trace "Unable to construct block from data", cid, error = error.msg
trace "Unable to construct block from data", cid = $cid, error = error.msg
return failure error
if not self.cache.isNil:
@ -112,7 +112,7 @@ method getBlock*(
putCachedRes = await self.cache.putBlock(blk)
if putCachedRes.isErr:
trace "Unable to store block in cache", cid, error = putCachedRes.error.msg
trace "Unable to store block in cache", cid = $cid, error = putCachedRes.error.msg
return success blk
@ -124,9 +124,9 @@ method putBlock*(
##
if not self.cache.isNil:
trace "Putting block into database and cache", cid = blk.cid
trace "Putting block into database and cache", cid = $blk.cid
else:
trace "Putting block into database", cid = blk.cid
trace "Putting block into database", cid = $blk.cid
if blk.isEmpty:
trace "Empty block, ignoring"
@ -147,7 +147,7 @@ method putBlock*(
putCachedRes = await self.cache.putBlock(blk)
if putCachedRes.isErr:
trace "Unable to store block in cache", cid = blk.cid, error = putCachedRes.error.msg
trace "Unable to store block in cache", cid = $blk.cid, error = putCachedRes.error.msg
return success()
@ -158,9 +158,9 @@ method delBlock*(
##
if not self.cache.isNil:
trace "Deleting block from cache and database", cid
trace "Deleting block from cache and database", cid = $cid
else:
trace "Deleting block from database", cid
trace "Deleting block from database", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"
@ -171,7 +171,7 @@ method delBlock*(
delCachedRes = await self.cache.delBlock(cid)
if delCachedRes.isErr:
trace "Unable to delete block from cache", cid, error = delCachedRes.error.msg
trace "Unable to delete block from cache", cid = $cid, error = delCachedRes.error.msg
without blkKey =? blockKey(cid), error:
return failure error
@ -191,7 +191,7 @@ method hasBlock*(
## Check if a block exists in the database
##
trace "Checking database for block existence", cid
trace "Checking database for block existence", cid = $cid
if cid.isEmpty:
trace "Empty block, ignoring"

View File

@ -7,7 +7,8 @@
## This file may not be copied, modified, or distributed except according to
## those terms.
{.push raises: [Defect].}
import pkg/upraises
push: {.upraises: [].}
import pkg/chronos
import pkg/chronicles

View File

@ -69,7 +69,7 @@ method readOnce*(
## Return how many bytes were actually read before EOF was encountered.
## Raise exception if we are already at EOF.
trace "Reading from manifest", cid = self.manifest.cid.get(), blocks = self.manifest.len
trace "Reading from manifest", cid = $self.manifest.cid.get(), blocks = self.manifest.len
if self.atEof:
raise newLPStreamEOFError()
@ -88,7 +88,7 @@ method readOnce*(
without blk =? await self.store.getBlock(self.manifest[blockNum]), error:
raise newLPStreamReadError(error)
trace "Reading bytes from store stream", blockNum, cid = blk.cid, bytes = readBytes, blockOffset
trace "Reading bytes from store stream", blockNum, cid = $blk.cid, bytes = readBytes, blockOffset
# Copy `readBytes` bytes starting at `blockOffset` from the block into the outbuf
if blk.isEmpty:

View File

@ -159,9 +159,6 @@ suite "Network - Senders":
done = newFuture[void]()
switch1 = newStandardSwitch()
switch2 = newStandardSwitch()
await switch1.start()
await switch2.start()
network1 = BlockExcNetwork.new(
switch = switch1)
switch1.mount(network1)
@ -170,6 +167,9 @@ suite "Network - Senders":
switch = switch2)
switch2.mount(network2)
await switch1.start()
await switch2.start()
await switch1.connect(
switch2.peerInfo.peerId,
switch2.peerInfo.addrs)
@ -272,8 +272,6 @@ suite "Network - Test Limits":
done = newFuture[void]()
switch1 = newStandardSwitch()
switch2 = newStandardSwitch()
await switch1.start()
await switch2.start()
network1 = BlockExcNetwork.new(
switch = switch1,
@ -284,6 +282,9 @@ suite "Network - Test Limits":
switch = switch2)
switch2.mount(network2)
await switch1.start()
await switch2.start()
await switch1.connect(
switch2.peerInfo.peerId,
switch2.peerInfo.addrs)

View File

@ -37,12 +37,11 @@ proc corruptBlocks*(
manifest: Manifest,
blks, bytes: int): Future[seq[int]] {.async.} =
var pos: seq[int]
while true:
if pos.len >= blks:
break
var i = -1
if (i = Rng.instance.rand(manifest.len - 1); pos.find(i) >= 0):
doAssert blks < manifest.len
while pos.len < blks:
let i = Rng.instance.rand(manifest.len - 1)
if pos.find(i) >= 0:
continue
pos.add(i)
@ -50,15 +49,12 @@ proc corruptBlocks*(
blk = (await store.getBlock(manifest[i])).tryGet()
bytePos: seq[int]
while true:
if bytePos.len > bytes:
break
var ii = -1
if (ii = Rng.instance.rand(blk.data.len - 1); bytePos.find(ii) >= 0):
doAssert bytes < blk.data.len
while bytePos.len <= bytes:
let ii = Rng.instance.rand(blk.data.len - 1)
if bytePos.find(ii) >= 0:
continue
bytePos.add(ii)
blk.data[ii] = byte 0
return pos

2
vendor/nim-bearssl vendored

@ -1 +1 @@
Subproject commit dc62f4fccd2d40c884009ae8f2b14bb6a86a55cf
Subproject commit f4c4233de453cb7eac0ce3f3ffad6496295f83ab

@ -1 +1 @@
Subproject commit 1682096306ddba8185dcfac360a8c3f952d721e4
Subproject commit 7631f7b2ee03398cb1512a79923264e8f9410af6

2
vendor/nim-chronos vendored

@ -1 +1 @@
Subproject commit 17fed89c99beac5a92d3668d0d3e9b0e4ac13936
Subproject commit 8e8263370b51bc9b71916273e3eb956053532c4f

@ -1 +1 @@
Subproject commit 689da19e9e9cfff4ced85e2b25c6b2b5598ed079
Subproject commit e88e231dfcef4585fe3b2fbd9b664dbd28a88040

@ -1 +1 @@
Subproject commit c5f0e2465e8375dfc7aa0f56ccef67cb680bc6b0
Subproject commit e5b18fb710c3d0167ec79f3b892f5a7a1bc6d1a4

2
vendor/nim-libp2p vendored

@ -1 +1 @@
Subproject commit eeb3c210a37408716b6a8b45f578adf87610cef2
Subproject commit ef594e1e02f31700af530712ba37c3c59ea7ded9

@ -1 +1 @@
Subproject commit 39c0ffc970bc40d7f9f6282fd037b6bf621ffc5c
Subproject commit c480fb573242ab13fab57446aeece90eaabbe104

2
vendor/nim-presto vendored

@ -1 +1 @@
Subproject commit 962bb588d19c7180e39f0d9f18131e75861bab20
Subproject commit 3984431dc0fc829eb668e12e57e90542b041d298

@ -1 +1 @@
Subproject commit f7d671f877e01213494aac7903421ccdbe70616f
Subproject commit d8d17556b9875233854fb41bd11bf353ee80ac3d

@ -1 +1 @@
Subproject commit fcd0eadadde0ee000a63df8ab21dc4e9f015a790
Subproject commit 493d18b8292fc03aa4f835fd825dea1183f97466

2
vendor/nim-stew vendored

@ -1 +1 @@
Subproject commit 6ad35b876fb6ebe0dfee0f697af173acc47906ee
Subproject commit 0c379cf1d8d3d9db07af108cc78ff542b2105914

2
vendor/nim-websock vendored

@ -1 +1 @@
Subproject commit a697e3585d583ab6b91a159ea7d023461002c927
Subproject commit 7b2ed397d6e4c37ea4df08ae82aeac7ff04cd180