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}