package state import ( "sync" "github.com/ethereum/go-ethereum/common" ) // StoragePool is used to store maps of originStorage of stateObjects type StoragePool struct { sync.RWMutex sharedMap map[common.Address]*sync.Map } func NewStoragePool() *StoragePool { sharedMap := make(map[common.Address]*sync.Map) return &StoragePool{ sync.RWMutex{}, sharedMap, } } // getStorage Check whether the storage exist in pool, // new one if not exist, the content of storage will be fetched in stateObjects.GetCommittedState() func (s *StoragePool) getStorage(address common.Address) *sync.Map { s.RLock() storageMap, ok := s.sharedMap[address] s.RUnlock() if !ok { s.Lock() defer s.Unlock() if storageMap, ok = s.sharedMap[address]; !ok { m := new(sync.Map) s.sharedMap[address] = m return m } } return storageMap }