56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package types
|
|
|
|
import (
|
|
"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
|
|
}
|
|
|
|
al := AccessList{}
|
|
for _, tuple := range *ethAccessList {
|
|
storageKeys := make([]string, len(tuple.StorageKeys))
|
|
|
|
for i := range tuple.StorageKeys {
|
|
storageKeys[i] = tuple.StorageKeys[i].String()
|
|
}
|
|
|
|
al = append(al, AccessTuple{
|
|
Address: tuple.Address.String(),
|
|
StorageKeys: storageKeys,
|
|
})
|
|
}
|
|
|
|
return al
|
|
}
|
|
|
|
// 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 ethAccessList ethtypes.AccessList
|
|
|
|
for _, tuple := range al {
|
|
storageKeys := make([]common.Hash, len(tuple.StorageKeys))
|
|
|
|
for i := range tuple.StorageKeys {
|
|
storageKeys[i] = common.HexToHash(tuple.StorageKeys[i])
|
|
}
|
|
|
|
ethAccessList = append(ethAccessList, ethtypes.AccessTuple{
|
|
Address: common.HexToAddress(tuple.Address),
|
|
StorageKeys: storageKeys,
|
|
})
|
|
}
|
|
|
|
return ðAccessList
|
|
}
|