OpCode select plugin hook and injection

This commit is contained in:
philip-morlier 2023-10-20 09:27:20 -07:00
parent c0210061c8
commit 63f8d10434
2 changed files with 37 additions and 0 deletions

View File

@ -95,6 +95,9 @@ func NewEVMInterpreter(evm *EVM) *EVMInterpreter {
} }
} }
evm.Config.ExtraEips = extraEips evm.Config.ExtraEips = extraEips
// begin PluGeth injection
table = pluginOpCodeSelect(table)
// end PluGeth injection
return &EVMInterpreter{evm: evm, table: table} return &EVMInterpreter{evm: evm, table: table}
} }

View File

@ -1,5 +1,39 @@
package vm package vm
import (
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/plugins"
)
func (st *Stack) Len() int { func (st *Stack) Len() int {
return len(st.data) return len(st.data)
} }
func PluginOpCodeSelect(pl *plugins.PluginLoader, jt *JumpTable) *JumpTable {
var opCodes []int
fnList := pl.Lookup("OpCodeSelect", func(item interface{}) bool {
_, ok := item.(func() []int)
return ok
})
for _, fni := range fnList {
if fn, ok := fni.(func() []int); ok {
opCodes = append(opCodes, fn()...)
}
}
if len(opCodes) > 0 {
jt = copyJumpTable(jt)
}
for _, idx := range opCodes {
(*jt)[idx] = nil
}
return jt
}
func pluginOpCodeSelect(jt *JumpTable) *JumpTable {
if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting PluginOpCodeSelect, but default PluginLoader has not been initialized")
return nil
}
return PluginOpCodeSelect(plugins.DefaultPluginLoader, jt)
}