AddAttester
func(addr .uverse.address)AddAttester allowlists an ADDRESS (the backend verifier's dedicated low-privilege key — never the deploy multisig itself) as an authorized result source. Owner only.
- OID
- 0e7ad5…a0b7:3
AddAttester details
RemoveAttester
func(addr .uverse.address)RemoveAttester revokes an attester key. Owner only.
- OID
- 0e7ad5…a0b7:5
RemoveAttester details
Pause
func(state bool)Pause freezes all attestation + receipt requests (reads stay available). Owner only.
- OID
- 0e7ad5…a0b7:6
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
- 0e7ad5…a0b7:7
TransferOwnership details
CancelOwnershipTransfer
func()CancelOwnershipTransfer withdraws a staged handoff. Owner only.
- OID
- 0e7ad5…a0b7:8
CancelOwnershipTransfer details
GetPendingOwner
func() .uverse.address- OID
- 0e7ad5…a0b7:9
GetPendingOwner details
AcceptOwnership
func()AcceptOwnership completes the handoff. Only the staged pendingOwner may call it.
- OID
- 0e7ad5…a0b7:10
AcceptOwnership details
MaxScore
int64Value
1000000000
MaxGameLen
untyped bigintValue
(32 <untyped> bigint)
MaxStatsLen
untyped bigintValue
(256 <untyped> bigint)
ReceiptsCap
untyped bigintValue
(100 <untyped> bigint)
ReceiptDailyCap
untyped bigintValue
(5 <untyped> bigint)
RequestCap
untyped bigintValue
(8 <untyped> bigint)
Entry
typeEntry is one attested, verifier-reproduced run result.
Value
memba_arcade_leaderboard_v1.Entry
owner
.uverse.addressValue
<gnolang.StringValue>
pendingOwner
.uverse.addressValue
<gnolang.StringValue>
paused
boolValue
false
attesters
*avl.Tree// attester address string -> bool
- OID
- 0e7ad5…a0b7:15
attesters details
boards
*avl.Tree// "game|day|addr" -> \*Entry (competitive, one best per addr/game/day)
- OID
- 0e7ad5…a0b7:18
boards details
receipts
*avl.Tree// addr string -> \[]\*Entry (training ring, mixed-game, capped)
- OID
- 0e7ad5…a0b7:21
receipts details
logHashes
*avl.Tree// "game|day|sha256" -> addr string (board slot: first-submitter-per-day)
- OID
- 0e7ad5…a0b7:24
logHashes details
hashOwners
*avl.Tree// sha256 -> addr string (GLOBAL: a log binds to ONE address, ever)
- OID
- 0e7ad5…a0b7:27
hashOwners details
requests
*avl.Tree// "addr|sha256" -> int64 height (player-paid receipt requests)
- OID
- 0e7ad5…a0b7:30
requests details
requestCount
*avl.Tree// addr string -> int (pending requests, capped at RequestCap)
- OID
- 0e7ad5…a0b7:33
requestCount details
boardCount
*avl.Tree// "game|day" -> int (entries per game-day, O(1) reads)
- OID
- 0e7ad5…a0b7:36
boardCount details
init.25
func()- OID
- 0e7ad5…a0b7:38
init.25 details
seedAuthority
func(publisher .uverse.address)seedAuthority installs the publisher as owner. It runs once at package load.
- OID
- 0e7ad5…a0b7:40
seedAuthority details
assertOwner
func()- OID
- 0e7ad5…a0b7:41
assertOwner details
assertNotPaused
func()- OID
- 0e7ad5…a0b7:42
assertNotPaused details
isAttester
func(addr string) bool- OID
- 0e7ad5…a0b7:43
isAttester details
assertAttester
func()assertAttester is the single trust boundary: only the owner or an allowlisted attester key (the backend verifier) may write results. The verifier's own re-simulation gate is what makes an attested score meaningful — this realm only enforces that the source is trusted.
- OID
- 0e7ad5…a0b7:44
assertAttester details
assertEntryShape
func(game string, addr .uverse.address, day string, mode string, seed string, score int64, simVersion int64, stateHash string, logHash string, stats string)- OID
- 0e7ad5…a0b7:45
assertEntryShape details
assertGameSlug
func(game string)assertGameSlug validates the game slug shape: 1..MaxGameLen bytes of \[a-z0-9-]. The charset excludes '|' (and everything else), so a slug can never forge or split a composite key.
- OID
- 0e7ad5…a0b7:46
assertGameSlug details
AttestScore
func(game string, addr .uverse.address, day string, seed string, score int64, simVersion int64, stateHash string, logHash string, stats string)AttestScore writes (or improves) an address's entry on a game's competitive board for a day. Attester-only. The verifier batches a day's results into one multi-msg tx at day close, plus spam-capped singles for the "certify now" flow. Re-attesting the same game/address/day only ever RAISES the score (Second Wind). A log hash already attested for that game-day for a DIFFERENT address is rejected — on a shared daily seed a valid input log is portable, so first-submitter wins (replay-theft defense). \`stats\` is the attester-authored per-game JSON blob (waves, wins, levels, …) — never ranked, only echoed by reads.
- OID
- 0e7ad5…a0b7:47
AttestScore details
AttestReceipt
func(game string, addr .uverse.address, day string, seed string, score int64, simVersion int64, stateHash string, logHash string, stats string)AttestReceipt mints a personal training receipt — a verified "I did this run", never ranked. Attester-only; capped per address per (game, day) and ring-capped per address. Fulfills (and clears) a matching player-paid RequestReceipt if one is staged.
- OID
- 0e7ad5…a0b7:48
AttestReceipt details
RequestReceipt
func(logHash string)RequestReceipt is the player-paid leg: ANY signer stages an on-chain consent + payment anchor for one of their own runs (they pay this call's gas). The backend sees the event, verifies the stored log, and fulfills via AttestReceipt. Self-limiting: each request costs the caller gas, and one key slot per (addr, hash). Hash-scoped and game-agnostic on purpose — the verifier, not the player, decides which game the log replays under.
- OID
- 0e7ad5…a0b7:49
RequestReceipt details
assertHashOwner
func(logHash string, addr .uverse.address)assertHashOwner enforces the GLOBAL one-log-one-address rule shared by both buckets (and by every game), and is idempotent for the rightful owner (Second Wind re-attests).
- OID
- 0e7ad5…a0b7:50
assertHashOwner details
clearRequest
func(addr .uverse.address, logHash string)clearRequest removes a fulfilled request and frees the caller's cap slot.
- OID
- 0e7ad5…a0b7:51
clearRequest details
itoa64
func(n int64) string- OID
- 0e7ad5…a0b7:52
itoa64 details
boolStr
func(b bool) string- OID
- 0e7ad5…a0b7:53
boolStr details
publisherAtLoad
func() .uverse.address- OID
- 0e7ad5…a0b7:54
publisherAtLoad details
GetOwner
func() .uverse.address- OID
- 0e7ad5…a0b7:56
GetOwner details
IsPaused
func() boolIsPaused reports whether attestation is frozen.
- OID
- 0e7ad5…a0b7:58
IsPaused details
IsAttester
func(addr string) boolIsAttester reports whether an address is on the attester allowlist.
- OID
- 0e7ad5…a0b7:59
IsAttester details
BoardCount
func(game string, day string) intBoardCount returns how many addresses hold an entry on a game's board for a day (O(1)).
- OID
- 0e7ad5…a0b7:60
BoardCount details
entryJSON
func(e *memba_arcade_leaderboard_v1.Entry) stringentryJSON emits one entry. \`stats\` is the attester's opaque JSON blob and is emitted as an ESCAPED STRING FIELD — never spliced raw into the document — so a malformed blob can corrupt nothing but itself.
- OID
- 0e7ad5…a0b7:61
entryJSON details
GetEntryJSON
func(game string, day string, addr string) stringGetEntryJSON returns one address's board entry for a game-day, or "null".
- OID
- 0e7ad5…a0b7:62
GetEntryJSON details
dayEntries
func(game string, day string) []*memba_arcade_leaderboard_v1.EntrydayEntries collects a game-day's board entries in canonical rank order: score desc, then earlier attestation, then address — a total order, so pagination is stable.
- OID
- 0e7ad5…a0b7:63
dayEntries details
ranksAfter
func(a *memba_arcade_leaderboard_v1.Entry, b *memba_arcade_leaderboard_v1.Entry) boolranksAfter reports whether a should sit AFTER b in rank order — a total order (score desc, then earlier attestation, then address) so pagination is stable and identical everywhere.
- OID
- 0e7ad5…a0b7:64
ranksAfter details
GetBoardJSON
func(game string, day string, offset int, limit int) stringGetBoardJSON returns a page of a game-day's board, rank-ordered, as {"game":…,"day":…,"total":N,"entries":\[…]}. Reads sort the day's entries on demand — fine for a testnet-scale board; a rank index (points\_v1-style) is the v2 upgrade if daily boards grow past a few thousand entries.
- OID
- 0e7ad5…a0b7:65
GetBoardJSON details
GetReceiptsJSON
func(addr string, offset int, limit int) stringGetReceiptsJSON returns a page of one address's training receipts (all games, newest first) as {"addr":…,"total":N,"entries":\[…]}.
- OID
- 0e7ad5…a0b7:66
GetReceiptsJSON details
Render
func(path string) stringRender serves a human-readable snapshot: \`:board/\<game>/YYYY-MM-DD\` for a game-day's top entries, \`:receipts/\<addr>\` for an address's latest receipts.
- OID
- 0e7ad5…a0b7:67
Render details
jsonEscape
func(s string) stringjsonEscape escapes a string for embedding in a JSON string literal (defensive — addresses are bech32 and hashes are hex, but the read path escapes regardless; the Render path reuses it to neutralize newlines/control chars in attester-authored stats).
- OID
- 0e7ad5…a0b7:68