diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index 9d0f200f0838..8a0ca0b8e669 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -27,7 +27,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/state/account" + accs "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/core/state/pruner" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/crypto" @@ -288,7 +288,7 @@ func traverseState(ctx *cli.Context) error { accIter := trie.NewIterator(t.NodeIterator(nil)) for accIter.Next() { accounts += 1 - var acc account.Account + var acc accs.Account if err := rlp.DecodeBytes(accIter.Value, &acc); err != nil { log.Error("Invalid account encountered during traversal", "err", err) return err @@ -394,7 +394,7 @@ func traverseRawState(ctx *cli.Context) error { // dig into the storage trie further. if accIter.Leaf() { accounts += 1 - var acc account.Account + var acc accs.Account if err := rlp.DecodeBytes(accIter.LeafBlob(), &acc); err != nil { log.Error("Invalid account encountered during traversal", "err", err) return errors.New("invalid account") diff --git a/core/state/account/account.go b/core/state/accounts/accounts.go similarity index 100% rename from core/state/account/account.go rename to core/state/accounts/accounts.go diff --git a/core/state/database.go b/core/state/database.go index a6e0e46fe207..45889bd4501d 100644 --- a/core/state/database.go +++ b/core/state/database.go @@ -23,7 +23,7 @@ import ( "github.com/VictoriaMetrics/fastcache" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/trie" lru "github.com/hashicorp/golang-lru" @@ -72,7 +72,7 @@ type Trie interface { TryGet(key []byte) ([]byte, error) // TryUpdateAccount abstract an account write in the trie. - TryUpdateAccount(key []byte, acc account.Account) error + TryUpdateAccount(key []byte, acc *accounts.Account) error // TryUpdate associates key with value in the trie. If value has length zero, any // existing value is deleted from the trie. The value bytes must not be modified diff --git a/core/state/dump.go b/core/state/dump.go index 412143579dc1..e4f451d63389 100644 --- a/core/state/dump.go +++ b/core/state/dump.go @@ -23,7 +23,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core/state/account" + acts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" @@ -141,7 +141,7 @@ func (s *StateDB) DumpToCollector(c DumpCollector, conf *DumpConfig) (nextKey [] it := trie.NewIterator(s.trie.NodeIterator(conf.Start)) for it.Next() { - var data account.Account + var data acts.Account if err := rlp.DecodeBytes(it.Value, &data); err != nil { panic(err) } diff --git a/core/state/iterator.go b/core/state/iterator.go index 864b95c4b33f..3d93f2a58e2a 100644 --- a/core/state/iterator.go +++ b/core/state/iterator.go @@ -21,7 +21,7 @@ import ( "fmt" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) @@ -105,7 +105,7 @@ func (it *NodeIterator) step() error { return nil } // Otherwise we've reached an account node, initiate data iteration - var account account.Account + var account accounts.Account if err := rlp.Decode(bytes.NewReader(it.stateIt.LeafBlob()), &account); err != nil { return err } diff --git a/core/state/pruner/pruner.go b/core/state/pruner/pruner.go index 832e4a86cc98..17def67a8ebb 100644 --- a/core/state/pruner/pruner.go +++ b/core/state/pruner/pruner.go @@ -29,7 +29,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" @@ -426,7 +426,7 @@ func extractGenesis(db ethdb.Database, stateBloom *stateBloom) error { // If it's a leaf node, yes we are touching an account, // dig into the storage trie further. if accIter.Leaf() { - var acc account.Account + var acc accounts.Account if err := rlp.DecodeBytes(accIter.LeafBlob(), &acc); err != nil { return err } diff --git a/core/state/state_object.go b/core/state/state_object.go index 21b9263f0f08..dc5e1a81db81 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -19,11 +19,12 @@ package state import ( "bytes" "fmt" + "io" "math/big" "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" @@ -65,7 +66,7 @@ func (s Storage) Copy() Storage { type stateObject struct { address common.Address addrHash common.Hash // hash of ethereum address of the account - data account.Account + data accounts.Account db *StateDB // DB error. @@ -98,7 +99,7 @@ func (s *stateObject) empty() bool { } // newObject creates a state object. -func newObject(db *StateDB, address common.Address, data account.Account) *stateObject { +func newObject(db *StateDB, address common.Address, data accounts.Account) *stateObject { if data.Balance == nil { data.Balance = new(big.Int) } @@ -119,6 +120,11 @@ func newObject(db *StateDB, address common.Address, data account.Account) *state } } +// EncodeRLP implements rlp.Encoder. +func (s *stateObject) EncodeRLP(io.Writer) error { + panic("deprecated code, should not be called") +} + // setError remembers the first non-nil error it is called with. func (s *stateObject) setError(err error) { if s.dbErr == nil { diff --git a/core/state/statedb.go b/core/state/statedb.go index 6ac2ff3eca3d..f8d10c2dc816 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -26,7 +26,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" @@ -461,7 +461,7 @@ func (s *StateDB) updateStateObject(obj *stateObject) { } // Encode the account and update the account trie addr := obj.Address() - if err := s.trie.TryUpdateAccount(addr[:], obj.data); err != nil { + if err := s.trie.TryUpdateAccount(addr[:], &obj.data); err != nil { //if err := s.trie.TryUpdateAccount(addr[:], obj.data); err != nil { s.setError(fmt.Errorf("updateStateObject (%x) error: %v", addr[:], err)) } @@ -509,7 +509,7 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject { } // If no live objects are available, attempt to use snapshots var ( - data *account.Account + data *accounts.Account err error ) if s.snap != nil { @@ -521,7 +521,7 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject { if acc == nil { return nil } - data = &account.Account{ + data = &accounts.Account{ Nonce: acc.Nonce, Balance: acc.Balance, CodeHash: acc.CodeHash, @@ -548,7 +548,7 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject { if len(enc) == 0 { return nil } - data = new(account.Account) + data = new(accounts.Account) if err := rlp.DecodeBytes(enc, data); err != nil { log.Error("Failed to decode state object", "addr", addr, "err", err) return nil @@ -585,7 +585,7 @@ func (s *StateDB) createObject(addr common.Address) (newobj, prev *stateObject) s.snapDestructs[prev.addrHash] = struct{}{} } } - newobj = newObject(s, addr, account.Account{}) + newobj = newObject(s, addr, accounts.Account{}) if prev == nil { s.journal.append(createObjectChange{account: &addr}) } else { @@ -939,7 +939,7 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (common.Hash, error) { } // The onleaf func is called _serially_, so we can reuse the same account // for unmarshalling every time. - var account account.Account + var account accounts.Account root, accountCommitted, err := s.trie.Commit(func(_ [][]byte, _ []byte, leaf []byte, parent common.Hash) error { if err := rlp.DecodeBytes(leaf, &account); err != nil { return nil diff --git a/core/state/sync.go b/core/state/sync.go index 167ba3c47665..43f78849c71b 100644 --- a/core/state/sync.go +++ b/core/state/sync.go @@ -20,7 +20,7 @@ import ( "bytes" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" @@ -44,7 +44,7 @@ func NewStateSync(root common.Hash, database ethdb.KeyValueReader, bloom *trie.S return err } } - var obj account.Account + var obj accounts.Account if err := rlp.Decode(bytes.NewReader(leaf), &obj); err != nil { return err } diff --git a/core/state/sync_test.go b/core/state/sync_test.go index 75244538fb8d..3dfdf3c68ac5 100644 --- a/core/state/sync_test.go +++ b/core/state/sync_test.go @@ -23,7 +23,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state/account" + accs "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb/memorydb" @@ -204,7 +204,7 @@ func testIterativeStateSync(t *testing.T, count int, commit bool, bypath bool) { } results[len(hashQueue)+i] = trie.SyncResult{Hash: crypto.Keccak256Hash(data), Data: data} } else { - var acc account.Account + var acc accs.Account if err := rlp.DecodeBytes(srcTrie.Get(path[0]), &acc); err != nil { t.Fatalf("failed to decode account on path %x: %v", path, err) } diff --git a/eth/protocols/snap/handler.go b/eth/protocols/snap/handler.go index 55b78072e5fe..35ab5f8147fe 100644 --- a/eth/protocols/snap/handler.go +++ b/eth/protocols/snap/handler.go @@ -23,7 +23,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" - accounT "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" @@ -319,7 +319,7 @@ func handleMessage(backend Backend, peer *Peer) error { if err != nil { return p2p.Send(peer.rw, StorageRangesMsg, &StorageRangesPacket{ID: req.ID}) } - var acc accounT.Account + var acc accounts.Account if err := rlp.DecodeBytes(accTrie.Get(account[:]), &acc); err != nil { return p2p.Send(peer.rw, StorageRangesMsg, &StorageRangesPacket{ID: req.ID}) } diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go index fcc0a4b99003..33110ba05835 100644 --- a/eth/protocols/snap/sync.go +++ b/eth/protocols/snap/sync.go @@ -31,7 +31,7 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" - accounT "github.com/ethereum/go-ethereum/core/state/account" + acts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" @@ -126,8 +126,8 @@ type accountRequest struct { type accountResponse struct { task *accountTask // Task which this request is filling - hashes []common.Hash // Account hashes in the returned range - accounts []*accounT.Account // Expanded accounts in the returned range + hashes []common.Hash // Account hashes in the returned range + accounts []*acts.Account // Expanded accounts in the returned range cont bool // Whether the account range has a continuation } @@ -2275,9 +2275,9 @@ func (s *Syncer) OnAccounts(peer SyncPeer, id uint64, hashes []common.Hash, acco s.scheduleRevertAccountRequest(req) return err } - accs := make([]*accounT.Account, len(accounts)) + accs := make([]*acts.Account, len(accounts)) for i, account := range accounts { - acc := new(accounT.Account) + acc := new(acts.Account) if err := rlp.DecodeBytes(account, acc); err != nil { panic(err) // We created these blobs, we must be able to decode them } @@ -2741,7 +2741,7 @@ func (s *Syncer) onHealByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) e // Note it's not concurrent safe, please handle the concurrent issue outside. func (s *Syncer) onHealState(paths [][]byte, value []byte) error { if len(paths) == 1 { - var account accounT.Account + var account acts.Account if err := rlp.DecodeBytes(value, &account); err != nil { return nil } diff --git a/eth/protocols/snap/sync_test.go b/eth/protocols/snap/sync_test.go index 4230e71bc6a8..da720a8f3c28 100644 --- a/eth/protocols/snap/sync_test.go +++ b/eth/protocols/snap/sync_test.go @@ -29,7 +29,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state/account" + acts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/light" @@ -1349,7 +1349,7 @@ func makeAccountTrieNoStorage(n int) (*trie.Trie, entrySlice) { accTrie, _ := trie.New(common.Hash{}, db) var entries entrySlice for i := uint64(1); i <= uint64(n); i++ { - value, _ := rlp.EncodeToBytes(account.Account{ + value, _ := rlp.EncodeToBytes(acts.Account{ Nonce: i, Balance: big.NewInt(int64(i)), Root: emptyRoot, @@ -1394,7 +1394,7 @@ func makeBoundaryAccountTrie(n int) (*trie.Trie, entrySlice) { } // Fill boundary accounts for i := 0; i < len(boundaries); i++ { - value, _ := rlp.EncodeToBytes(account.Account{ + value, _ := rlp.EncodeToBytes(acts.Account{ Nonce: uint64(0), Balance: big.NewInt(int64(i)), Root: emptyRoot, @@ -1406,7 +1406,7 @@ func makeBoundaryAccountTrie(n int) (*trie.Trie, entrySlice) { } // Fill other accounts if required for i := uint64(1); i <= uint64(n); i++ { - value, _ := rlp.EncodeToBytes(account.Account{ + value, _ := rlp.EncodeToBytes(acts.Account{ Nonce: i, Balance: big.NewInt(int64(i)), Root: emptyRoot, @@ -1442,7 +1442,7 @@ func makeAccountTrieWithStorageWithUniqueStorage(accounts, slots int, code bool) stTrie, stEntries := makeStorageTrieWithSeed(uint64(slots), i, db) stRoot := stTrie.Hash() stTrie.Commit(nil) - value, _ := rlp.EncodeToBytes(account.Account{ + value, _ := rlp.EncodeToBytes(acts.Account{ Nonce: i, Balance: big.NewInt(int64(i)), Root: stRoot, @@ -1489,7 +1489,7 @@ func makeAccountTrieWithStorage(accounts, slots int, code, boundary bool) (*trie if code { codehash = getCodeHash(i) } - value, _ := rlp.EncodeToBytes(account.Account{ + value, _ := rlp.EncodeToBytes(acts.Account{ Nonce: i, Balance: big.NewInt(int64(i)), Root: stRoot, diff --git a/les/server_handler.go b/les/server_handler.go index 330aced04c9f..9c04c56f2be8 100644 --- a/les/server_handler.go +++ b/les/server_handler.go @@ -27,7 +27,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/forkid" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/les/flowcontrol" "github.com/ethereum/go-ethereum/light" @@ -358,18 +358,18 @@ func (h *serverHandler) AddTxsSync() bool { } // getAccount retrieves an account from the state based on root. -func getAccount(triedb *trie.Database, root, hash common.Hash) (account.Account, error) { +func getAccount(triedb *trie.Database, root, hash common.Hash) (accounts.Account, error) { trie, err := trie.New(root, triedb) if err != nil { - return account.Account{}, err + return accounts.Account{}, err } blob, err := trie.TryGet(hash[:]) if err != nil { - return account.Account{}, err + return accounts.Account{}, err } - var acc account.Account + var acc accounts.Account if err = rlp.DecodeBytes(blob, &acc); err != nil { - return account.Account{}, err + return accounts.Account{}, err } return acc, nil } diff --git a/light/trie.go b/light/trie.go index 381a4098ca40..2c657eeb3f78 100644 --- a/light/trie.go +++ b/light/trie.go @@ -24,7 +24,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" @@ -113,7 +113,7 @@ func (t *odrTrie) TryGet(key []byte) ([]byte, error) { return res, err } -func (t *odrTrie) TryUpdateAccount(key []byte, acc account.Account) error { +func (t *odrTrie) TryUpdateAccount(key []byte, acc *accounts.Account) error { key = crypto.Keccak256(key) value, err := rlp.EncodeToBytes(acc) if err != nil { diff --git a/trie/secure_trie.go b/trie/secure_trie.go index bc2ddb027cae..fa3cb869bc17 100644 --- a/trie/secure_trie.go +++ b/trie/secure_trie.go @@ -20,7 +20,7 @@ import ( "fmt" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) @@ -89,7 +89,7 @@ func (t *SecureTrie) TryGetNode(path []byte) ([]byte, int, error) { // TryUpdate account will abstract the write of an account to the // secure trie. -func (t *SecureTrie) TryUpdateAccount(key []byte, acc account.Account) error { +func (t *SecureTrie) TryUpdateAccount(key []byte, acc *accounts.Account) error { hk := t.hashKey(key) data, err := rlp.EncodeToBytes(acc) if err != nil { diff --git a/trie/trie.go b/trie/trie.go index 311ae5de36d6..823a37e10e31 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -24,7 +24,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state/account" + accounts "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" @@ -248,7 +248,7 @@ func (t *Trie) Update(key, value []byte) { } } -func (t *Trie) TryUpdateAccount(addr []byte, account account.Account) error { +func (t *Trie) TryUpdateAccount(addr []byte, account accounts.Account) error { data, err := rlp.EncodeToBytes(account) if err != nil { return fmt.Errorf("can't encode object at %x: %w", addr[:], err) diff --git a/trie/trie_test.go b/trie/trie_test.go index 29dc650e54d4..7d826726b87c 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -32,7 +32,7 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state/account" + accs "github.com/ethereum/go-ethereum/core/state/accounts" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb/leveldb" @@ -562,7 +562,7 @@ func BenchmarkCommitAfterHash(b *testing.B) { b.Run("no-onleaf", func(b *testing.B) { benchmarkCommitAfterHash(b, nil) }) - var a account.Account + var a accs.Account onleaf := func(paths [][]byte, hexpath []byte, leaf []byte, parent common.Hash) error { rlp.DecodeBytes(leaf, &a) return nil @@ -658,7 +658,7 @@ func makeAccounts(size int) (addresses [][20]byte, accounts [][]byte) { balanceBytes := make([]byte, numBytes) random.Read(balanceBytes) balance := new(big.Int).SetBytes(balanceBytes) - data, _ := rlp.EncodeToBytes(&account.Account{Nonce: nonce, Balance: balance, Root: root, CodeHash: code}) + data, _ := rlp.EncodeToBytes(&accs.Account{Nonce: nonce, Balance: balance, Root: root, CodeHash: code}) accounts[i] = data } return addresses, accounts