From 809406718490806893237038a4633397c62b685b Mon Sep 17 00:00:00 2001 From: evgeniy-scherbina Date: Fri, 26 Apr 2024 12:06:12 -0400 Subject: [PATCH] Update ActivePrecompiles --- core/vm/contracts.go | 22 ++++++++++++++++------ params/config.go | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 7b5f1dd5b13f..20fb24f97a80 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -34,7 +34,6 @@ import ( "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/precompile/contract" - "github.com/ethereum/go-ethereum/precompile/modules" "golang.org/x/crypto/ripemd160" ) @@ -131,6 +130,14 @@ var ( PrecompiledAddressesIstanbul []common.Address PrecompiledAddressesByzantium []common.Address PrecompiledAddressesHomestead []common.Address + + PrecompiledAddressesKava16 = []common.Address{ + common.HexToAddress("0x16"), + } + PrecompiledAddressesKava17 = []common.Address{ + common.HexToAddress("0x16"), + common.HexToAddress("0x17"), + } ) func init() { @@ -167,12 +174,15 @@ func ActivePrecompiles(rules params.Rules) (precompiles []common.Address) { precompiles = PrecompiledAddressesHomestead } - // TODO: Consider performance improvements here to prevent iteration & allocations on every call. - // NOTE: If using init to cache addresses, then some care should be taken to ensure all precompiles are - // registered before being cached here. - for _, precompile := range modules.RegisteredModules() { - precompiles = append(precompiles, precompile.Address) + // TODO: Consider performance improvements here + kavaPrecompiles := make([]common.Address, 0) + switch { + case rules.IsKava16: + kavaPrecompiles = PrecompiledAddressesKava16 + case rules.IsKava17: + kavaPrecompiles = PrecompiledAddressesKava17 } + precompiles = append(precompiles, kavaPrecompiles...) return precompiles } diff --git a/params/config.go b/params/config.go index 463041bd0161..50247e44c013 100644 --- a/params/config.go +++ b/params/config.go @@ -54,6 +54,8 @@ var ( LondonBlock: big.NewInt(12_965_000), ArrowGlacierBlock: big.NewInt(13_773_000), GrayGlacierBlock: big.NewInt(15_050_000), + Kava16Block: big.NewInt(9_561_866), + Kava17Block: big.NewInt(10_000_000), TerminalTotalDifficulty: MainnetTerminalTotalDifficulty, // 58_750_000_000_000_000_000_000 TerminalTotalDifficultyPassed: true, ShanghaiTime: newUint64(1681338455), @@ -307,6 +309,8 @@ type ChainConfig struct { MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated) BerlinBlock *big.Int `json:"berlinBlock,omitempty"` // Berlin switch block (nil = no fork, 0 = already on berlin) LondonBlock *big.Int `json:"londonBlock,omitempty"` // London switch block (nil = no fork, 0 = already on london) + Kava16Block *big.Int `json:"kava16Block,omitempty"` // Kava16Block switch block (nil = no fork, 0 = already on kava16) + Kava17Block *big.Int `json:"kava17Block,omitempty"` // Kava17Block switch block (nil = no fork, 0 = already on kava17) ArrowGlacierBlock *big.Int `json:"arrowGlacierBlock,omitempty"` // Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated) GrayGlacierBlock *big.Int `json:"grayGlacierBlock,omitempty"` // Eip-5133 (bomb delay) switch block (nil = no fork, 0 = already activated) MergeNetsplitBlock *big.Int `json:"mergeNetsplitBlock,omitempty"` // Virtual fork after The Merge to use as a network splitter @@ -543,6 +547,16 @@ func (c *ChainConfig) IsVerkle(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.VerkleTime, time) } +// IsKava16 returns whether num is either equal to the Kava16 fork block or greater. +func (c *ChainConfig) IsKava16(num *big.Int) bool { + return isBlockForked(c.Kava16Block, num) +} + +// IsKava17 returns whether num is either equal to the Kava17 fork block or greater. +func (c *ChainConfig) IsKava17(num *big.Int) bool { + return isBlockForked(c.Kava17Block, num) +} + // CheckCompatible checks whether scheduled fork transitions have been imported // with a mismatching chain configuration. func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError { @@ -850,6 +864,8 @@ type Rules struct { IsBerlin, IsLondon bool IsMerge, IsShanghai, IsCancun, IsPrague bool IsVerkle bool + + IsKava16, IsKava17 bool } // Rules ensures c's ChainID is not nil. @@ -875,5 +891,7 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules IsCancun: c.IsCancun(num, timestamp), IsPrague: c.IsPrague(num, timestamp), IsVerkle: c.IsVerkle(num, timestamp), + IsKava16: c.IsKava16(num), + IsKava17: c.IsKava17(num), } }