Search Apps Documentation Source Content File Folder Download Copy Actions Download

operator.gno

1.15 Kb · 59 lines
 1package admin
 2
 3import (
 4	"chain"
 5
 6	"gno.land/p/akkadia/v0/accesscontrol"
 7	"gno.land/p/akkadia/v0/ds/btreeset"
 8)
 9
10const (
11	SetOperatorEvent   = "SetOperator"
12	UnsetOperatorEvent = "UnsetOperator"
13)
14
15var (
16	operatorAddrs *btreeset.StringBTreeSet = btreeset.NewStringBTreeSet(32)
17)
18
19func SetOperator(cur realm, addr address) {
20	assertNotFrozen()
21	accesscontrol.AssertIsAdmin(0, cur, IsAdmin)
22
23	assertValidAddress(addr)
24	operatorAddrs.Set(addr.String())
25
26	chain.Emit(
27		SetOperatorEvent,
28		"address", addr.String(),
29	)
30}
31
32func GetOperators() []address {
33	assertMigrationStateAvailable()
34	result := []address{}
35	operatorAddrs.Iterate(nil, nil, func(addr string) bool {
36		result = append(result, address(addr))
37		return false
38	})
39	return result
40}
41
42func UnsetOperator(cur realm, addr address) {
43	assertNotFrozen()
44	accesscontrol.AssertIsAdmin(0, cur, IsAdmin)
45	assertValidAddress(addr)
46	if !operatorAddrs.Has(addr.String()) {
47		panic("address is not an operator")
48	}
49	operatorAddrs.Remove(addr.String())
50	chain.Emit(
51		UnsetOperatorEvent,
52		"address", addr.String(),
53	)
54}
55
56func IsOperator(addr address) bool {
57	assertMigrationStateAvailable()
58	return operatorAddrs.Has(addr.String())
59}