@@ -11,6 +11,7 @@ import (
1111 "github.com/ethereum/go-ethereum/common"
1212 "github.com/ethereum/go-ethereum/core"
1313 "github.com/ethereum/go-ethereum/core/vm"
14+ "github.com/ethereum/go-ethereum/params"
1415
1516 "github.com/offchainlabs/nitro/arbos"
1617 "github.com/offchainlabs/nitro/arbos/burn"
@@ -102,7 +103,15 @@ func testRetryableRedeem(t *testing.T, evm *vm.EVM, precompileCtx *Context) {
102103 }
103104}
104105
105- func TestRetryableRedeem (t * testing.T ) {
106+ func overrideStateArbOSVersion (evm * vm.EVM , arbosVersion uint64 ) error {
107+ versionSlot := uint64 (0 )
108+ version := new (big.Int ).SetUint64 (arbosVersion )
109+ burner := burn .NewSystemBurner (nil , false )
110+ sto := storage .NewGeth (evm .StateDB , burner )
111+ return sto .SetByUint64 (versionSlot , common .BigToHash (version ))
112+ }
113+
114+ func TestRetryableRedeemLegacy (t * testing.T ) {
106115 evm := newMockEVMForTesting ()
107116 precompileCtx := testContext (common.Address {}, evm )
108117
@@ -116,19 +125,33 @@ func TestRetryableRedeem(t *testing.T) {
116125 testRetryableRedeem (t , evm , precompileCtx )
117126}
118127
119- func TestRetryableRedeemWithSingleGasConstraints (t * testing.T ) {
128+ func TestRetryableRedeemLegacyArbOS60 (t * testing.T ) {
120129 evm := newMockEVMForTesting ()
130+ err := overrideStateArbOSVersion (evm , params .ArbosVersion_60 )
131+ Require (t , err )
132+
121133 precompileCtx := testContext (common.Address {}, evm )
122134
123- for i := range 20 {
124- // #nosec G115
125- target0 := uint64 ((i + 1 ) * 1000000 )
126- // #nosec G115
127- window0 := uint64 ((i + 1 ) * 10 )
128- // #nosec G115
129- backlog0 := uint64 ((i + 1 ) * 500000 )
135+ model , err := precompileCtx .State .L2PricingState ().GasModelToUse ()
136+ Require (t , err )
130137
131- err := precompileCtx .State .L2PricingState ().AddGasConstraint (target0 , window0 , backlog0 )
138+ if model != l2pricing .GasModelLegacy {
139+ Fail (t , "should use legacy model" )
140+ }
141+
142+ testRetryableRedeem (t , evm , precompileCtx )
143+ }
144+
145+ func TestRetryableRedeemWithGasConstraints (t * testing.T ) {
146+ evm := newMockEVMForTesting ()
147+ precompileCtx := testContext (common.Address {}, evm )
148+
149+ for i := range uint64 (l2pricing .GasConstraintsMaxNum ) {
150+ target := (i + 1 ) * 1000000
151+ window := (i + 1 ) * 10
152+ backlog := (i + 1 ) * 500000
153+
154+ err := precompileCtx .State .L2PricingState ().AddGasConstraint (target , window , backlog )
132155 Require (t , err )
133156 }
134157
@@ -142,19 +165,39 @@ func TestRetryableRedeemWithSingleGasConstraints(t *testing.T) {
142165 testRetryableRedeem (t , evm , precompileCtx )
143166}
144167
145- func TestRetryableRedeemWithMultiGasConstraints (t * testing.T ) {
168+ func TestRetryableRedeemWithGasConstraintsArbOS60 (t * testing.T ) {
146169 evm := newMockEVMForTesting ()
170+ err := overrideStateArbOSVersion (evm , params .ArbosVersion_60 )
171+ Require (t , err )
172+
147173 precompileCtx := testContext (common.Address {}, evm )
148- precompileCtx .State .L2PricingState ().ArbosVersion = l2pricing .ArbosMultiGasConstraintsVersion
149174
150- // Override default ArbOS varsion in the database
151- versionSlot := uint64 (0 )
152- version := new (big.Int ).SetUint64 (l2pricing .ArbosMultiGasConstraintsVersion )
153- burner := burn .NewSystemBurner (nil , false )
154- sto := storage .NewGeth (evm .StateDB , burner )
155- err := sto .SetByUint64 (versionSlot , common .BigToHash (version ))
175+ for i := range uint64 (100 ) {
176+ target := (i + 1 ) * 1000000
177+ window := (i + 1 ) * 10
178+ backlog := (i + 1 ) * 500000
179+
180+ err := precompileCtx .State .L2PricingState ().AddGasConstraint (target , window , backlog )
181+ Require (t , err )
182+ }
183+
184+ model , err := precompileCtx .State .L2PricingState ().GasModelToUse ()
156185 Require (t , err )
157186
187+ if model != l2pricing .GasModelSingleGasConstraints {
188+ Fail (t , "should use single-gas constraints model" )
189+ }
190+
191+ testRetryableRedeem (t , evm , precompileCtx )
192+ }
193+
194+ func TestRetryableRedeemWithMultiGasConstraints (t * testing.T ) {
195+ evm := newMockEVMForTesting ()
196+ err := overrideStateArbOSVersion (evm , l2pricing .ArbosMultiGasConstraintsVersion )
197+ Require (t , err )
198+
199+ precompileCtx := testContext (common.Address {}, evm )
200+
158201 for i := range 100 {
159202 // #nosec G115
160203 target := uint64 ((i + 1 ) * 1000000 )
0 commit comments