aboutsummaryrefslogtreecommitdiffstats
path: root/core/blockchain_test.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-10-09 21:21:47 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-10-19 15:03:10 +0800
commita9d8dfc8e77330412b1f21e25a69b96d59567e36 (patch)
treeff4e6b4dbf34ba4b3aab0672adddbce764c855e4 /core/blockchain_test.go
parentb97e34a8e4d06b315cc495819ba6612f89dec54f (diff)
downloadgo-tangerine-a9d8dfc8e77330412b1f21e25a69b96d59567e36.tar.gz
go-tangerine-a9d8dfc8e77330412b1f21e25a69b96d59567e36.tar.zst
go-tangerine-a9d8dfc8e77330412b1f21e25a69b96d59567e36.zip
core, eth: roll back uncertain headers in failed fast syncs
Diffstat (limited to 'core/blockchain_test.go')
-rw-r--r--core/blockchain_test.go15
1 files changed, 13 insertions, 2 deletions
diff --git a/core/blockchain_test.go b/core/blockchain_test.go
index a614aaa2f..01667c21e 100644
--- a/core/blockchain_test.go
+++ b/core/blockchain_test.go
@@ -599,8 +599,8 @@ func testReorgBadHashes(t *testing.T, full bool) {
t.Errorf("last block gasLimit mismatch: have: %x, want %x", ncm.GasLimit(), blocks[2].Header().GasLimit)
}
} else {
- if ncm.CurrentHeader().Hash() != genesis.Hash() {
- t.Errorf("last header hash mismatch: have: %x, want %x", ncm.CurrentHeader().Hash(), genesis.Hash())
+ if ncm.CurrentHeader().Hash() != headers[2].Hash() {
+ t.Errorf("last header hash mismatch: have: %x, want %x", ncm.CurrentHeader().Hash(), headers[2].Hash())
}
}
}
@@ -775,6 +775,11 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) {
height := uint64(1024)
blocks, receipts := GenerateChain(genesis, gendb, int(height), nil)
+ // Configure a subchain to roll back
+ remove := []common.Hash{}
+ for _, block := range blocks[height/2:] {
+ remove = append(remove, block.Hash())
+ }
// Create a small assertion method to check the three heads
assert := func(t *testing.T, kind string, chain *BlockChain, header uint64, fast uint64, block uint64) {
if num := chain.CurrentBlock().NumberU64(); num != block {
@@ -798,6 +803,8 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) {
t.Fatalf("failed to process block %d: %v", n, err)
}
assert(t, "archive", archive, height, height, height)
+ archive.Rollback(remove)
+ assert(t, "archive", archive, height/2, height/2, height/2)
// Import the chain as a non-archive node and ensure all pointers are updated
fastDb, _ := ethdb.NewMemDatabase()
@@ -816,6 +823,8 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) {
t.Fatalf("failed to insert receipt %d: %v", n, err)
}
assert(t, "fast", fast, height, height, 0)
+ fast.Rollback(remove)
+ assert(t, "fast", fast, height/2, height/2, 0)
// Import the chain as a light node and ensure all pointers are updated
lightDb, _ := ethdb.NewMemDatabase()
@@ -827,6 +836,8 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) {
t.Fatalf("failed to insert header %d: %v", n, err)
}
assert(t, "light", light, height, 0, 0)
+ light.Rollback(remove)
+ assert(t, "light", light, height/2, 0, 0)
}
// Tests that chain reorganizations handle transaction removals and reinsertions.