operator.gno
1.24 Kb · 59 lines
1package admin
2
3import (
4 "chain"
5
6 "gno.land/p/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v2/accesscontrol"
7 "gno.land/p/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v2/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}