aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2015-12-17 21:13:30 +0800
committerFelix Lange <fjl@twurst.com>2015-12-18 19:09:10 +0800
commit9be5d5cd90517244b239c6af4e602d898fafeaf7 (patch)
tree1c5b5ce8b26e2b5cbb399cd9d03e19e3307e9f6d
parent2baf1de00df56dee47161ad763788a92693b9c29 (diff)
downloaddexon-9be5d5cd90517244b239c6af4e602d898fafeaf7.tar.gz
dexon-9be5d5cd90517244b239c6af4e602d898fafeaf7.tar.zst
dexon-9be5d5cd90517244b239c6af4e602d898fafeaf7.zip
eth/downloader: fix negative balance issue in tests
The test chain generated by makeChainFork included invalid uncle headers, crashing the generator during the state commit. The headers were invalid because they used the iteration counter as the block number, even though makeChainFork uses a block with number > 0 as the parent. Fix this by introducing BlockGen.Number, which allows accessing the actual number of the block being generated.
-rw-r--r--core/chain_makers.go5
-rw-r--r--eth/downloader/downloader_test.go7
2 files changed, 10 insertions, 2 deletions
diff --git a/core/chain_makers.go b/core/chain_makers.go
index 4f6fa3989..5a8f380a3 100644
--- a/core/chain_makers.go
+++ b/core/chain_makers.go
@@ -104,6 +104,11 @@ func (b *BlockGen) AddTx(tx *types.Transaction) {
b.receipts = append(b.receipts, receipt)
}
+// Number returns the block number of the block being generated.
+func (b *BlockGen) Number() *big.Int {
+ return new(big.Int).Set(b.header.Number)
+}
+
// AddUncheckedReceipts forcefully adds a receipts to the block without a
// backing transaction.
//
diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go
index cfcc8a2ef..f02418a2f 100644
--- a/eth/downloader/downloader_test.go
+++ b/eth/downloader/downloader_test.go
@@ -61,8 +61,11 @@ func makeChain(n int, seed byte, parent *types.Block, parentReceipts types.Recei
block.AddTx(tx)
}
// If the block number is a multiple of 5, add a bonus uncle to the block
- if i%5 == 0 {
- block.AddUncle(&types.Header{ParentHash: block.PrevBlock(i - 1).Hash(), Number: big.NewInt(int64(i - 1))})
+ if i > 0 && i%5 == 0 {
+ block.AddUncle(&types.Header{
+ ParentHash: block.PrevBlock(i - 1).Hash(),
+ Number: big.NewInt(block.Number().Int64() - 1),
+ })
}
})
// Convert the block-chain into a hash-chain and header/block maps