e639cb4a82
* evm: use transient store for access list * evm: remove address and slot access list mappings * update tests * update * changelog * update types
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package types
|
|
|
|
import (
|
|
ethcmn "github.com/ethereum/go-ethereum/common"
|
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
|
)
|
|
|
|
// AccessList is an EIP-2930 access list that represents the slice of
|
|
// the protobuf AccessTuples.
|
|
type AccessList []AccessTuple
|
|
|
|
// NewAccessList creates a new protobuf-compatible AccessList from an ethereum
|
|
// core AccessList type
|
|
func NewAccessList(ethAccessList *ethtypes.AccessList) AccessList {
|
|
if ethAccessList == nil {
|
|
return nil
|
|
}
|
|
|
|
var AccessListMappings AccessList
|
|
for _, tuple := range *ethAccessList {
|
|
storageKeys := make([]string, len(tuple.StorageKeys))
|
|
|
|
for i := range tuple.StorageKeys {
|
|
storageKeys[i] = tuple.StorageKeys[i].String()
|
|
}
|
|
|
|
AccessListMappings = append(AccessListMappings, AccessTuple{
|
|
Address: tuple.Address.String(),
|
|
StorageKeys: storageKeys,
|
|
})
|
|
}
|
|
|
|
return AccessListMappings
|
|
}
|
|
|
|
// ToEthAccessList is an utility function to convert the protobuf compatible
|
|
// AccessList to eth core AccessList from go-ethereum
|
|
func (al AccessList) ToEthAccessList() *ethtypes.AccessList {
|
|
var AccessListMappings ethtypes.AccessList
|
|
|
|
for _, tuple := range al {
|
|
storageKeys := make([]ethcmn.Hash, len(tuple.StorageKeys))
|
|
|
|
for i := range tuple.StorageKeys {
|
|
storageKeys[i] = ethcmn.HexToHash(tuple.StorageKeys[i])
|
|
}
|
|
|
|
AccessListMappings = append(AccessListMappings, ethtypes.AccessTuple{
|
|
Address: ethcmn.HexToAddress(tuple.Address),
|
|
StorageKeys: storageKeys,
|
|
})
|
|
}
|
|
|
|
return &AccessListMappings
|
|
}
|