Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

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}