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

config.gno

1.68 Kb · 81 lines
 1package item
 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}