From 2a27446d0fb67eb77a687cc190e6b8d9be34933b Mon Sep 17 00:00:00 2001 From: Henri DF Date: Wed, 18 Jan 2023 19:21:32 +0100 Subject: [PATCH 1/9] Wire up blob fetching and request manager --- beacon_chain/nimbus_beacon_node.nim | 14 +++- beacon_chain/sync/request_manager.nim | 113 +++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 4 deletions(-) diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 85699d8dd8..c42ebaa683 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -330,6 +330,16 @@ proc initFullNode( blockProcessor[].addBlock(MsgSource.gossip, signedBlock, Opt.none(eip4844.BlobsSidecar), resfut) resfut + blockBlobsVerifier = proc(signedBlock: ForkedSignedBeaconBlock, blobs: eip4844.BlobsSidecar): + Future[Result[void, VerifierError]] = + # The design with a callback for block verification is unusual compared + # to the rest of the application, but fits with the general approach + # taken in the sync/request managers - this is an architectural compromise + # that should probably be reimagined more holistically in the future. + let resfut = newFuture[Result[void, VerifierError]]("blockVerifier") + blockProcessor[].addBlock(MsgSource.gossip, signedBlock, + Opt.some(blobs), resfut) + resfut processor = Eth2Processor.new( config.doppelgangerDetection, blockProcessor, node.validatorMonitor, dag, attestationPool, @@ -376,7 +386,9 @@ proc initFullNode( node.processor = processor node.blockProcessor = blockProcessor node.consensusManager = consensusManager - node.requestManager = RequestManager.init(node.network, blockVerifier) + node.requestManager = RequestManager.init(node.network, dag, + blockVerifier, blockBlobsVerifier, + dag.cfg.EIP4844_FORK_EPOCH) node.syncManager = syncManager node.backfiller = backfiller node.router = router diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index 46034ed225..49cab06ce3 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -31,11 +31,17 @@ type BlockVerifier* = proc(signedBlock: ForkedSignedBeaconBlock): Future[Result[void, VerifierError]] {.gcsafe, raises: [Defect].} + BlockBlobsVerifier* = + proc(signedBlock: ForkedSignedBeaconBlock, blobs: eip4844.BlobsSidecar): + Future[Result[void, VerifierError]] {.gcsafe, raises: [Defect].} RequestManager* = object network*: Eth2Node inpQueue*: AsyncQueue[FetchRecord] + dag: ChainDAGRef blockVerifier: BlockVerifier + blockBlobsVerifier: BlockBlobsVerifier + blobsStartEpoch: Epoch loopFuture: Future[void] func shortLog*(x: seq[Eth2Digest]): string = @@ -45,13 +51,33 @@ func shortLog*(x: seq[FetchRecord]): string = "[" & x.mapIt(shortLog(it.root)).join(", ") & "]" proc init*(T: type RequestManager, network: Eth2Node, - blockVerifier: BlockVerifier): RequestManager = + dag: ChainDAGRef, + blockVerifier: BlockVerifier, + blockBlobsVerifier: BlockBlobsVerifier, + blobsStartEpoch: Epoch): RequestManager = RequestManager( network: network, inpQueue: newAsyncQueue[FetchRecord](), - blockVerifier: blockVerifier + dag: dag, + blockVerifier: blockVerifier, + blockBlobsVerifier: blockBlobsVerifier, + blobsStartEpoch: blobsStartEpoch ) +proc checkResponse(roots: openArray[Eth2Digest], + blocks: openArray[ref SignedBeaconBlockAndBlobsSidecar]): bool = + ## This procedure checks peer's response. + var checks = @roots + if len(blocks) > len(roots): + return false + for item in blocks: + let res = checks.find(item[].beacon_block.root) + if res == -1: + return false + else: + checks.del(res) + return true + proc checkResponse(roots: openArray[Eth2Digest], blocks: openArray[ref ForkedSignedBeaconBlock]): bool = ## This procedure checks peer's response. @@ -138,6 +164,82 @@ proc fetchAncestorBlocksFromNetwork(rman: RequestManager, if not(isNil(peer)): rman.network.peerPool.release(peer) +proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, + items: seq[Eth2Digest]) {.async.} = + var peer: Peer + try: + peer = await rman.network.peerPool.acquire() + debug "Requesting blocks by root", peer = peer, blocks = shortLog(items), + peer_score = peer.getScore() + + let blocks = (await beaconBlockAndBlobsSidecarByRoot_v1(peer, BlockRootsList items)) + + if blocks.isOk: + let ublocks = blocks.get() + if checkResponse(items, ublocks.asSeq()): + var + gotGoodBlock = false + gotUnviableBlock = false + + for b in ublocks: + let ver = await rman.blockBlobsVerifier(ForkedSignedBeaconBlock.init(b[].beacon_block), b[].blobs_sidecar) + if ver.isErr(): + case ver.error() + of VerifierError.MissingParent: + # Ignoring because the order of the blocks that + # we requested may be different from the order in which we need + # these blocks to apply. + discard + of VerifierError.Duplicate: + # Ignoring because these errors could occur due to the + # concurrent/parallel requests we made. + discard + of VerifierError.UnviableFork: + # If they're working a different fork, we'll want to descore them + # but also process the other blocks (in case we can register the + # other blocks as unviable) + gotUnviableBlock = true + of VerifierError.Invalid: + # We stop processing blocks because peer is either sending us + # junk or working a different fork + notice "Received invalid block", + peer = peer, blocks = shortLog(items), + peer_score = peer.getScore() + peer.updateScore(PeerScoreBadValues) + + return # Stop processing this junk... + else: + gotGoodBlock = true + + if gotUnviableBlock: + notice "Received blocks from an unviable fork", + peer = peer, blocks = shortLog(items), + peer_score = peer.getScore() + peer.updateScore(PeerScoreUnviableFork) + elif gotGoodBlock: + # We reward peer only if it returns something. + peer.updateScore(PeerScoreGoodValues) + + else: + peer.updateScore(PeerScoreBadResponse) + else: + peer.updateScore(PeerScoreNoValues) + + except CancelledError as exc: + raise exc + except CatchableError as exc: + peer.updateScore(PeerScoreNoValues) + debug "Error while fetching ancestor blocks", exc = exc.msg, + items = shortLog(items), peer = peer, peer_score = peer.getScore() + raise exc + finally: + if not(isNil(peer)): + rman.network.peerPool.release(peer) + + +proc isSlotWithBlobs(rman: RequestManager, s: Slot): bool = + return s.epoch >= rman.blobsStartEpoch + proc requestManagerLoop(rman: RequestManager) {.async.} = var rootList = newSeq[Eth2Digest]() var workers = newSeq[Future[void]](PARALLEL_REQUESTS) @@ -154,8 +256,13 @@ proc requestManagerLoop(rman: RequestManager) {.async.} = let start = SyncMoment.now(0) + let getBlobs = rman.isSlotWithBlobs(rman.dag.head.slot) for i in 0 ..< PARALLEL_REQUESTS: - workers[i] = rman.fetchAncestorBlocksFromNetwork(rootList) + if getBlobs: + workers[i] = rman.fetchAncestorBlocksAndBlobsFromNetwork(rootList) + else: + workers[i] = rman.fetchAncestorBlocksFromNetwork(rootList) + # We do not care about await allFutures(workers) From ec5c9b2034ea6925449a628639f1d439dd77a482 Mon Sep 17 00:00:00 2001 From: henridf Date: Thu, 19 Jan 2023 17:14:23 +0100 Subject: [PATCH 2/9] Update beacon_chain/sync/request_manager.nim Co-authored-by: tersec --- beacon_chain/sync/request_manager.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index 49cab06ce3..acf860d02f 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -76,7 +76,7 @@ proc checkResponse(roots: openArray[Eth2Digest], return false else: checks.del(res) - return true + true proc checkResponse(roots: openArray[Eth2Digest], blocks: openArray[ref ForkedSignedBeaconBlock]): bool = From 2c4b94f7db10f881467e2cfa9d806b0f768e1b8e Mon Sep 17 00:00:00 2001 From: Henri DF Date: Sat, 21 Jan 2023 18:33:09 +0100 Subject: [PATCH 3/9] Review feedback: remove redundant RequestManager field. --- beacon_chain/nimbus_beacon_node.nim | 3 +-- beacon_chain/sync/request_manager.nim | 8 +++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index c42ebaa683..0445ae2c79 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -387,8 +387,7 @@ proc initFullNode( node.blockProcessor = blockProcessor node.consensusManager = consensusManager node.requestManager = RequestManager.init(node.network, dag, - blockVerifier, blockBlobsVerifier, - dag.cfg.EIP4844_FORK_EPOCH) + blockVerifier, blockBlobsVerifier) node.syncManager = syncManager node.backfiller = backfiller node.router = router diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index acf860d02f..2253dd980a 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -41,7 +41,6 @@ type dag: ChainDAGRef blockVerifier: BlockVerifier blockBlobsVerifier: BlockBlobsVerifier - blobsStartEpoch: Epoch loopFuture: Future[void] func shortLog*(x: seq[Eth2Digest]): string = @@ -53,15 +52,14 @@ func shortLog*(x: seq[FetchRecord]): string = proc init*(T: type RequestManager, network: Eth2Node, dag: ChainDAGRef, blockVerifier: BlockVerifier, - blockBlobsVerifier: BlockBlobsVerifier, - blobsStartEpoch: Epoch): RequestManager = + blockBlobsVerifier: BlockBlobsVerifier) + : RequestManager = RequestManager( network: network, inpQueue: newAsyncQueue[FetchRecord](), dag: dag, blockVerifier: blockVerifier, blockBlobsVerifier: blockBlobsVerifier, - blobsStartEpoch: blobsStartEpoch ) proc checkResponse(roots: openArray[Eth2Digest], @@ -238,7 +236,7 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, proc isSlotWithBlobs(rman: RequestManager, s: Slot): bool = - return s.epoch >= rman.blobsStartEpoch + return s.epoch >= rman.dag.cfg.EIP4844_FORK_EPOCH proc requestManagerLoop(rman: RequestManager) {.async.} = var rootList = newSeq[Eth2Digest]() From 856fcd94e0383d13bb5e68ce8e4345adfe4d94dd Mon Sep 17 00:00:00 2001 From: Henri DF Date: Sat, 21 Jan 2023 19:43:34 +0100 Subject: [PATCH 4/9] Fix syntax --- beacon_chain/sync/request_manager.nim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index 2253dd980a..5c16ebe0fd 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -52,8 +52,7 @@ func shortLog*(x: seq[FetchRecord]): string = proc init*(T: type RequestManager, network: Eth2Node, dag: ChainDAGRef, blockVerifier: BlockVerifier, - blockBlobsVerifier: BlockBlobsVerifier) - : RequestManager = + blockBlobsVerifier: BlockBlobsVerifier): RequestManager = RequestManager( network: network, inpQueue: newAsyncQueue[FetchRecord](), From 26b8cc94f81a5839043896cb7fccc9a73c696fc5 Mon Sep 17 00:00:00 2001 From: Henri DF Date: Wed, 25 Jan 2023 13:51:34 +0100 Subject: [PATCH 5/9] Improve blob fetching logic --- beacon_chain/nimbus_beacon_node.nim | 1 + beacon_chain/sync/request_manager.nim | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 0445ae2c79..9e51db39dc 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -387,6 +387,7 @@ proc initFullNode( node.blockProcessor = blockProcessor node.consensusManager = consensusManager node.requestManager = RequestManager.init(node.network, dag, + node.requestManager = RequestManager.init(node.network, getBeaconTime, blockVerifier, blockBlobsVerifier) node.syncManager = syncManager node.backfiller = backfiller diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index 5c16ebe0fd..aff1ca9f56 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -39,6 +39,7 @@ type network*: Eth2Node inpQueue*: AsyncQueue[FetchRecord] dag: ChainDAGRef + getBeaconTime: GetBeaconTimeFn blockVerifier: BlockVerifier blockBlobsVerifier: BlockBlobsVerifier loopFuture: Future[void] @@ -51,12 +52,14 @@ func shortLog*(x: seq[FetchRecord]): string = proc init*(T: type RequestManager, network: Eth2Node, dag: ChainDAGRef, + getBeaconTime: GetBeaconTimeFn, blockVerifier: BlockVerifier, blockBlobsVerifier: BlockBlobsVerifier): RequestManager = RequestManager( network: network, inpQueue: newAsyncQueue[FetchRecord](), dag: dag, + getBeaconTime: getBeaconTime, blockVerifier: blockVerifier, blockBlobsVerifier: blockBlobsVerifier, ) @@ -219,6 +222,8 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, else: peer.updateScore(PeerScoreBadResponse) + elif blocks.error().responseCode == ResourceUnavailable: + result = rman.fetchAncestorBlocksFromNetwork(rootList) else: peer.updateScore(PeerScoreNoValues) @@ -234,8 +239,8 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, rman.network.peerPool.release(peer) -proc isSlotWithBlobs(rman: RequestManager, s: Slot): bool = - return s.epoch >= rman.dag.cfg.EIP4844_FORK_EPOCH +proc isBlobTime(rman: RequestManager, s: Slot): bool = + return rman.getBeaconTime().slotOrZero >= rman.dag.cfg.EIP4844_FORK_EPOCH proc requestManagerLoop(rman: RequestManager) {.async.} = var rootList = newSeq[Eth2Digest]() @@ -253,7 +258,12 @@ proc requestManagerLoop(rman: RequestManager) {.async.} = let start = SyncMoment.now(0) - let getBlobs = rman.isSlotWithBlobs(rman.dag.head.slot) + # As soon as EIP4844_FORK_EPOCH comes around in wall time, we + # switch to requesting blocks and blobs. In the vicinity of the + # transition, that means that we *may* request blobs for a + # pre-eip4844. In that case, we get ResourceUnavailable from the + # peer and fall back to requesting blocks only. + let getBlobs = rman.isBlobsTime(rman.dag.head.slot) for i in 0 ..< PARALLEL_REQUESTS: if getBlobs: workers[i] = rman.fetchAncestorBlocksAndBlobsFromNetwork(rootList) From 827020aa8399d11f68acaf8ba8151b9e6f4a10d7 Mon Sep 17 00:00:00 2001 From: Henri DF Date: Wed, 25 Jan 2023 23:39:23 +0100 Subject: [PATCH 6/9] fix previous commit --- beacon_chain/networking/eth2_network.nim | 4 ++-- beacon_chain/nimbus_beacon_node.nim | 3 +-- beacon_chain/sync/request_manager.nim | 21 +++++++++++++++------ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/beacon_chain/networking/eth2_network.nim b/beacon_chain/networking/eth2_network.nim index b44acbb0f0..344c274531 100644 --- a/beacon_chain/networking/eth2_network.nim +++ b/beacon_chain/networking/eth2_network.nim @@ -204,8 +204,8 @@ type Eth2NetworkingError = object case kind*: Eth2NetworkingErrorKind of ReceivedErrorResponse: - responseCode: ResponseCode - errorMsg: string + responseCode*: ResponseCode + errorMsg*: string else: discard diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 9e51db39dc..5472c3fe0f 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -386,8 +386,7 @@ proc initFullNode( node.processor = processor node.blockProcessor = blockProcessor node.consensusManager = consensusManager - node.requestManager = RequestManager.init(node.network, dag, - node.requestManager = RequestManager.init(node.network, getBeaconTime, + node.requestManager = RequestManager.init(node.network, dag, getBeaconTime, blockVerifier, blockBlobsVerifier) node.syncManager = syncManager node.backfiller = backfiller diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index aff1ca9f56..6cefd7898c 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -15,6 +15,7 @@ import ../networking/eth2_network, ../consensus_object_pools/block_quarantine, "."/sync_protocol, "."/sync_manager +from ../beacon_clock import GetBeaconTimeFn export block_quarantine, sync_manager logScope: @@ -219,11 +220,19 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, elif gotGoodBlock: # We reward peer only if it returns something. peer.updateScore(PeerScoreGoodValues) - else: - peer.updateScore(PeerScoreBadResponse) - elif blocks.error().responseCode == ResourceUnavailable: - result = rman.fetchAncestorBlocksFromNetwork(rootList) + let err = blocks.error() + case err.kind + of ReceivedErrorResponse: + if err.responseCode == ResourceUnavailable: + if not(isNil(peer)): + rman.network.peerPool.release(peer) + await rman.fetchAncestorBlocksFromNetwork(items) + return + else: + peer.updateScore(PeerScoreBadResponse) + else: + discard else: peer.updateScore(PeerScoreNoValues) @@ -239,8 +248,8 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, rman.network.peerPool.release(peer) -proc isBlobTime(rman: RequestManager, s: Slot): bool = - return rman.getBeaconTime().slotOrZero >= rman.dag.cfg.EIP4844_FORK_EPOCH +proc isBlobsTime(rman: RequestManager, s: Slot): bool = + return rman.getBeaconTime().slotOrZero.epoch >= rman.dag.cfg.EIP4844_FORK_EPOCH proc requestManagerLoop(rman: RequestManager) {.async.} = var rootList = newSeq[Eth2Digest]() From d78ec80f5f7558bf49c4952a1e02cb697199ca09 Mon Sep 17 00:00:00 2001 From: Henri DF Date: Tue, 31 Jan 2023 11:29:30 +0100 Subject: [PATCH 7/9] rman.isBlobsTime(): Remove spurious parameter --- beacon_chain/sync/request_manager.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index 6cefd7898c..4a4c518ab1 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -248,7 +248,7 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, rman.network.peerPool.release(peer) -proc isBlobsTime(rman: RequestManager, s: Slot): bool = +proc isBlobsTime(rman: RequestManager): bool = return rman.getBeaconTime().slotOrZero.epoch >= rman.dag.cfg.EIP4844_FORK_EPOCH proc requestManagerLoop(rman: RequestManager) {.async.} = @@ -272,7 +272,7 @@ proc requestManagerLoop(rman: RequestManager) {.async.} = # transition, that means that we *may* request blobs for a # pre-eip4844. In that case, we get ResourceUnavailable from the # peer and fall back to requesting blocks only. - let getBlobs = rman.isBlobsTime(rman.dag.head.slot) + let getBlobs = rman.isBlobsTime() for i in 0 ..< PARALLEL_REQUESTS: if getBlobs: workers[i] = rman.fetchAncestorBlocksAndBlobsFromNetwork(rootList) From 2bbf1475cd1bf57f443ceb7cabe97d72af4df21b Mon Sep 17 00:00:00 2001 From: Henri DF Date: Tue, 31 Jan 2023 19:07:29 +0100 Subject: [PATCH 8/9] Review feedback --- beacon_chain/nimbus_beacon_node.nim | 2 +- beacon_chain/sync/request_manager.nim | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 5472c3fe0f..25e2dae2b1 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -386,7 +386,7 @@ proc initFullNode( node.processor = processor node.blockProcessor = blockProcessor node.consensusManager = consensusManager - node.requestManager = RequestManager.init(node.network, dag, getBeaconTime, + node.requestManager = RequestManager.init(node.network, dag.cfg, getBeaconTime, blockVerifier, blockBlobsVerifier) node.syncManager = syncManager node.backfiller = backfiller diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index 4a4c518ab1..ca3b32b94f 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -39,7 +39,7 @@ type RequestManager* = object network*: Eth2Node inpQueue*: AsyncQueue[FetchRecord] - dag: ChainDAGRef + cfg: RuntimeConfig getBeaconTime: GetBeaconTimeFn blockVerifier: BlockVerifier blockBlobsVerifier: BlockBlobsVerifier @@ -52,14 +52,14 @@ func shortLog*(x: seq[FetchRecord]): string = "[" & x.mapIt(shortLog(it.root)).join(", ") & "]" proc init*(T: type RequestManager, network: Eth2Node, - dag: ChainDAGRef, + cfg: RuntimeConfig, getBeaconTime: GetBeaconTimeFn, blockVerifier: BlockVerifier, blockBlobsVerifier: BlockBlobsVerifier): RequestManager = RequestManager( network: network, inpQueue: newAsyncQueue[FetchRecord](), - dag: dag, + cfg: cfg, getBeaconTime: getBeaconTime, blockVerifier: blockVerifier, blockBlobsVerifier: blockBlobsVerifier, @@ -249,7 +249,7 @@ proc fetchAncestorBlocksAndBlobsFromNetwork(rman: RequestManager, proc isBlobsTime(rman: RequestManager): bool = - return rman.getBeaconTime().slotOrZero.epoch >= rman.dag.cfg.EIP4844_FORK_EPOCH + rman.getBeaconTime().slotOrZero.epoch >= rman.cfg.EIP4844_FORK_EPOCH proc requestManagerLoop(rman: RequestManager) {.async.} = var rootList = newSeq[Eth2Digest]() From ccfc99d1b36a0f2d632b7893e9845f1026000faf Mon Sep 17 00:00:00 2001 From: Henri DF Date: Tue, 31 Jan 2023 20:28:27 +0100 Subject: [PATCH 9/9] expressionify an if --- beacon_chain/sync/request_manager.nim | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/beacon_chain/sync/request_manager.nim b/beacon_chain/sync/request_manager.nim index ca3b32b94f..2d60823533 100644 --- a/beacon_chain/sync/request_manager.nim +++ b/beacon_chain/sync/request_manager.nim @@ -274,11 +274,10 @@ proc requestManagerLoop(rman: RequestManager) {.async.} = # peer and fall back to requesting blocks only. let getBlobs = rman.isBlobsTime() for i in 0 ..< PARALLEL_REQUESTS: - if getBlobs: - workers[i] = rman.fetchAncestorBlocksAndBlobsFromNetwork(rootList) - else: - workers[i] = rman.fetchAncestorBlocksFromNetwork(rootList) - + workers[i] = if getBlobs: + rman.fetchAncestorBlocksAndBlobsFromNetwork(rootList) + else: + rman.fetchAncestorBlocksFromNetwork(rootList) # We do not care about await allFutures(workers)