@@ -22,6 +22,8 @@ import (
22
22
"sync/atomic"
23
23
"time"
24
24
25
+ "github.com/ethereum/evmc/v7/bindings/go/evmc"
26
+
25
27
"github.com/ethereum/go-ethereum/common"
26
28
"github.com/ethereum/go-ethereum/crypto"
27
29
"github.com/ethereum/go-ethereum/params"
@@ -135,33 +137,29 @@ type EVM struct {
135
137
// only ever be used *once*.
136
138
func NewEVM (ctx Context , statedb StateDB , chainConfig * params.ChainConfig , vmConfig Config ) * EVM {
137
139
evm := & EVM {
138
- Context : ctx ,
139
- StateDB : statedb ,
140
- vmConfig : vmConfig ,
141
- chainConfig : chainConfig ,
142
- chainRules : chainConfig .Rules (ctx .BlockNumber ),
143
- interpreters : make ([]Interpreter , 0 , 1 ),
140
+ Context : ctx ,
141
+ StateDB : statedb ,
142
+ vmConfig : vmConfig ,
143
+ chainConfig : chainConfig ,
144
+ chainRules : chainConfig .Rules (ctx .BlockNumber ),
145
+ // The list of interpreters, space reserved for both EVM and EWASM ones.
146
+ interpreters : make ([]Interpreter , 0 , 2 ),
144
147
}
145
148
146
149
if chainConfig .IsEWASM (ctx .BlockNumber ) {
147
- // to be implemented by EVM-C and Wagon PRs.
148
- // if vmConfig.EWASMInterpreter != "" {
149
- // extIntOpts := strings.Split(vmConfig.EWASMInterpreter, ":")
150
- // path := extIntOpts[0]
151
- // options := []string{}
152
- // if len(extIntOpts) > 1 {
153
- // options = extIntOpts[1..]
154
- // }
155
- // evm.interpreters = append(evm.interpreters, NewEVMVCInterpreter(evm, vmConfig, options))
156
- // } else {
157
- // evm.interpreters = append(evm.interpreters, NewEWASMInterpreter(evm, vmConfig))
158
- // }
159
- panic ("No supported ewasm interpreter yet." )
160
- }
161
-
162
- // vmConfig.EVMInterpreter will be used by EVM-C, it won't be checked here
163
- // as we always want to have the built-in EVM as the failover option.
164
- evm .interpreters = append (evm .interpreters , NewEVMInterpreter (evm , vmConfig ))
150
+ if vmConfig .EWASMInterpreter != "" {
151
+ evm .interpreters = append (evm .interpreters , & EVMC {ewasmModule , evm , evmc .CapabilityEWASM , false })
152
+ } else {
153
+ panic ("The default ewasm interpreter not supported yet." )
154
+ }
155
+ }
156
+
157
+ if vmConfig .EVMInterpreter != "" {
158
+ evm .interpreters = append (evm .interpreters , & EVMC {evmModule , evm , evmc .CapabilityEVM1 , false })
159
+ } else {
160
+ evm .interpreters = append (evm .interpreters , NewEVMInterpreter (evm , vmConfig ))
161
+ }
162
+
165
163
evm .interpreter = evm .interpreters [0 ]
166
164
167
165
return evm
0 commit comments