66package builtin
77
88import (
9+ "errors"
910 "fmt"
1011 "math"
1112 "math/big"
@@ -19,30 +20,36 @@ import (
1920 "github.com/vechain/thor/v2/xenv"
2021)
2122
22- // The stargate pause switch at binary position 0. (binary: 1 0 [1])
23- func IsStargatePaused (state * state.State , charger * gascharger.Charger ) (bool , error ) {
23+ func isContractPaused (state * state.State , charger * gascharger.Charger , pauseBit int ) (bool , error ) {
2424 charger .Charge (thor .SloadGas )
2525 switches , err := Params .Native (state ).Get (thor .KeyStargateSwitches )
2626 if err != nil {
2727 return false , err
2828 }
29- if switches == nil {
30- return false , nil
29+ return switches .Bit (pauseBit ) == 1 , nil
30+ }
31+
32+ func IsStargatePaused (state * state.State , charger * gascharger.Charger ) error {
33+ isPaused , err := isContractPaused (state , charger , 0 )
34+ if err != nil {
35+ return err
36+ }
37+ if isPaused {
38+ return errors .New ("stargate is paused" )
3139 }
32- return switches . Bit ( 0 ) == 1 , nil
40+ return nil
3341}
3442
3543// The staker pause switch at binary position 1. (binary: 1 [1] 0)
36- func IsStakerPaused (state * state.State , charger * gascharger.Charger ) (bool , error ) {
37- charger .Charge (thor .SloadGas )
38- switches , err := Params .Native (state ).Get (thor .KeyStargateSwitches )
44+ func IsStakerPaused (state * state.State , charger * gascharger.Charger ) error {
45+ isPaused , err := isContractPaused (state , charger , 1 )
3946 if err != nil {
40- return false , err
47+ return err
4148 }
42- if switches == nil {
43- return false , nil
49+ if isPaused {
50+ return errors . New ( "staker is paused" )
4451 }
45- return switches . Bit ( 1 ) == 1 , nil
52+ return nil
4653}
4754
4855func init () {
@@ -160,11 +167,9 @@ func init() {
160167 env .ParseArgs (& args )
161168 charger := gascharger .New (env )
162169
163- isPaused , err := IsStakerPaused (env .State (), charger )
170+ err := IsStakerPaused (env .State (), charger )
164171 if err != nil {
165172 return []any {new (big.Int ), fmt .Sprintf ("revert: %v" , err )}
166- } else if isPaused {
167- return []any {new (big.Int ), "revert: staker is paused" }
168173 }
169174
170175 stake , err := Staker .NativeMetered (env .State (), charger ).WithdrawStake (
@@ -188,11 +193,9 @@ func init() {
188193 env .ParseArgs (& args )
189194 charger := gascharger .New (env )
190195
191- isPaused , err := IsStakerPaused (env .State (), charger )
196+ err := IsStakerPaused (env .State (), charger )
192197 if err != nil {
193198 return []any {fmt .Sprintf ("revert: %v" , err )}
194- } else if isPaused {
195- return []any {"revert: staker is paused" }
196199 }
197200
198201 isPoSActive , err := Staker .NativeMetered (env .State (), charger ).IsPoSActive ()
@@ -236,11 +239,9 @@ func init() {
236239 env .ParseArgs (& args )
237240 charger := gascharger .New (env )
238241
239- isPaused , err := IsStakerPaused (env .State (), charger )
242+ err := IsStakerPaused (env .State (), charger )
240243 if err != nil {
241244 return []any {fmt .Sprintf ("revert: %v" , err )}
242- } else if isPaused {
243- return []any {"revert: staker is paused" }
244245 }
245246
246247 err = Staker .NativeMetered (env .State (), charger ).
@@ -262,11 +263,9 @@ func init() {
262263 env .ParseArgs (& args )
263264 charger := gascharger .New (env )
264265
265- isPaused , err := IsStakerPaused (env .State (), charger )
266+ err := IsStakerPaused (env .State (), charger )
266267 if err != nil {
267268 return []any {fmt .Sprintf ("revert: %v" , err )}
268- } else if isPaused {
269- return []any {"revert: staker is paused" }
270269 }
271270
272271 err = Staker .NativeMetered (env .State (), charger ).
@@ -290,11 +289,9 @@ func init() {
290289 env .ParseArgs (& args )
291290 charger := gascharger .New (env )
292291
293- isPaused , err := IsStakerPaused (env .State (), charger )
292+ err := IsStakerPaused (env .State (), charger )
294293 if err != nil {
295294 return []any {fmt .Sprintf ("revert: %v" , err )}
296- } else if isPaused {
297- return []any {"revert: staker is paused" }
298295 }
299296
300297 err = Staker .NativeMetered (env .State (), charger ).
@@ -317,18 +314,14 @@ func init() {
317314 env .ParseArgs (& args )
318315 charger := gascharger .New (env )
319316
320- isPaused , err := IsStargatePaused (env .State (), charger )
317+ err := IsStargatePaused (env .State (), charger )
321318 if err != nil {
322319 return []any {new (big.Int ), fmt .Sprintf ("revert: %v" , err )}
323- } else if isPaused {
324- return []any {new (big.Int ), "revert: stargate is paused" }
325320 }
326321
327- isPaused , err = IsStakerPaused (env .State (), charger )
322+ err = IsStakerPaused (env .State (), charger )
328323 if err != nil {
329324 return []any {new (big.Int ), fmt .Sprintf ("revert: %v" , err )}
330- } else if isPaused {
331- return []any {new (big.Int ), "revert: staker is paused" }
332325 }
333326
334327 delegationID , err := Staker .NativeMetered (env .State (), charger ).
@@ -349,18 +342,14 @@ func init() {
349342 env .ParseArgs (& args )
350343 charger := gascharger .New (env )
351344
352- isPaused , err := IsStargatePaused (env .State (), charger )
345+ err := IsStargatePaused (env .State (), charger )
353346 if err != nil {
354347 return []any {new (big.Int ), fmt .Sprintf ("revert: %v" , err )}
355- } else if isPaused {
356- return []any {new (big.Int ), "revert: stargate is paused" }
357348 }
358349
359- isPaused , err = IsStakerPaused (env .State (), charger )
350+ err = IsStakerPaused (env .State (), charger )
360351 if err != nil {
361352 return []any {new (big.Int ), fmt .Sprintf ("revert: %v" , err )}
362- } else if isPaused {
363- return []any {new (big.Int ), "revert: staker is paused" }
364353 }
365354
366355 stake , err := Staker .NativeMetered (env .State (), charger ).WithdrawDelegation (args .DelegationID )
@@ -377,18 +366,14 @@ func init() {
377366 env .ParseArgs (& args )
378367 charger := gascharger .New (env )
379368
380- isPaused , err := IsStargatePaused (env .State (), charger )
369+ err := IsStargatePaused (env .State (), charger )
381370 if err != nil {
382371 return []any {fmt .Sprintf ("revert: %v" , err )}
383- } else if isPaused {
384- return []any {"revert: stargate is paused" }
385372 }
386373
387- isPaused , err = IsStakerPaused (env .State (), charger )
374+ err = IsStakerPaused (env .State (), charger )
388375 if err != nil {
389376 return []any {fmt .Sprintf ("revert: %v" , err )}
390- } else if isPaused {
391- return []any {"revert: staker is paused" }
392377 }
393378
394379 err = Staker .NativeMetered (env .State (), charger ).SignalDelegationExit (args .DelegationID )
0 commit comments