From 115f0031c3972dd6d813df5820bc359ac9662809 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Tue, 16 Apr 2024 10:43:53 +0200 Subject: [PATCH] core/vm: enable bls-precompiles for Prague --- core/vm/contracts.go | 14 +++++++++++--- core/vm/evm.go | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 4ca151c365..ffb4fa06e3 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -111,9 +111,9 @@ var PrecompiledContractsCancun = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{}, } -// PrecompiledContractsBLS contains the set of pre-compiled Ethereum -// contracts specified in EIP-2537. These are exported for testing purposes. -var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{ +// PrecompiledContractsPrague contains the set of pre-compiled Ethereum +// contracts used in the Prague release. +var PrecompiledContractsPrague = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{11}): &bls12381G1Add{}, common.BytesToAddress([]byte{12}): &bls12381G1Mul{}, common.BytesToAddress([]byte{13}): &bls12381G1MultiExp{}, @@ -125,7 +125,10 @@ var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{19}): &bls12381MapG2{}, } +var PrecompiledContractsBLS = PrecompiledContractsPrague + var ( + PrecompiledAddressesPrague []common.Address PrecompiledAddressesCancun []common.Address PrecompiledAddressesBerlin []common.Address PrecompiledAddressesIstanbul []common.Address @@ -149,11 +152,16 @@ func init() { for k := range PrecompiledContractsCancun { PrecompiledAddressesCancun = append(PrecompiledAddressesCancun, k) } + for k := range PrecompiledContractsPrague { + PrecompiledAddressesPrague = append(PrecompiledAddressesPrague, k) + } } // ActivePrecompiles returns the precompiles enabled with the current configuration. func ActivePrecompiles(rules params.Rules) []common.Address { switch { + case rules.IsPrague: + return PrecompiledAddressesPrague case rules.IsCancun: return PrecompiledAddressesCancun case rules.IsBerlin: diff --git a/core/vm/evm.go b/core/vm/evm.go index 36bbf0d3da..045506a1fd 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -42,6 +42,8 @@ type ( func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { var precompiles map[common.Address]PrecompiledContract switch { + case evm.chainRules.IsPrague: + precompiles = PrecompiledContractsPrague case evm.chainRules.IsCancun: precompiles = PrecompiledContractsCancun case evm.chainRules.IsBerlin: