config.gno
1.68 Kb · 81 lines
1package equipment
2
3import (
4 "chain"
5 "strconv"
6 "strings"
7
8 "gno.land/p/akkadia/beta/accesscontrol"
9 "gno.land/p/nt/bptree/v0"
10 "gno.land/r/akkadia/beta/admin"
11)
12
13const (
14 SetListLimitEvent = "SetListLimit"
15 SetMinterRealmEvent = "SetMinterRealm"
16 UnsetMinterRealmEvent = "UnsetMinterRealm"
17)
18
19var (
20 listLimit int = 100 // Max items per ListByOwner page
21 minterRealms *bptree.BPTree
22)
23
24func SetListLimit(cur realm, limit int) {
25 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
26 if limit < 1 {
27 panic("limit must be at least 1")
28 }
29
30 oldLimit := listLimit
31 listLimit = limit
32
33 chain.Emit(
34 SetListLimitEvent,
35 "oldLimit", strconv.Itoa(oldLimit),
36 "newLimit", strconv.Itoa(limit),
37 )
38}
39
40func GetListLimit() int {
41 return listLimit
42}
43
44func SetMinterRealm(cur realm, pkgPath string) {
45 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
46 addr := minterRealmAddress(pkgPath)
47 minterRealms.Set(addr.String(), true)
48 chain.Emit(
49 SetMinterRealmEvent,
50 "pkgPath", pkgPath,
51 "address", addr.String(),
52 )
53}
54
55func UnsetMinterRealm(cur realm, pkgPath string) {
56 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
57 addr := minterRealmAddress(pkgPath)
58 if !minterRealms.Has(addr.String()) {
59 panic("package path is not a minter realm")
60 }
61 minterRealms.Remove(addr.String())
62 chain.Emit(
63 UnsetMinterRealmEvent,
64 "pkgPath", pkgPath,
65 "address", addr.String(),
66 )
67}
68
69func IsMinterRealm(addr address) bool {
70 return minterRealms.Has(addr.String())
71}
72
73func minterRealmAddress(pkgPath string) address {
74 if pkgPath == "" {
75 panic("package path is required")
76 }
77 if !strings.HasPrefix(pkgPath, "gno.land/r/") || pkgPath == "gno.land/r/" {
78 panic("invalid package path")
79 }
80 return chain.PackageAddress(pkgPath)
81}