SetRegistrationFee
func(fee int64)SetRegistrationFee sets the flat listing fee in ugnot (0..MaxRegistrationFee). Zero is allowed (a fee waiver). Owner only.
- OID
- 070717…e055:3
SetRegistrationFee details
SetTreasury
func(addr .uverse.address)SetTreasury repoints the fee recipient. Must be non-empty (an empty treasury would fail-close RegisterApp). Owner only. Keep this in sync with memba\_market\_config.GetTreasury().
- OID
- 070717…e055:5
SetTreasury details
AddCurator
func(addr .uverse.address)AddCurator grants the curate role (approve pending listings). Owner only.
- OID
- 070717…e055:6
AddCurator details
RemoveCurator
func(addr .uverse.address)RemoveCurator revokes the curate role. Owner only.
- OID
- 070717…e055:7
RemoveCurator details
Pause
func(state bool)Pause is the kill switch: while paused, RegisterApp aborts (reads stay available). Owner only.
- OID
- 070717…e055:8
Pause details
TransferOwnership
func(newOwner .uverse.address)TransferOwnership stages a new owner; it takes effect only after AcceptOwnership is called BY that address (2-step, so a typo can't brick admin).
- OID
- 070717…e055:9
TransferOwnership details
AcceptOwnership
func()AcceptOwnership completes the handoff. Only the staged pendingOwner may call it.
- OID
- 070717…e055:10
AcceptOwnership details
boolStr
func(b bool) string- OID
- 070717…e055:11
boolStr details
AdminAddress
untyped stringAdminAddress is the samcrew-core 2-of-2 multisig (same as the fee spine's admin/ treasury). It is the initial owner AND the initial treasury.
Value
"g10kw7e55e9wc8j8v6904ck29dqwr9fm9u280juh"
DefaultRegistrationFee
int64Value
1000000
MaxRegistrationFee
int64Value
100000000
MaxNameLen
untyped bigintValue
(80 <untyped> bigint)
MaxTaglineLen
untyped bigintValue
(140 <untyped> bigint)
MaxDescrLen
untyped bigintValue
(2000 <untyped> bigint)
MaxURLLen
untyped bigintValue
(400 <untyped> bigint)
MaxPkgPathLen
untyped bigintValue
(200 <untyped> bigint)
MaxCIDLen
untyped bigintValue
(100 <untyped> bigint)
FlagHideThreshold
untyped bigintValue
(5 <untyped> bigint)
StatusPending
untyped stringStatusPending / StatusLive / StatusDelisted are the listing lifecycle states.
Value
"pending"
StatusLive
untyped stringStatusPending / StatusLive / StatusDelisted are the listing lifecycle states.
Value
"live"
StatusDelisted
untyped stringStatusPending / StatusLive / StatusDelisted are the listing lifecycle states.
Value
"delisted"
Listing
typeListing is one app. PkgPath (the realm/package path) is the unique key.
Value
memba_appstore_v1.Listing
owner
.uverse.addressValue
<gnolang.StringValue>
pendingOwner
.uverse.addressValue
<zero>
treasury
.uverse.addressValue
<gnolang.StringValue>
registrationFee
int64Value
1000000
paused
boolValue
false
curators
*avl.Tree// address string -> bool
- OID
- 070717…e055:18
curators details
listings
*avl.Tree// pkgPath -> \*Listing
- OID
- 070717…e055:21
listings details
flaggedBy
*avl.Tree// pkgPath + "\\x00" + addr -> bool (one flag per addr)
- OID
- 070717…e055:24
flaggedBy details
nextId
uint64Value
1
init.31
func()- OID
- 070717…e055:27
init.31 details
caller
func() .uverse.address- OID
- 070717…e055:29
caller details
assertOwner
func()- OID
- 070717…e055:30
assertOwner details
assertNotPaused
func()- OID
- 070717…e055:31
assertNotPaused details
RegisterApp
func(pkgPath string, name string, tagline string, descr string, category string, iconCID string, appURL string) uint64RegisterApp lists a new app. The caller pays EXACTLY registrationFee ugnot with the call; the whole fee is forwarded to the treasury (no custody). The listing starts \`pending\` and is not shown live until a curator approves it.
- OID
- 070717…e055:32
RegisterApp details
ApproveApp
func(pkgPath string)ApproveApp flips a pending listing live. Curator-only.
- OID
- 070717…e055:33
ApproveApp details
DelistApp
func(pkgPath string)DelistApp removes a listing from public view. The publisher or a curator may do it.
- OID
- 070717…e055:34
DelistApp details
RestoreApp
func(pkgPath string)RestoreApp brings a delisted app back to \`pending\` (re-curation required before it shows live again). Curator-only — this is the reverse of DelistApp, so a mistaken or contested delist is recoverable.
- OID
- 070717…e055:35
RestoreApp details
FlagApp
func(pkgPath string)FlagApp lets any user flag a LIVE listing once. At FlagHideThreshold distinct flags the listing stops appearing live; a curator then DelistApp's it or leaves it for review (a delisted app can be brought back with RestoreApp).
- OID
- 070717…e055:36
FlagApp details
isVisible
func(l *memba_appstore_v1.Listing) boolisVisible reports whether a listing shows in the live list.
- OID
- 070717…e055:37
isVisible details
GetRegistrationFee
func() int64GetRegistrationFee returns the current flat listing fee in ugnot.
- OID
- 070717…e055:38
GetRegistrationFee details
GetTreasury
func() .uverse.address- OID
- 070717…e055:39
GetTreasury details
GetOwner
func() .uverse.address- OID
- 070717…e055:40
GetOwner details
AppCount
func() intAppCount returns the total number of registered listings (any status).
- OID
- 070717…e055:41
AppCount details
GetStatsJSON
func() stringGetStatsJSON returns a small stats object for a status header.
- OID
- 070717…e055:42
GetStatsJSON details
isCurator
func(a .uverse.address) bool- OID
- 070717…e055:43
isCurator details
mustGet
func(pkgPath string) *memba_appstore_v1.Listing- OID
- 070717…e055:44
mustGet details
validatePkgPath
func(p string) stringvalidatePkgPath normalizes + sanity-checks a realm/package path.
- OID
- 070717…e055:45
validatePkgPath details
hasPrefix
func(s string, pre string) bool- OID
- 070717…e055:46
hasPrefix details
itoa
func(n int) string- OID
- 070717…e055:47
itoa details
itoa64
func(n uint64) string- OID
- 070717…e055:48
itoa64 details
DefaultPageSize
untyped bigint// default JSON window
Value
(20 <untyped> bigint)
MaxPageLimit
untyped bigint// hard cap on any JSON read window (read-DoS guard)
Value
(100 <untyped> bigint)
clampLimit
func(limit int) int- OID
- 070717…e055:49
clampLimit details
jsonEscape
func(s string) stringjsonEscape escapes a string for embedding in a JSON string literal — every listing text field is attacker-supplied, so this is the only thing between a malicious name/tagline and a broken/injected JSON payload on the read path.
- OID
- 070717…e055:51
jsonEscape details
listingJSON
func(l *memba_appstore_v1.Listing, full bool) stringlistingJSON renders one listing. \`full\` adds the (large) description — omitted from list windows so a bounded page stays small.
- OID
- 070717…e055:52
listingJSON details
ListLiveJSON
func(offset int, limit int) stringListLiveJSON returns a bounded JSON array of the visible (live, un-hidden) listings: skip \`offset\`, take up to clamped \`limit\`. Iteration stops as soon as the window is filled, so the scan is bounded by offset+limit regardless of catalog size.
- OID
- 070717…e055:53
ListLiveJSON details
GetListingJSON
func(pkgPath string) stringGetListingJSON returns a single listing (any status) with its description, or the JSON literal \`null\` if the package path is not registered.
- OID
- 070717…e055:54
GetListingJSON details
RenderMaxRows
untyped bigintRenderMaxRows bounds the Render() output so a large catalog can never make the realm render-DoS (mirrors the feed's live-only bounded render).
Value
(100 <untyped> bigint)
Render
func(path string) stringRender shows the live catalog (bounded) — a read-only trust surface for gnoweb. The frontend reads structured data via the getters, not this markdown.
- OID
- 070717…e055:55
Render details
moreNote
func(live int) string- OID
- 070717…e055:57
moreNote details
esc
func(s string) stringesc neutralizes the markdown/table metachars that could break the table or inject layout from an attacker-supplied listing field.
- OID
- 070717…e055:58