← Back to Realms

Realm

gno.land/r/samcrew/memba_appstore_v3

Overview

Realm Path
gno.land/r/samcrew/memba_appstore_v3
Exported Functions
35
State Entries
39
Source Files
6
Total Package Entries
104

Exported Functions

35 exported functions

State

39 state entries

Source Code

FILES
admin.gno
go
1package memba_appstore_v3
2
3import "chain"
4
5// Admin surface — owner-gated. The owner is the samcrew multisig at launch and can
6// be handed to the memba_dao executor via the 2-step TransferOwnership/AcceptOwnership
7// (never a 1-step transfer to a mistyped/dead address).
8
9// SetRegistrationFee sets the flat listing fee in ugnot (0..MaxRegistrationFee).
10// Zero is allowed (a fee waiver). Owner only.
11func SetRegistrationFee(cur realm, fee int64) {
12	assertOwner()
13	if fee < 0 || fee > MaxRegistrationFee {
14		panic("fee out of range [0, MaxRegistrationFee]")
15	}
16	registrationFee = fee
17	chain.Emit("RegistrationFeeSet", "fee", itoa64(uint64(fee)))
18}
19
20// SetTreasury repoints the fee recipient. Must be non-empty (an empty treasury would
21// fail-close RegisterApp). Owner only. Keep this in sync with
22// memba_market_config.GetTreasury().
23func SetTreasury(cur realm, addr address) {
24	assertOwner()
25	if addr == "" {
26		panic("treasury must be non-empty")
27	}
28	treasury = addr
29	chain.Emit("TreasurySet", "treasury", addr.String())
30}
31
32// AddCurator grants the curate role (approve pending listings). Owner only.
33func AddCurator(cur realm, addr address) {
34	assertOwner()
35	if addr == "" {
36		panic("curator must be non-empty")
37	}
38	curators.Set(addr.String(), true)
39	chain.Emit("CuratorAdded", "curator", addr.String())
40}
41
42// RemoveCurator revokes the curate role. Owner only.
43func RemoveCurator(cur realm, addr address) {
44	assertOwner()
45	curators.Remove(addr.String())
46	chain.Emit("CuratorRemoved", "curator", addr.String())
47}
48
49// Pause is the kill switch: while paused, RegisterApp aborts (reads stay available).
50// Owner only.
51func Pause(cur realm, state bool) {
52	assertOwner()
53	paused = state
54	chain.Emit("PauseSet", "paused", boolStr(state))
55}
56
57// TransferOwnership stages a new owner; it takes effect only after AcceptOwnership
58// is called BY that address (2-step, so a typo can't brick admin). A later call
59// replaces the staged address; CancelOwnershipTransfer withdraws it.
60func TransferOwnership(cur realm, newOwner address) {
61	assertOwner()
62	if newOwner == "" {
63		panic("newOwner must be non-empty")
64	}
65	if !newOwner.IsValid() {
66		panic("invalid address: " + newOwner.String())
67	}
68	if newOwner == owner {
69		panic("newOwner is the current owner")
70	}
71	pendingOwner = newOwner
72	chain.Emit("OwnershipTransferStarted", "pending", newOwner.String())
73}
74
75// CancelOwnershipTransfer withdraws a staged handoff. Owner only.
76func CancelOwnershipTransfer(cur realm) {
77	assertOwner()
78	if pendingOwner == "" {
79		panic("no pending ownership transfer")
80	}
81	cancelled := pendingOwner
82	pendingOwner = ""
83	chain.Emit("OwnershipTransferCancelled", "pending", cancelled.String())
84}
85
86// GetPendingOwner returns the staged successor, or the empty address.
87func GetPendingOwner() address { return pendingOwner }
88
89// AcceptOwnership completes the handoff. Only the staged pendingOwner may call it.
90// The former owner's curator grant is revoked atomically; the successor can
91// curate immediately and may explicitly re-appoint the former owner later.
92func AcceptOwnership(cur realm) {
93	if !cur.IsCurrent() {
94		panic("spoofed realm")
95	}
96	if pendingOwner == "" {
97		panic("no pending ownership transfer")
98	}
99	if cur.Previous().Address() != pendingOwner {
100		panic("unauthorized: only the pending owner may accept")
101	}
102	previous := owner
103	curators.Set(pendingOwner.String(), true)
104	curators.Remove(previous.String())
105	owner = pendingOwner
106	pendingOwner = ""
107	chain.Emit("OwnershipTransferAccepted", "owner", owner.String())
108}
109
110func boolStr(b bool) string {
111	if b {
112		return "true"
113	}
114	return "false"
115}
116

Raw Package Data

Raw JSON data