From d7ab716eea1d1892e3358b1dece6b0e2cd31fce8 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 19 Mar 2015 10:57:02 +0100 Subject: [PATCH] Fixed mkdnode & added some tests --- cmd/ethtest/main.go | 19 ++++++++++++------- state/dump.go | 1 + state/state_object.go | 2 +- state/state_test.go | 20 +++++++++++++++++++- state/statedb.go | 4 ++++ trie/trie.go | 12 +++++++----- trie/trie_test.go | 11 ++++++++++- vm/vm.go | 2 +- 8 files changed, 55 insertions(+), 16 deletions(-) diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go index 23ae9e525..cf1ec6dfa 100644 --- a/cmd/ethtest/main.go +++ b/cmd/ethtest/main.go @@ -24,7 +24,6 @@ package main import ( "bytes" "encoding/json" - "fmt" "io" "io/ioutil" "log" @@ -33,8 +32,8 @@ import ( "strconv" "strings" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/tests/helper" @@ -136,7 +135,7 @@ func RunVmTest(r io.Reader) (failed int) { rexp := helper.FromHex(test.Out) if bytes.Compare(rexp, ret) != 0 { - fmt.Printf("FAIL: %s's return failed. Expected %x, got %x\n", name, rexp, ret) + helper.Log.Infof("FAIL: %s's return failed. Expected %x, got %x\n", name, rexp, ret) failed = 1 } @@ -148,7 +147,13 @@ func RunVmTest(r io.Reader) (failed int) { if len(test.Exec) == 0 { if obj.Balance().Cmp(common.Big(account.Balance)) != 0 { - fmt.Printf("FAIL: %s's : (%x) balance failed. Expected %v, got %v => %v\n", name, obj.Address()[:4], account.Balance, obj.Balance(), new(big.Int).Sub(common.Big(account.Balance), obj.Balance())) + helper.Log.Infof("FAIL: %s's : (%x) balance failed. Expected %v, got %v => %v\n", + name, + obj.Address()[:4], + account.Balance, + obj.Balance(), + new(big.Int).Sub(common.Big(account.Balance), obj.Balance()), + ) failed = 1 } } @@ -158,20 +163,20 @@ func RunVmTest(r io.Reader) (failed int) { vexp := helper.FromHex(value) if bytes.Compare(v, vexp) != 0 { - fmt.Printf("FAIL: %s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, common.BigD(vexp), common.BigD(v)) + helper.Log.Infof("FAIL: %s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, common.BigD(vexp), common.BigD(v)) failed = 1 } } } if !bytes.Equal(common.Hex2Bytes(test.PostStateRoot), statedb.Root()) { - fmt.Printf("FAIL: %s's : Post state root error. Expected %s, got %x\n", name, test.PostStateRoot, statedb.Root()) + helper.Log.Infof("FAIL: %s's : Post state root error. Expected %s, got %x\n", name, test.PostStateRoot, statedb.Root()) failed = 1 } if len(test.Logs) > 0 { if len(test.Logs) != len(logs) { - fmt.Printf("FAIL: log length mismatch. Expected %d, got %d", len(test.Logs), len(logs)) + helper.Log.Infof("FAIL: log length mismatch. Expected %d, got %d", len(test.Logs), len(logs)) failed = 1 } else { /* diff --git a/state/dump.go b/state/dump.go index c5f556e1a..6db0d5074 100644 --- a/state/dump.go +++ b/state/dump.go @@ -35,6 +35,7 @@ func (self *StateDB) RawDump() World { storageIt := stateObject.State.trie.Iterator() for storageIt.Next() { + fmt.Println("value", storageIt.Value) account.Storage[common.Bytes2Hex(storageIt.Key)] = common.Bytes2Hex(storageIt.Value) } world.Accounts[common.Bytes2Hex(it.Key)] = account diff --git a/state/state_object.go b/state/state_object.go index 8be9e28fc..cdb9abf79 100644 --- a/state/state_object.go +++ b/state/state_object.go @@ -5,8 +5,8 @@ import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) diff --git a/state/state_test.go b/state/state_test.go index 3ecc03ae0..3a1ea225d 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -1,12 +1,14 @@ package state import ( + "fmt" "math/big" + "testing" checker "gopkg.in/check.v1" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" ) type StateSuite struct { @@ -61,6 +63,22 @@ func (s *StateSuite) SetUpTest(c *checker.C) { s.state = New(nil, db) } +func TestNull(t *testing.T) { + db, _ := ethdb.NewMemDatabase() + state := New(nil, db) + + address := common.FromHex("0x823140710bf13990e4500136726d8b55") + state.NewStateObject(address) + //value := common.FromHex("0x823140710bf13990e4500136726d8b55") + value := make([]byte, 16) + fmt.Println("test it here", common.NewValue(value)) + state.SetState(address, []byte{0}, value) + state.Update(nil) + state.Sync() + value = state.GetState(address, []byte{0}) + fmt.Printf("res: %x\n", value) +} + func (s *StateSuite) TestSnapshot(c *checker.C) { stateobjaddr := []byte("aa") storageaddr := common.Big("0") diff --git a/state/statedb.go b/state/statedb.go index 80bbe2afd..d01b6056d 100644 --- a/state/statedb.go +++ b/state/statedb.go @@ -33,6 +33,10 @@ func New(root []byte, db common.Database) *StateDB { return &StateDB{db: db, trie: trie, stateObjects: make(map[string]*StateObject), refund: make(map[string]*big.Int)} } +func (self *StateDB) PrintRoot() { + self.trie.Trie.PrintRoot() +} + func (self *StateDB) EmptyLogs() { self.logs = nil } diff --git a/trie/trie.go b/trie/trie.go index 1c1112a7f..4f47151a4 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -6,8 +6,8 @@ import ( "fmt" "sync" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) func ParanoiaCheck(t1 *Trie, backend Backend) (bool, *Trie) { @@ -305,11 +305,13 @@ func (self *Trie) mknode(value *common.Value) Node { return NewShortNode(self, CompactDecode(string(value.Get(0).Bytes())), self.mknode(value.Get(1))) } case 17: - fnode := NewFullNode(self) - for i := 0; i < l; i++ { - fnode.set(byte(i), self.mknode(value.Get(i))) + if len(value.Bytes()) != 17 { + fnode := NewFullNode(self) + for i := 0; i < l; i++ { + fnode.set(byte(i), self.mknode(value.Get(i))) + } + return fnode } - return fnode case 32: return &HashNode{value.Bytes(), self} } diff --git a/trie/trie_test.go b/trie/trie_test.go index 1393e0c97..16311aadf 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -5,8 +5,8 @@ import ( "fmt" "testing" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) type Db map[string][]byte @@ -32,6 +32,15 @@ func TestEmptyTrie(t *testing.T) { } } +func TestNull(t *testing.T) { + trie := NewEmpty() + + key := make([]byte, 32) + value := common.FromHex("0x823140710bf13990e4500136726d8b55") + trie.Update(key, value) + value = trie.Get(key) +} + func TestInsert(t *testing.T) { trie := NewEmpty() diff --git a/vm/vm.go b/vm/vm.go index 4d9e88e1a..c1b365c5c 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -4,8 +4,8 @@ import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/state" )