Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

admin.gno

1.27 Kb · 47 lines
 1package validator_scores
 2
 3import "strings"
 4
 5// admin is the samcrew 2-of-3 multisig. Its only power is SetPublisher.
 6const admin address = "g136j0m08pkm2lwwde9dmlx8uee26llent9s5cpf"
 7
 8var publisher address = initialPublisher
 9
10// caller returns the frame-verified caller of a crossing function.
11func caller(cur realm) address {
12	if !cur.IsCurrent() {
13		panic("validator_scores: stale realm")
14	}
15	return cur.Previous().Address()
16}
17
18func requirePublisher(cur realm) {
19	if caller(cur) != publisher {
20		panic("validator_scores: publisher only")
21	}
22}
23
24// isCanonicalAddress accepts only a lowercase, checksummed g1 address.
25func isCanonicalAddress(s string) bool {
26	if len(s) != 40 || !strings.HasPrefix(s, "g1") || strings.ToLower(s) != s {
27		return false
28	}
29	return address(s).IsValid()
30}
31
32// SetPublisher replaces the publisher. Admin only.
33func SetPublisher(cur realm, addr address) {
34	if caller(cur) != admin {
35		panic("validator_scores: admin only")
36	}
37	if !isCanonicalAddress(string(addr)) {
38		panic("validator_scores: invalid publisher address")
39	}
40	publisher = addr
41}
42
43// GetAdmin returns the admin address, for post-deployment checks.
44func GetAdmin() string { return string(admin) }
45
46// GetPublisher returns the current publisher address.
47func GetPublisher() string { return string(publisher) }