diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 175db51a87aa..a53bdfd9b15b 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -123,7 +123,7 @@ func init() { // ActivePrecompiles returns the precompiles enabled with the current configuration. func ActivePrecompiles(rules params.Rules) []common.Address { switch { - case rules.IsXDCxDisable: + case rules.IsTIPXDCXReceiver: return PrecompiledAddressesXDCv2 case rules.IsIstanbul: return PrecompiledAddressesIstanbul diff --git a/core/vm/evm.go b/core/vm/evm.go index 4f61fc3c80a0..5e947e324eb1 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -45,7 +45,11 @@ type ( func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { var precompiles map[common.Address]PrecompiledContract switch { - case evm.chainRules.IsXDCxDisable: + case evm.chainRules.IsEIP1559: + precompiles = PrecompiledContractsXDCv2 + case evm.chainRules.ChainId.Uint64() != 51 && evm.chainRules.IsXDCxDisable: + precompiles = PrecompiledContractsXDCv2 + case evm.chainRules.ChainId.Uint64() == 51 && evm.chainRules.IsTIPXDCXReceiver: precompiles = PrecompiledContractsXDCv2 case evm.chainRules.IsIstanbul: precompiles = PrecompiledContractsIstanbul @@ -61,7 +65,11 @@ func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { func (evm *EVM) precompile2(addr common.Address) (PrecompiledContract, bool) { var precompiles map[common.Address]PrecompiledContract switch { - case evm.chainRules.IsXDCxDisable: + case evm.chainRules.IsEIP1559: + precompiles = PrecompiledContractsXDCv2 + case evm.chainRules.ChainId.Uint64() != 51 && evm.chainRules.IsXDCxDisable: + precompiles = PrecompiledContractsXDCv2 + case evm.chainRules.ChainId.Uint64() == 51 && evm.chainRules.IsTIPXDCXReceiver: precompiles = PrecompiledContractsXDCv2 case evm.chainRules.IsIstanbul && evm.ChainConfig().IsTIPXDCXCancellationFee(evm.BlockNumber): precompiles = PrecompiledContractsIstanbul diff --git a/params/config.go b/params/config.go index 599f4e7bc336..eae79b3c0e0a 100644 --- a/params/config.go +++ b/params/config.go @@ -778,6 +778,7 @@ type Rules struct { IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool IsBerlin, IsLondon bool IsMerge, IsShanghai bool + IsTIPXDCXReceiver bool IsXDCxDisable bool IsEIP1559 bool } @@ -788,20 +789,21 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { chainId = new(big.Int) } return Rules{ - ChainId: new(big.Int).Set(chainId), - IsHomestead: c.IsHomestead(num), - IsEIP150: c.IsEIP150(num), - IsEIP155: c.IsEIP155(num), - IsEIP158: c.IsEIP158(num), - IsByzantium: c.IsByzantium(num), - IsConstantinople: c.IsConstantinople(num), - IsPetersburg: c.IsPetersburg(num), - IsIstanbul: c.IsIstanbul(num), - IsBerlin: c.IsBerlin(num), - IsLondon: c.IsLondon(num), - IsMerge: c.IsMerge(num), - IsShanghai: c.IsShanghai(num), - IsXDCxDisable: c.IsXDCxDisable(num), - IsEIP1559: c.IsEIP1559(num), + ChainId: new(big.Int).Set(chainId), + IsHomestead: c.IsHomestead(num), + IsEIP150: c.IsEIP150(num), + IsEIP155: c.IsEIP155(num), + IsEIP158: c.IsEIP158(num), + IsByzantium: c.IsByzantium(num), + IsConstantinople: c.IsConstantinople(num), + IsPetersburg: c.IsPetersburg(num), + IsIstanbul: c.IsIstanbul(num), + IsBerlin: c.IsBerlin(num), + IsLondon: c.IsLondon(num), + IsMerge: c.IsMerge(num), + IsShanghai: c.IsShanghai(num), + IsTIPXDCXReceiver: c.IsTIPXDCXReceiver(num), + IsXDCxDisable: c.IsXDCxDisable(num), + IsEIP1559: c.IsEIP1559(num), } }