aboutsummaryrefslogtreecommitdiffstats
path: root/tests/state_test_util.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/state_test_util.go')
-rw-r--r--tests/state_test_util.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/tests/state_test_util.go b/tests/state_test_util.go
index 84581fae1..5d2251e52 100644
--- a/tests/state_test_util.go
+++ b/tests/state_test_util.go
@@ -146,7 +146,18 @@ func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config) (*state.StateD
if logs := rlpHash(statedb.Logs()); logs != common.Hash(post.Logs) {
return statedb, fmt.Errorf("post state logs hash mismatch: got %x, want %x", logs, post.Logs)
}
- root, _ := statedb.Commit(config.IsEIP158(block.Number()))
+ // Commit block
+ statedb.Commit(config.IsEIP158(block.Number()))
+ // Add 0-value mining reward. This only makes a difference in the cases
+ // where
+ // - the coinbase suicided, or
+ // - there are only 'bad' transactions, which aren't executed. In those cases,
+ // the coinbase gets no txfee, so isn't created, and thus needs to be touched
+ statedb.AddBalance(block.Coinbase(), new(big.Int))
+ // And _now_ get the state root
+ root := statedb.IntermediateRoot(config.IsEIP158(block.Number()))
+ // N.B: We need to do this in a two-step process, because the first Commit takes care
+ // of suicides, and we need to touch the coinbase _after_ it has potentially suicided.
if root != common.Hash(post.Root) {
return statedb, fmt.Errorf("post state root mismatch: got %x, want %x", root, post.Root)
}