diff --git a/go.mod b/go.mod index a03039d6b9..b3207118f0 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/VictoriaMetrics/fastcache v1.12.1 github.com/ava-labs/avalanchego v1.13.5-rc.4 github.com/ava-labs/firewood-go-ethhash/ffi v0.0.12 - github.com/ava-labs/libevm v1.13.14-0.3.0.rc.7 + github.com/ava-labs/libevm v1.13.15-0.20250904180142-72e9ad796212 github.com/davecgh/go-spew v1.1.1 github.com/deckarep/golang-set/v2 v2.1.0 github.com/fjl/gencodec v0.1.1 diff --git a/go.sum b/go.sum index 3e36126835..81c1ce31c0 100644 --- a/go.sum +++ b/go.sum @@ -64,8 +64,8 @@ github.com/ava-labs/avalanchego v1.13.5-rc.4 h1:5aPlOFQFbKBLvUzsxLgybGhOCqEyi74x github.com/ava-labs/avalanchego v1.13.5-rc.4/go.mod h1:6bXxADKsAkU/f9Xme0gFJGRALp3IVzwq8NMDyx6ucRs= github.com/ava-labs/firewood-go-ethhash/ffi v0.0.12 h1:aMcrLbpJ/dyu2kZDf/Di/4JIWsUcYPyTDKymiHpejt0= github.com/ava-labs/firewood-go-ethhash/ffi v0.0.12/go.mod h1:cq89ua3iiZ5wPBALTEQS5eG8DIZcs7ov6OiL4YR1BVY= -github.com/ava-labs/libevm v1.13.14-0.3.0.rc.7 h1:z4rEAa/WTULwZOPiBj05Ba0iveMGek1x6MVhAhSu4aE= -github.com/ava-labs/libevm v1.13.14-0.3.0.rc.7/go.mod h1:zP/DOcABRWargBmUWv1jXplyWNcfmBy9cxr0lw3LW3g= +github.com/ava-labs/libevm v1.13.15-0.20250904180142-72e9ad796212 h1:z/X5qArZUrGLtCWmxhuj3qUVg15q+jTBvzrA8DRV2ic= +github.com/ava-labs/libevm v1.13.15-0.20250904180142-72e9ad796212/go.mod h1:zP/DOcABRWargBmUWv1jXplyWNcfmBy9cxr0lw3LW3g= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= diff --git a/params/hooks_libevm.go b/params/hooks_libevm.go index 0d0cfe3c24..4318951118 100644 --- a/params/hooks_libevm.go +++ b/params/hooks_libevm.go @@ -31,6 +31,9 @@ import ( // (August 2nd, 2025, 04:00 UTC) const invalidateDelegateUnix = 1754107200 +// P256VerifyAddress is the address of the p256 signature verification precompile +var P256VerifyAddress = common.BytesToAddress([]byte{0x1, 0x00}) + type RulesExtra extras.Rules func GetRulesExtra(r Rules) *extras.Rules { @@ -51,71 +54,66 @@ func (RulesExtra) MinimumGasConsumption(x uint64) uint64 { return (ethparams.NOOPHooks{}).MinimumGasConsumption(x) } -var PrecompiledContractsApricotPhase2 = map[common.Address]contract.StatefulPrecompiledContract{ - nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{}, - nativeasset.NativeAssetBalanceAddr: &nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot}, - nativeasset.NativeAssetCallAddr: &nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas}, +var PrecompiledContractsApricotPhase2 = map[common.Address]vm.PrecompiledContract{ + nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot}), + nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas}), } -var PrecompiledContractsApricotPhasePre6 = map[common.Address]contract.StatefulPrecompiledContract{ - nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{}, - nativeasset.NativeAssetBalanceAddr: &nativeasset.DeprecatedContract{}, - nativeasset.NativeAssetCallAddr: &nativeasset.DeprecatedContract{}, +var PrecompiledContractsApricotPhasePre6 = map[common.Address]vm.PrecompiledContract{ + nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.DeprecatedContract{}), } -var PrecompiledContractsApricotPhase6 = map[common.Address]contract.StatefulPrecompiledContract{ - nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{}, - nativeasset.NativeAssetBalanceAddr: &nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot}, - nativeasset.NativeAssetCallAddr: &nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas}, +var PrecompiledContractsApricotPhase6 = map[common.Address]vm.PrecompiledContract{ + nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot}), + nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas}), } -var PrecompiledContractsBanff = map[common.Address]contract.StatefulPrecompiledContract{ - nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{}, - nativeasset.NativeAssetBalanceAddr: &nativeasset.DeprecatedContract{}, - nativeasset.NativeAssetCallAddr: &nativeasset.DeprecatedContract{}, +var PrecompiledContractsBanff = map[common.Address]vm.PrecompiledContract{ + nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.DeprecatedContract{}), } -func (r RulesExtra) ActivePrecompiles(existing []common.Address) []common.Address { - var precompiles map[common.Address]contract.StatefulPrecompiledContract - switch { - case r.IsBanff: - precompiles = PrecompiledContractsBanff - case r.IsApricotPhase6: - precompiles = PrecompiledContractsApricotPhase6 - case r.IsApricotPhasePre6: - precompiles = PrecompiledContractsApricotPhasePre6 - case r.IsApricotPhase2: - precompiles = PrecompiledContractsApricotPhase2 - } +var PrecompiledContractsGranite = map[common.Address]vm.PrecompiledContract{ + nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.DeprecatedContract{}), + P256VerifyAddress: &vm.P256Verify{}, +} +func (r RulesExtra) ActivePrecompiles(existing []common.Address) []common.Address { var addresses []common.Address - addresses = slices.AppendSeq(addresses, maps.Keys(precompiles)) + addresses = slices.AppendSeq(addresses, maps.Keys(r.currentPrecompiles())) addresses = append(addresses, existing...) return addresses } -// precompileOverrideBuiltin specifies precompiles that were activated prior to the -// dynamic precompile activation registry. -// These were only active historically and are not active in the current network. -func (r RulesExtra) precompileOverrideBuiltin(addr common.Address) (libevm.PrecompiledContract, bool) { - var precompiles map[common.Address]contract.StatefulPrecompiledContract +func (r RulesExtra) currentPrecompiles() map[common.Address]vm.PrecompiledContract { switch { + case r.IsGranite: + return PrecompiledContractsGranite case r.IsBanff: - precompiles = PrecompiledContractsBanff + return PrecompiledContractsBanff case r.IsApricotPhase6: - precompiles = PrecompiledContractsApricotPhase6 + return PrecompiledContractsApricotPhase6 case r.IsApricotPhasePre6: - precompiles = PrecompiledContractsApricotPhasePre6 + return PrecompiledContractsApricotPhasePre6 case r.IsApricotPhase2: - precompiles = PrecompiledContractsApricotPhase2 - } - - precompile, ok := precompiles[addr] - if !ok { - return nil, false + return PrecompiledContractsApricotPhase2 } + return nil +} - return makePrecompile(precompile), true +// precompileOverrideBuiltin specifies precompiles that were activated prior to the +// dynamic precompile activation registry. +// These were only active historically and are not active in the current network. +func (r RulesExtra) precompileOverrideBuiltin(addr common.Address) (libevm.PrecompiledContract, bool) { + precompile, ok := r.currentPrecompiles()[addr] + return precompile, ok } func makePrecompile(contract contract.StatefulPrecompiledContract) libevm.PrecompiledContract { @@ -159,6 +157,7 @@ func (r RulesExtra) PrecompileOverride(addr common.Address) (libevm.PrecompiledC if p, ok := r.precompileOverrideBuiltin(addr); ok { return p, true } + if _, ok := r.Precompiles[addr]; !ok { return nil, false }