admin.gno
1.55 Kb · 53 lines
1package ucs03_zkgm
2
3import (
4 "time"
5
6 tb "gno.land/p/onbloc/ibc/union/zkgm/tokenbucket"
7 u256 "gno.land/p/onbloc/math/uint256"
8 "gno.land/r/onbloc/ibc/union/access"
9)
10
11// SetBucketConfig creates or updates the per-denom send-side rate-limit bucket.
12// The bucket is anchored to block time, so RefillRate is tokens per second.
13func SetBucketConfig(cur realm, denom string, capacity *u256.Uint, refillRate *u256.Uint) {
14 access.AssertCanCall(0, cur, SelectorSetBucketConfig)
15
16 bucket, ok := store.GetTokenBucket(denom)
17 if !ok {
18 newBucket, err := tb.New(capacity, refillRate, u256.NewUint(uint64(time.Now().Unix())))
19 if err != nil {
20 panic(err)
21 }
22
23 store.SetTokenBucket(0, cur, denom, newBucket)
24 emitZkgmRateLimitBucketConfiguredEvent(cur.Previous().Address(), denom, capacity, refillRate)
25
26 return
27 }
28
29 err := bucket.Update(capacity, refillRate, false)
30 if err != nil {
31 panic(err)
32 }
33
34 emitZkgmRateLimitBucketConfiguredEvent(cur.Previous().Address(), denom, capacity, refillRate)
35}
36
37// SetRateLimitDisabled toggles the global rate-limit kill switch.
38func SetRateLimitDisabled(cur realm, disabled bool) {
39 access.AssertCanCall(0, cur, SelectorSetRateLimitDisabled)
40 store.SetRateLimitDisabled(0, cur, disabled)
41 emitZkgmRateLimitDisabledSetEvent(cur.Previous().Address(), disabled)
42}
43
44// Pausable toggles the global pause gate checked by every App receiver.
45func Pausable(cur realm, p bool) {
46 access.AssertCanCall(0, cur, SelectorPausable)
47 paused = p
48 if p {
49 emitZkgmPausedEvent(cur.Previous().Address())
50 } else {
51 emitZkgmUnpausedEvent(cur.Previous().Address())
52 }
53}