mirror of
https://github.com/luxfi/evm.git
synced 2026-09-24 00:27:44 +00:00
- Change Go version from 1.24.6 to 1.22.8 (stable version) - Ensure all build scripts have executable permissions - Fix covdata issue by using stable Go version - CI should now pass all checks
31 lines
1.1 KiB
Go
31 lines
1.1 KiB
Go
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package predicate
|
|
|
|
import (
|
|
"github.com/luxfi/evm/utils"
|
|
"github.com/luxfi/geth/common"
|
|
"github.com/luxfi/geth/core/types"
|
|
)
|
|
|
|
type PredicaterExistChecker interface {
|
|
PredicaterExists(common.Address) bool
|
|
}
|
|
|
|
// PreparePredicateStorageSlots populates the predicate storage slots of a transaction's access list
|
|
// Note: if an address is specified multiple times in the access list, each storage slot for that address is
|
|
// appended to a slice of byte slices. Each byte slice represents a predicate, making it a slice of predicates
|
|
// for each access list address, and every predicate in the slice goes through verification.
|
|
func PreparePredicateStorageSlots(rules PredicaterExistChecker, list types.AccessList) map[common.Address][][]byte {
|
|
predicateStorageSlots := make(map[common.Address][][]byte)
|
|
for _, el := range list {
|
|
if !rules.PredicaterExists(el.Address) {
|
|
continue
|
|
}
|
|
predicateStorageSlots[el.Address] = append(predicateStorageSlots[el.Address], utils.HashSliceToBytes(el.StorageKeys))
|
|
}
|
|
|
|
return predicateStorageSlots
|
|
}
|