func (t *BlockTest) ValidatePostState(statedb *state.StateDB) error { // validate post state accounts in test file against what we have in state db for addrString, acct := range t.postAccounts { // XXX: is is worth it checking for errors here? addr, err := hex.DecodeString(addrString) if err != nil { return err } code, err := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x")) if err != nil { return err } balance, ok := new(big.Int).SetString(acct.Balance, 0) if !ok { return err } nonce, err := strconv.ParseUint(prepInt(16, acct.Nonce), 16, 64) if err != nil { return err } // address is indirectly verified by the other fields, as it's the db key code2 := statedb.GetCode(common.BytesToAddress(addr)) balance2 := statedb.GetBalance(common.BytesToAddress(addr)) nonce2 := statedb.GetNonce(common.BytesToAddress(addr)) if !bytes.Equal(code2, code) { return fmt.Errorf("account code mismatch for addr: %s want: %s have: %s", addrString, hex.EncodeToString(code), hex.EncodeToString(code2)) } if balance2.Cmp(balance) != 0 { return fmt.Errorf("account balance mismatch for addr: %s, want: %d, have: %d", addrString, balance, balance2) } if nonce2 != nonce { return fmt.Errorf("account nonce mismatch for addr: %s want: %d have: %d", addrString, nonce, nonce2) } } return nil }