Skip to content

Commit

Permalink
core/state: use maps.Clone (ethereum#29365)
Browse files Browse the repository at this point in the history
core: using maps.Clone
  • Loading branch information
cuiweixie authored Apr 2, 2024
1 parent fe0bf32 commit ab6419c
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 19 deletions.
12 changes: 4 additions & 8 deletions core/state/access_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package state

import (
"maps"

"github.com/ethereum/go-ethereum/common"
)

Expand Down Expand Up @@ -57,16 +59,10 @@ func newAccessList() *accessList {
// Copy creates an independent copy of an accessList.
func (a *accessList) Copy() *accessList {
cp := newAccessList()
for k, v := range a.addresses {
cp.addresses[k] = v
}
cp.addresses = maps.Clone(a.addresses)
cp.slots = make([]map[common.Hash]struct{}, len(a.slots))
for i, slotMap := range a.slots {
newSlotmap := make(map[common.Hash]struct{}, len(slotMap))
for k := range slotMap {
newSlotmap[k] = struct{}{}
}
cp.slots[i] = newSlotmap
cp.slots[i] = maps.Clone(slotMap)
}
return cp
}
Expand Down
7 changes: 2 additions & 5 deletions core/state/state_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"bytes"
"fmt"
"io"
"maps"
"time"

"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -47,11 +48,7 @@ func (s Storage) String() (str string) {
}

func (s Storage) Copy() Storage {
cpy := make(Storage, len(s))
for key, value := range s {
cpy[key] = value
}
return cpy
return maps.Clone(s)
}

// stateObject represents an Ethereum account which is being modified.
Expand Down
10 changes: 4 additions & 6 deletions core/state/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package state

import (
"fmt"
"maps"
"math/big"
"slices"
"sort"
Expand Down Expand Up @@ -750,9 +751,8 @@ func (s *StateDB) Copy() *StateDB {
state.stateObjectsDirty[addr] = struct{}{}
}
// Deep copy the destruction markers.
for addr, value := range s.stateObjectsDestruct {
state.stateObjectsDestruct[addr] = value
}
state.stateObjectsDestruct = maps.Clone(s.stateObjectsDestruct)

// Deep copy the state changes made in the scope of block
// along with their original values.
state.accounts = copySet(s.accounts)
Expand All @@ -770,9 +770,7 @@ func (s *StateDB) Copy() *StateDB {
state.logs[hash] = cpy
}
// Deep copy the preimages occurred in the scope of block
for hash, preimage := range s.preimages {
state.preimages[hash] = preimage
}
state.preimages = maps.Clone(s.preimages)
// Do we need to copy the access list and transient storage?
// In practice: No. At the start of a transaction, these two lists are empty.
// In practice, we only ever copy state _between_ transactions/blocks, never
Expand Down

0 comments on commit ab6419c

Please sign in to comment.