@@ -12,7 +12,7 @@ import (
12
12
"testing"
13
13
"time"
14
14
15
- "github.com/ethereum-optimism/optimism/op-bindings/bindings "
15
+ "github.com/ethereum-optimism/optimism/op-chain-ops/foundry "
16
16
preimage "github.com/ethereum-optimism/optimism/op-preimage"
17
17
"github.com/ethereum/go-ethereum/common"
18
18
"github.com/ethereum/go-ethereum/common/hexutil"
@@ -22,8 +22,8 @@ import (
22
22
"github.com/stretchr/testify/require"
23
23
)
24
24
25
- func testContractsSetup (t require.TestingT ) (* Contracts , * Addresses ) {
26
- contracts , err := LoadContracts ()
25
+ func testContractsSetup (t require.TestingT ) (* Artifacts , * Addresses ) {
26
+ artifacts , err := LoadArtifacts ()
27
27
require .NoError (t , err )
28
28
29
29
addrs := & Addresses {
@@ -33,7 +33,7 @@ func testContractsSetup(t require.TestingT) (*Contracts, *Addresses) {
33
33
FeeRecipient : common.Address {0xaa },
34
34
}
35
35
36
- return contracts , addrs
36
+ return artifacts , addrs
37
37
}
38
38
39
39
func MarkdownTracer () vm.EVMLogger {
@@ -45,11 +45,12 @@ type MIPSEVM struct {
45
45
evmState * state.StateDB
46
46
addrs * Addresses
47
47
localOracle PreimageOracle
48
+ artifacts * Artifacts
48
49
}
49
50
50
- func NewMIPSEVM (contracts * Contracts , addrs * Addresses ) * MIPSEVM {
51
- env , evmState := NewEVMEnv (contracts , addrs )
52
- return & MIPSEVM {env , evmState , addrs , nil }
51
+ func NewMIPSEVM (artifacts * Artifacts , addrs * Addresses ) * MIPSEVM {
52
+ env , evmState := NewEVMEnv (artifacts , addrs )
53
+ return & MIPSEVM {env , evmState , addrs , nil , artifacts }
53
54
}
54
55
55
56
func (m * MIPSEVM ) SetTracer (tracer vm.EVMLogger ) {
@@ -70,13 +71,13 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte {
70
71
71
72
if stepWitness .HasPreimage () {
72
73
t .Logf ("reading preimage key %x at offset %d" , stepWitness .PreimageKey , stepWitness .PreimageOffset )
73
- poInput , err := encodePreimageOracleInput (t , stepWitness , LocalContext {}, m .localOracle )
74
+ poInput , err := encodePreimageOracleInput (t , stepWitness , LocalContext {}, m .localOracle , m . artifacts . Oracle )
74
75
require .NoError (t , err , "encode preimage oracle input" )
75
76
_ , leftOverGas , err := m .env .Call (vm .AccountRef (sender ), m .addrs .Oracle , poInput , startingGas , common .U2560 )
76
77
require .NoErrorf (t , err , "evm should not fail, took %d gas" , startingGas - leftOverGas )
77
78
}
78
79
79
- input := encodeStepInput (t , stepWitness , LocalContext {})
80
+ input := encodeStepInput (t , stepWitness , LocalContext {}, m . artifacts . MIPS )
80
81
ret , leftOverGas , err := m .env .Call (vm .AccountRef (sender ), m .addrs .MIPS , input , startingGas , common .U2560 )
81
82
require .NoError (t , err , "evm should not fail" )
82
83
require .Len (t , ret , 32 , "expecting 32-byte state hash" )
@@ -95,23 +96,17 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte {
95
96
return evmPost
96
97
}
97
98
98
- func encodeStepInput (t * testing.T , wit * StepWitness , localContext LocalContext ) []byte {
99
- mipsAbi , err := bindings .MIPSMetaData .GetAbi ()
100
- require .NoError (t , err )
101
-
102
- input , err := mipsAbi .Pack ("step" , wit .State , wit .MemProof , localContext )
99
+ func encodeStepInput (t * testing.T , wit * StepWitness , localContext LocalContext , mips * foundry.Artifact ) []byte {
100
+ input , err := mips .ABI .Pack ("step" , wit .State , wit .MemProof , localContext )
103
101
require .NoError (t , err )
104
102
return input
105
103
}
106
104
107
- func encodePreimageOracleInput (t * testing.T , wit * StepWitness , localContext LocalContext , localOracle PreimageOracle ) ([]byte , error ) {
105
+ func encodePreimageOracleInput (t * testing.T , wit * StepWitness , localContext LocalContext , localOracle PreimageOracle , oracle * foundry. Artifact ) ([]byte , error ) {
108
106
if wit .PreimageKey == ([32 ]byte {}) {
109
107
return nil , errors .New ("cannot encode pre-image oracle input, witness has no pre-image to proof" )
110
108
}
111
109
112
- preimageAbi , err := bindings .PreimageOracleMetaData .GetAbi ()
113
- require .NoError (t , err , "failed to load pre-image oracle ABI" )
114
-
115
110
switch preimage .KeyType (wit .PreimageKey [0 ]) {
116
111
case preimage .LocalKeyType :
117
112
if len (wit .PreimageValue ) > 32 + 8 {
@@ -120,7 +115,7 @@ func encodePreimageOracleInput(t *testing.T, wit *StepWitness, localContext Loca
120
115
preimagePart := wit .PreimageValue [8 :]
121
116
var tmp [32 ]byte
122
117
copy (tmp [:], preimagePart )
123
- input , err := preimageAbi .Pack ("loadLocalData" ,
118
+ input , err := oracle . ABI .Pack ("loadLocalData" ,
124
119
new (big.Int ).SetBytes (wit .PreimageKey [1 :]),
125
120
localContext ,
126
121
tmp ,
@@ -130,7 +125,7 @@ func encodePreimageOracleInput(t *testing.T, wit *StepWitness, localContext Loca
130
125
require .NoError (t , err )
131
126
return input , nil
132
127
case preimage .Keccak256KeyType :
133
- input , err := preimageAbi .Pack (
128
+ input , err := oracle . ABI .Pack (
134
129
"loadKeccak256PreimagePart" ,
135
130
new (big.Int ).SetUint64 (uint64 (wit .PreimageOffset )),
136
131
wit .PreimageValue [8 :])
@@ -143,7 +138,7 @@ func encodePreimageOracleInput(t *testing.T, wit *StepWitness, localContext Loca
143
138
preimage := localOracle .GetPreimage (preimage .Keccak256Key (wit .PreimageKey ).PreimageKey ())
144
139
precompile := common .BytesToAddress (preimage [:20 ])
145
140
callInput := preimage [20 :]
146
- input , err := preimageAbi .Pack (
141
+ input , err := oracle . ABI .Pack (
147
142
"loadPrecompilePreimagePart" ,
148
143
new (big.Int ).SetUint64 (uint64 (wit .PreimageOffset )),
149
144
precompile ,
@@ -290,7 +285,7 @@ func TestEVMFault(t *testing.T) {
290
285
State : initialState .EncodeWitness (),
291
286
MemProof : insnProof [:],
292
287
}
293
- input := encodeStepInput (t , stepWitness , LocalContext {})
288
+ input := encodeStepInput (t , stepWitness , LocalContext {}, contracts . MIPS )
294
289
startingGas := uint64 (30_000_000 )
295
290
296
291
_ , _ , err := env .Call (vm .AccountRef (sender ), addrs .MIPS , input , startingGas , common .U2560 )
0 commit comments