1- // Copyright 2021-2024 , Offchain Labs, Inc.
1+ // Copyright 2021-2025 , Offchain Labs, Inc.
22// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE.md
33
44package l2pricing
88 "math/big"
99
1010 "github.com/ethereum/go-ethereum/arbitrum/multigas"
11- "github.com/ethereum/go-ethereum/log"
1211 "github.com/ethereum/go-ethereum/params"
1312
1413 "github.com/offchainlabs/nitro/arbos/storage"
@@ -61,52 +60,41 @@ func (ps *L2PricingState) GasModelToUse() (GasModel, error) {
6160 return GasModelLegacy , nil
6261}
6362
64- // GrowBacklog increases the backlog for the active pricing model.
65- func (ps * L2PricingState ) GrowBacklog (usedGas uint64 , usedMultiGas multigas.MultiGas ) error {
66- gasModel , err := ps .GasModelToUse ()
67- if err != nil {
68- return err
69- }
70- switch gasModel {
71- case GasModelLegacy :
72- return ps .updateLegacyBacklog (true , usedGas )
73- case GasModelSingleGasConstraints :
74- return ps .updateSingleGasConstraintsBacklogs (true , usedGas )
75- case GasModelMultiGasConstraints :
76- return ps .updateMultiGasConstraintsBacklogs (true , usedGas , usedMultiGas )
77- default :
78- return fmt .Errorf ("can not determine gas model" )
79- }
80- }
63+ type BacklogOperation uint8
8164
82- // ShrinkBacklog reduces the backlog for the active pricing model.
83- func (ps * L2PricingState ) ShrinkBacklog (usedGas uint64 , usedMultiGas multigas.MultiGas ) error {
65+ const (
66+ Shrink BacklogOperation = iota
67+ Grow
68+ )
69+
70+ // UpdateBacklog increases the backlog for the active pricing model.
71+ func (ps * L2PricingState ) UpdateBacklog (op BacklogOperation , usedGas uint64 , usedMultiGas multigas.MultiGas ) error {
8472 gasModel , err := ps .GasModelToUse ()
8573 if err != nil {
8674 return err
8775 }
8876 switch gasModel {
8977 case GasModelLegacy :
90- return ps .updateLegacyBacklog (false , usedGas )
78+ return ps .updateLegacyBacklog (op , usedGas )
9179 case GasModelSingleGasConstraints :
92- return ps .updateSingleGasConstraintsBacklogs (false , usedGas )
80+ return ps .updateSingleGasConstraintsBacklogs (op , usedGas )
9381 case GasModelMultiGasConstraints :
94- return ps .updateMultiGasConstraintsBacklogs (false , usedGas , usedMultiGas )
82+ return ps .updateMultiGasConstraintsBacklogs (op , usedGas , usedMultiGas )
9583 default :
9684 return fmt .Errorf ("can not determine gas model" )
9785 }
9886}
9987
100- func (ps * L2PricingState ) updateLegacyBacklog (growBacklog bool , usedGas uint64 ) error {
88+ func (ps * L2PricingState ) updateLegacyBacklog (op BacklogOperation , usedGas uint64 ) error {
10189 backlog , err := ps .GasBacklog ()
10290 if err != nil {
10391 return err
10492 }
105- backlog = applyGasDelta (backlog , growBacklog , usedGas )
93+ backlog = applyGasDelta (op , backlog , usedGas )
10694 return ps .SetGasBacklog (backlog )
10795}
10896
109- func (ps * L2PricingState ) updateSingleGasConstraintsBacklogs (growBacklog bool , usedGas uint64 ) error {
97+ func (ps * L2PricingState ) updateSingleGasConstraintsBacklogs (op BacklogOperation , usedGas uint64 ) error {
11098 constraintsLength , err := ps .gasConstraints .Length ()
11199 if err != nil {
112100 return err
@@ -117,46 +105,38 @@ func (ps *L2PricingState) updateSingleGasConstraintsBacklogs(growBacklog bool, u
117105 if err != nil {
118106 return err
119107 }
120- err = constraint .SetBacklog (applyGasDelta (backlog , growBacklog , usedGas ))
108+ err = constraint .SetBacklog (applyGasDelta (op , backlog , usedGas ))
121109 if err != nil {
122110 return err
123111 }
124112 }
125113 return nil
126114}
127115
128- func (ps * L2PricingState ) updateMultiGasConstraintsBacklogs (growBacklog bool , usedGas uint64 , usedMultiGas multigas.MultiGas ) error {
129- if usedMultiGas .SingleGas () != usedGas {
130- log .Warn ("usedGas does not match sum of usedMultiGas" , "usedGas" , usedGas , "usedMultiGas" , usedMultiGas .SingleGas ())
131- }
132-
116+ func (ps * L2PricingState ) updateMultiGasConstraintsBacklogs (op BacklogOperation , _usedGas uint64 , usedMultiGas multigas.MultiGas ) error {
133117 constraintsLength , err := ps .multigasConstraints .Length ()
134118 if err != nil {
135119 return err
136120 }
137121 for i := range constraintsLength {
138122 constraint := ps .OpenMultiGasConstraintAt (i )
139- if growBacklog {
140- err = constraint .IncrementBacklog (usedMultiGas )
141- if err != nil {
142- return err
143- }
144- } else {
145- err = constraint .DecrementBacklog (usedMultiGas )
146- if err != nil {
147- return err
148- }
123+ err = constraint .UpdateBacklog (op , usedMultiGas )
124+ if err != nil {
125+ return err
149126 }
150127 }
151128 return nil
152129}
153130
154131// applyGasDelta adds delta to backlog if growBacklog=true, otherwise subtracts delta (saturating at zero).
155- func applyGasDelta (backlog uint64 , growBacklog bool , delta uint64 ) uint64 {
156- if growBacklog {
132+ func applyGasDelta (op BacklogOperation , backlog uint64 , delta uint64 ) uint64 {
133+ switch op {
134+ case Grow :
157135 return arbmath .SaturatingUAdd (backlog , delta )
158- } else {
136+ case Shrink :
159137 return arbmath .SaturatingUSub (backlog , delta )
138+ default :
139+ panic ("invalid backlog operation" )
160140 }
161141}
162142
@@ -224,7 +204,7 @@ func (ps *L2PricingState) UpdatePricingModel(timePassed uint64) {
224204
225205func (ps * L2PricingState ) updatePricingModelLegacy (timePassed uint64 ) {
226206 speedLimit , _ := ps .SpeedLimitPerSecond ()
227- _ = ps .updateLegacyBacklog (false , arbmath .SaturatingUMul (timePassed , speedLimit ))
207+ _ = ps .updateLegacyBacklog (Shrink , arbmath .SaturatingUMul (timePassed , speedLimit ))
228208 inertia , _ := ps .PricingInertia ()
229209 tolerance , _ := ps .BacklogTolerance ()
230210 backlog , _ := ps .GasBacklog ()
@@ -249,7 +229,7 @@ func (ps *L2PricingState) updatePricingModelSingleConstraints(timePassed uint64)
249229 // Pay off backlog
250230 backlog , _ := constraint .Backlog ()
251231 gas := arbmath .SaturatingUMul (timePassed , target )
252- backlog = applyGasDelta (backlog , false , gas )
232+ backlog = applyGasDelta (Shrink , backlog , gas )
253233 _ = constraint .SetBacklog (backlog )
254234
255235 // Calculate exponent with the formula backlog/divisor
@@ -276,7 +256,7 @@ func (ps *L2PricingState) updatePricingModelMultiConstraints(timePassed uint64)
276256
277257 backlog , _ := constraint .Backlog ()
278258 gas := arbmath .SaturatingUMul (timePassed , target )
279- backlog = applyGasDelta (backlog , false , gas )
259+ backlog = applyGasDelta (Shrink , backlog , gas )
280260 _ = constraint .SetBacklog (backlog )
281261 }
282262
0 commit comments