From b08abe64e4d2e3fa8d10c89647595226d6b31b19 Mon Sep 17 00:00:00 2001
From: Gustav Simonsson <gustav.simonsson@gmail.com>
Date: Tue, 7 Jul 2015 23:57:54 +0200
Subject: [PATCH] Unskip SimpleTx3, check err in pre/post state validations

---
 tests/block_test_util.go | 40 ++++++++++++++++++++++++++++++++--------
 tests/init.go            |  7 +------
 2 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/tests/block_test_util.go b/tests/block_test_util.go
index 5432bf8450..e624cced0f 100644
--- a/tests/block_test_util.go
+++ b/tests/block_test_util.go
@@ -208,10 +208,22 @@ func (t *BlockTest) InsertPreState(ethereum *eth.Ethereum) (*state.StateDB, erro
 	db := ethereum.StateDb()
 	statedb := state.New(common.Hash{}, db)
 	for addrString, acct := range t.preAccounts {
-		addr, _ := hex.DecodeString(addrString)
-		code, _ := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x"))
-		balance, _ := new(big.Int).SetString(acct.Balance, 0)
-		nonce, _ := strconv.ParseUint(acct.Nonce, 16, 64)
+		addr, err := hex.DecodeString(addrString)
+		if err != nil {
+			return nil, err
+		}
+		code, err := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x"))
+		if err != nil {
+			return nil, err
+		}
+		balance, ok := new(big.Int).SetString(acct.Balance, 0)
+		if !ok {
+			return nil, err
+		}
+		nonce, err := strconv.ParseUint(prepInt(16, acct.Nonce), 16, 64)
+		if err != nil {
+			return nil, err
+		}
 
 		if acct.PrivateKey != "" {
 			privkey, err := hex.DecodeString(strings.TrimPrefix(acct.PrivateKey, "0x"))
@@ -365,10 +377,22 @@ func (s *BlockTest) validateBlockHeader(h *btHeader, h2 *types.Header) error {
 func (t *BlockTest) ValidatePostState(statedb *state.StateDB) error {
 	for addrString, acct := range t.preAccounts {
 		// XXX: is is worth it checking for errors here?
-		addr, _ := hex.DecodeString(addrString)
-		code, _ := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x"))
-		balance, _ := new(big.Int).SetString(acct.Balance, 0)
-		nonce, _ := strconv.ParseUint(acct.Nonce, 16, 64)
+		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))
diff --git a/tests/init.go b/tests/init.go
index 94178af5fd..f149c11f1d 100644
--- a/tests/init.go
+++ b/tests/init.go
@@ -37,11 +37,6 @@ var (
 	vmTestDir          = filepath.Join(baseDir, "VMTests")
 
 	BlockSkipTests = []string{
-		// Fails in InsertPreState with: computed state root does not
-		// match genesis block bba25a96 0d8f85c8 Christoph said it will be
-		// fixed eventually
-		"SimpleTx3",
-
 		// These tests are not valid, as they are out of scope for RLP and
 		// the consensus protocol.
 		"BLOCK__RandomByteAtTheEnd",
@@ -50,7 +45,7 @@ var (
 		"TRANSCT__ZeroByteAtTheEnd",
 	}
 
-	/* Go does not support transaction (account) nonces above 2^64. This
+	/* Go client does not support transaction (account) nonces above 2^64. This
 	technically breaks consensus but is regarded as "reasonable
 	engineering constraint" as accounts cannot easily reach such high
 	nonce values in practice
-- 
GitLab