Merge pull request #96 from openrelayxyz/feature/etc-plugin-160

Add separate EIP160 check
This commit is contained in:
Philip Morlier 2023-10-23 18:23:08 -07:00 committed by GitHub
commit 8df3b1a5ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 5 deletions

View File

@ -46,6 +46,9 @@ func LookupInstructionSet(rules params.Rules) (JumpTable, error) {
return newConstantinopleInstructionSet(), nil return newConstantinopleInstructionSet(), nil
case rules.IsByzantium: case rules.IsByzantium:
return newByzantiumInstructionSet(), nil return newByzantiumInstructionSet(), nil
// Begin plugeth injection
case rules.IsEIP160:
// End plugeth injection
case rules.IsEIP158: case rules.IsEIP158:
return newSpuriousDragonInstructionSet(), nil return newSpuriousDragonInstructionSet(), nil
case rules.IsEIP150: case rules.IsEIP150:

View File

@ -24,7 +24,7 @@ func PluginOpCodeSelect(pl *plugins.PluginLoader, jt *JumpTable) *JumpTable {
jt = copyJumpTable(jt) jt = copyJumpTable(jt)
} }
for _, idx := range opCodes { for _, idx := range opCodes {
(*jt)[idx] = nil (*jt)[idx] = &operation{execute: opUndefined, maxStack: maxStack(0, 0)}
} }
return jt return jt
} }

View File

@ -852,6 +852,10 @@ type Rules struct {
IsBerlin, IsLondon bool IsBerlin, IsLondon bool
IsMerge, IsShanghai, IsCancun, IsPrague bool IsMerge, IsShanghai, IsCancun, IsPrague bool
IsVerkle bool IsVerkle bool
// begin plugeth injection
IsEIP160 bool
// end plugeth injection
} }
// Rules ensures c's ChainID is not nil. // Rules ensures c's ChainID is not nil.
@ -877,5 +881,10 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules
IsCancun: c.IsCancun(num, timestamp), IsCancun: c.IsCancun(num, timestamp),
IsPrague: c.IsPrague(num, timestamp), IsPrague: c.IsPrague(num, timestamp),
IsVerkle: c.IsVerkle(num, timestamp), IsVerkle: c.IsVerkle(num, timestamp),
// Begin plugeth injection
IsEIP160: c.IsEIP160(num),
// End plugeth injection
} }
} }

View File

@ -7,23 +7,35 @@ import (
"github.com/ethereum/go-ethereum/plugins" "github.com/ethereum/go-ethereum/plugins"
) )
// IsLondon returns whether num is either equal to the London fork block or greater. // Is1559 returns whether num is either equal to the London fork block or greater, if the chain supports EIP1559
func (c *ChainConfig) Is1559(num *big.Int) bool { func (c *ChainConfig) Is1559(num *big.Int) bool {
if plugins.DefaultPluginLoader == nil { if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting is1559, but default PluginLoader has not been initialized") log.Warn("Attempting is1559, but default PluginLoader has not been initialized")
return c.IsLondon(num) return c.IsLondon(num)
} }
if active, ok := PluginIs1559(plugins.DefaultPluginLoader, num); ok { if active, ok := PluginEIPCheck(plugins.DefaultPluginLoader, "Is1559", num); ok {
return active return active
} }
return c.IsLondon(num) return c.IsLondon(num)
} }
func PluginIs1559(pl *plugins.PluginLoader, num *big.Int) (bool, bool) { func PluginEIPCheck(pl *plugins.PluginLoader, eipHookName string, num *big.Int) (bool, bool) {
fn, ok := plugins.LookupOne[func(*big.Int) bool](pl, "Is1559") fn, ok := plugins.LookupOne[func(*big.Int) bool](pl, eipHookName)
if !ok { if !ok {
return false, false return false, false
} }
return fn(num), ok return fn(num), ok
} }
// IsEIP160 returns whether num is either equal to the EIP160 block or greater.
// This defaults to same as 158, but some chains do it at a different block
func (c *ChainConfig) IsEIP160(num *big.Int) bool {
if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting is160, but default PluginLoader has not been initialized")
return c.IsEIP158(num)
}
if active, ok := PluginEIPCheck(plugins.DefaultPluginLoader, "Is160", num); ok {
return active
}
return c.IsEIP158(num)
}