forked from cerc-io/plugeth
OpCode select plugin hook and injection
This commit is contained in:
parent
c0210061c8
commit
63f8d10434
@ -95,6 +95,9 @@ func NewEVMInterpreter(evm *EVM) *EVMInterpreter {
|
||||
}
|
||||
}
|
||||
evm.Config.ExtraEips = extraEips
|
||||
// begin PluGeth injection
|
||||
table = pluginOpCodeSelect(table)
|
||||
// end PluGeth injection
|
||||
return &EVMInterpreter{evm: evm, table: table}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,39 @@
|
||||
package vm
|
||||
|
||||
import (
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/plugins"
|
||||
)
|
||||
|
||||
func (st *Stack) Len() int {
|
||||
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)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user