admin.gno
1.69 Kb ยท 88 lines
1package faucet
2
3import (
4 "chain"
5 "chain/runtime"
6 "errors"
7)
8
9func AdminSetInPause(cur realm, inPause bool) string {
10 if err := assertIsAdmin(); err != nil {
11 return err.Error()
12 }
13 gInPause = inPause
14 return ""
15}
16
17func AdminSetMessage(cur realm, message string) string {
18 if err := assertIsAdmin(); err != nil {
19 return err.Error()
20 }
21 gMessage = message
22 return ""
23}
24
25func AdminSetTransferLimit(cur realm, amount int64) string {
26 if err := assertIsAdmin(); err != nil {
27 return err.Error()
28 }
29 gLimit = chain.NewCoin("ugnot", amount)
30 return ""
31}
32
33func AdminSetAdminAddr(cur realm, addr address) string {
34 if err := assertIsAdmin(); err != nil {
35 return err.Error()
36 }
37 gAdminAddr = addr
38 return ""
39}
40
41func AdminAddController(cur realm, addr address) string {
42 if err := assertIsAdmin(); err != nil {
43 return err.Error()
44 }
45
46 size := gControllers.Size()
47
48 if size >= gControllersMaxSize {
49 return "can not add more controllers than allowed"
50 }
51
52 if gControllers.Has(addr.String()) {
53 return addr.String() + " exists, no need to add."
54 }
55
56 gControllers.Set(addr.String(), addr)
57
58 return ""
59}
60
61func AdminRemoveController(cur realm, addr address) string {
62 if err := assertIsAdmin(); err != nil {
63 return err.Error()
64 }
65
66 if !gControllers.Has(addr.String()) {
67 return addr.String() + " is not on the controller list"
68 }
69
70 _, ok := gControllers.Remove(addr.String())
71
72 // it not should happen.
73 // we will check anyway to prevent issues in the underline implementation.
74
75 if !ok {
76 return addr.String() + " is not on the controller list"
77 }
78
79 return ""
80}
81
82func assertIsAdmin() error {
83 caller := runtime.PreviousRealm().Address()
84 if caller != gAdminAddr {
85 return errors.New("restricted for admin")
86 }
87 return nil
88}