From 739f36c64087dee365fec5a89025276011b21b1e Mon Sep 17 00:00:00 2001 From: kdeme Date: Mon, 8 Jul 2019 17:10:59 +0200 Subject: [PATCH 1/3] Add skip parameter in getSuccessorHeader + add getAncestorHeader --- nimbus/p2p/chain.nim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/nimbus/p2p/chain.nim b/nimbus/p2p/chain.nim index 1b26f42a2..df31b8ad0 100644 --- a/nimbus/p2p/chain.nim +++ b/nimbus/p2p/chain.nim @@ -23,8 +23,14 @@ method getBlockHeader*(c: Chain, b: HashOrNum, output: var BlockHeader): bool {. method getBestBlockHeader*(c: Chain): BlockHeader {.gcsafe.} = c.db.getCanonicalHead() -method getSuccessorHeader*(c: Chain, h: BlockHeader, output: var BlockHeader): bool {.gcsafe.} = - let n = h.blockNumber + 1 +method getSuccessorHeader*(c: Chain, h: BlockHeader, output: var BlockHeader, skip = 0'u): bool {.gcsafe.} = + let n = if skip > 0'u: h.blockNumber + 1 + skip.toBlockNumber + else: h.blockNumber + 1 + result = c.db.getBlockHeader(n, output) + +method getAncestorHeader*(c: Chain, h: BlockHeader, output: var BlockHeader, skip = 0'u): bool {.gcsafe.} = + let n = if skip > 0'u: h.blockNumber - 1 - skip.toBlockNumber + else: h.blockNumber - 1 c.db.getBlockHeader(n, output) method getBlockBody*(c: Chain, blockHash: KeccakHash): BlockBodyRef = From 820989c7f5bb0362a103027ebcaf29f5543f5e4f Mon Sep 17 00:00:00 2001 From: kdeme Date: Mon, 8 Jul 2019 17:41:35 +0200 Subject: [PATCH 2/3] Bump nim-eth --- vendor/nim-eth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-eth b/vendor/nim-eth index 022139db5..1797b7635 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit 022139db5090312bf905d341ee5c9a1551d7f92e +Subproject commit 1797b7635124875fe0e212d7df5bd1836f22cbaa From f50d3f84f9d093057c7dc1815bfd14fe762e78c0 Mon Sep 17 00:00:00 2001 From: kdeme Date: Tue, 9 Jul 2019 15:52:41 +0200 Subject: [PATCH 3/3] Add bounds check on getSuccessorHeader and getAncestorHeader --- nimbus/p2p/chain.nim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nimbus/p2p/chain.nim b/nimbus/p2p/chain.nim index df31b8ad0..56ceec272 100644 --- a/nimbus/p2p/chain.nim +++ b/nimbus/p2p/chain.nim @@ -24,14 +24,14 @@ method getBestBlockHeader*(c: Chain): BlockHeader {.gcsafe.} = c.db.getCanonicalHead() method getSuccessorHeader*(c: Chain, h: BlockHeader, output: var BlockHeader, skip = 0'u): bool {.gcsafe.} = - let n = if skip > 0'u: h.blockNumber + 1 + skip.toBlockNumber - else: h.blockNumber + 1 - result = c.db.getBlockHeader(n, output) + let offset = 1 + skip.toBlockNumber + if h.blockNumber <= (not 0.toBlockNumber) - offset: + result = c.db.getBlockHeader(h.blockNumber + offset, output) method getAncestorHeader*(c: Chain, h: BlockHeader, output: var BlockHeader, skip = 0'u): bool {.gcsafe.} = - let n = if skip > 0'u: h.blockNumber - 1 - skip.toBlockNumber - else: h.blockNumber - 1 - c.db.getBlockHeader(n, output) + let offset = 1 + skip.toBlockNumber + if h.blockNumber >= offset: + result = c.db.getBlockHeader(h.blockNumber - offset, output) method getBlockBody*(c: Chain, blockHash: KeccakHash): BlockBodyRef = result = nil