InitialMinX
int64Value
-32
InitialMaxX
int64Value
95
InitialMinY
int64Value
-32
InitialMaxY
int64Value
95
MaxBoardDim
untyped bigintValue
(128 <untyped> bigint)
ExpandStep
untyped bigintValue
(8 <untyped> bigint)
ExpandThresholdPercent
untyped bigintValue
(80 <untyped> bigint)
CooldownBlocks
untyped bigintValue
(1 <untyped> bigint)
cellPx
untyped bigintValue
(8 <untyped> bigint)
FeePerPixelUgnot
untyped bigint// 0.1 GNOT
Value
(100000 <untyped> bigint)
VandalismFeeUgnot
untyped bigint// 1 GNOT
Value
(1000000 <untyped> bigint)
MaxBulkPixels
untyped bigintValue
(10 <untyped> bigint)
MaxCommunityDesignPixels
untyped bigintValue
(4000 <untyped> bigint)
MaxCommunityDesignNameLen
untyped bigintValue
(60 <untyped> bigint)
palette
[]string- OID
- 09200d…502f:4
palette details
collectionOwner
.uverse.addressValue
<gnolang.StringValue>
minX
int64Value
-32
maxX
int64Value
95
minY
int64Value
-32
maxY
int64Value
95
grid
v0.Tree- OID
- 09200d…502f:10
grid details
placedBy
v0.Tree- OID
- 09200d…502f:12
placedBy details
placedAtHeight
v0.Tree- OID
- 09200d…502f:14
placedAtHeight details
lastPlacedBlock
v0.Tree- OID
- 09200d…502f:16
lastPlacedBlock details
placementCounts
v0.Tree// address.String() -> int64, total successful placements (leaderboard)
- OID
- 09200d…502f:18
placementCounts details
officialTarget
v0.Tree// key(x,y) -> int64 colorIndex, owner-curated free-to-place design
- OID
- 09200d…502f:20
officialTarget details
communityDesigns
v0.Tree// designID -> encoded "x,y,c;x,y,c;..." string
- OID
- 09200d…502f:22
communityDesigns details
communityDesignNames
v0.Tree// designID -> display name
- OID
- 09200d…502f:24
communityDesignNames details
communityDesignCount
int64Value
17
totalPlacements
int64Value
2888
occupiedCells
int64Value
2669
expansionsCount
int64Value
0
migrationOpen
boolValue
true
key
func(x int64, y int64) string- OID
- 09200d…502f:30
key details
callerAddress
func() .uverse.address- OID
- 09200d…502f:32
callerAddress details
assertOwner
func()- OID
- 09200d…502f:33
assertOwner details
getPixel
func(x int64, y int64) int64- OID
- 09200d…502f:34
getPixel details
boardArea
func() int64- OID
- 09200d…502f:35
boardArea details
boardWidth
func() int64- OID
- 09200d…502f:36
boardWidth details
maybeExpand
func()- OID
- 09200d…502f:37
maybeExpand details
expand
func()- OID
- 09200d…502f:38
expand details
ForceExpand
func()- OID
- 09200d…502f:39
ForceExpand details
inBounds
func(x int64, y int64) bool- OID
- 09200d…502f:40
inBounds details
recordPlacement
func(x int64, y int64, colorIndex int64, placer .uverse.address, height int64)- OID
- 09200d…502f:41
recordPlacement details
bumpPlacementCount
func(placer .uverse.address)bumpPlacementCount counts every successful placement action (including recolors and erasures of an existing cell) toward the leaderboard -- simpler and more transparent than trying to track "cells currently attributed to this address", which is a fuzzy concept on a canvas anyone can recolor.
- OID
- 09200d…502f:42
bumpPlacementCount details
isOfficialTarget
func(x int64, y int64, colorIndex int64) bool- OID
- 09200d…502f:43
isOfficialTarget details
inOfficialTargetArea
func(x int64, y int64) boolinOfficialTargetArea reports whether (x, y) has ANY owner-curated target color registered, regardless of what colorIndex is being proposed -- used to tell "wrong color on a logo cell" (vandalism, charged VandalismFeeUgnot) apart from "cell outside the design entirely" (charged the normal FeePerPixelUgnot).
- OID
- 09200d…502f:44
inOfficialTargetArea details
IsOfficialTarget
func(x int64, y int64, colorIndex int64) bool- OID
- 09200d…502f:45
IsOfficialTarget details
InOfficialTargetArea
func(x int64, y int64) bool- OID
- 09200d…502f:46
InOfficialTargetArea details
pixelFee
func(x int64, y int64, colorIndex int64) int64pixelFee returns what a single (x, y, colorIndex) placement costs: free if it matches the official target exactly, VandalismFeeUgnot if the cell is part of the target area but the color is wrong, or the normal FeePerPixelUgnot for anywhere else on the board.
- OID
- 09200d…502f:47
pixelFee details
FeePerPixel
func() int64- OID
- 09200d…502f:48
FeePerPixel details
VandalismFeePerPixel
func() int64- OID
- 09200d…502f:49
VandalismFeePerPixel details
MaxBulkPixelsPerTx
func() int64- OID
- 09200d…502f:50
MaxBulkPixelsPerTx details
SetOfficialTarget
func(encoded string)SetOfficialTarget merges entries into the free-to-place design -- owner-only, additive rather than replacing. Registering the full ~800-cell logo costs real storage deposit (measured ~0.19 GNOT/cell on testnet), enough that doing it in one transaction risks needing the whole amount upfront in a single call; additive means it can be split across as many affordable calls as needed, called repeatedly over time. encoded is "x,y,c;x,y,c;...", matching the CSV-ish convention already used by TopPlacers. Calling this with a coordinate already in the target just overwrites that one entry's color, same as you'd expect.
- OID
- 09200d…502f:51
SetOfficialTarget details
ClearOfficialTarget
func()ClearOfficialTarget wipes the entire free-to-place design -- owner- only. Split out from SetOfficialTarget now that registration is additive, so "start over from nothing" is still possible but isn't the default behavior of every registration call.
- OID
- 09200d…502f:52
ClearOfficialTarget details
SubmitCommunityDesign
func(name string, encoded string) stringSubmitCommunityDesign registers a new community-submitted design -- anyone can call this, not just the owner. encoded is "x,y,c;x,y,c;...", already in absolute board coordinates (the submitter positions it client-side before submitting). Placing any of these cells still costs the normal FeePerPixelUgnot, same as any other free-form cell -- this just makes the design's shape and position visible on-chain so other visitors' browsers can render a progress bar for it and help fill it in, the same way everyone already helps finish the owner-curated logo.
- OID
- 09200d…502f:53
SubmitCommunityDesign details
ListCommunityDesigns
func() stringListCommunityDesigns returns "id,name,pixelCount;id,name,pixelCount;..." for every submitted design, in submission order.
- OID
- 09200d…502f:54
ListCommunityDesigns details
GetCommunityDesign
func(id string) stringGetCommunityDesign returns the raw "x,y,c;x,y,c;..." for one design, or "" if id doesn't exist.
- OID
- 09200d…502f:55
GetCommunityDesign details
RemoveCommunityDesign
func(id string)RemoveCommunityDesign lets the owner delist a design (offensive name, spam, abuse of the free-submission path) -- owner-only moderation hook. Pixels already placed toward it stay exactly as painted (this only removes it from ListCommunityDesigns/GetCommunityDesign, it doesn't touch the grid), and the id is never reused.
- OID
- 09200d…502f:56
RemoveCommunityDesign details
collectPayment
func(feeUgnot int64)collectPayment verifies at least feeUgnot of ugnot was attached to this call (via the standard "send" field on /vm.m\_call) and forwards exactly that much from the realm's own balance to collectionOwner, leaving any overpayment sitting in the realm's balance rather than dealing with refund complexity -- callers control how much they attach, so overpaying is their own choice, not something to protect against. chain/runtime/unsafe's own doc on OriginSend warns the envelope is shared across the whole call chain, so a malicious intermediate realm could consume it after a naive check passes (TOCTOU) -- the doc recommends pairing OriginSend with AssertOriginCall AND IsUserCall. AssertOriginCall specifically panics if invoked from anywhere but a top-level entry point (its own doc: "panic... when invoked by another method, even from the same realm or package"), so callers (SetPixel, SetPixels) call it themselves before reaching here rather than this helper calling it on their behalf.
- OID
- 09200d…502f:57
collectPayment details
SetPixel
func(x int64, y int64, colorIndex int64)- OID
- 09200d…502f:58
SetPixel details
SetPixels
func(encoded string)SetPixels places up to MaxBulkPixels pixels in one transaction. encoded is "x,y,c;x,y,c;...". Cooldown is checked and updated once for the whole batch rather than per pixel -- SetPixel's own per-call cooldown would otherwise reject every entry after the first within the same block, since they all execute in the same transaction/ height. Fee is the sum of pixelFee(x, y, c) across every entry, collected as one payment.
- OID
- 09200d…502f:59
SetPixels details
ImportHistoricalPixel
func(x int64, y int64, colorIndex int64, originalPlacer .uverse.address, originalHeight int64)- OID
- 09200d…502f:60
ImportHistoricalPixel details
CloseMigrationWindow
func()- OID
- 09200d…502f:61
CloseMigrationWindow details
MigrationOpen
func() bool- OID
- 09200d…502f:62
MigrationOpen details
GetPixel
func(x int64, y int64) int64- OID
- 09200d…502f:63
GetPixel details
PlacedBy
func(x int64, y int64) (.uverse.address, int64)- OID
- 09200d…502f:64
PlacedBy details
Bounds
func() (int64, int64, int64, int64)- OID
- 09200d…502f:65
Bounds details
BoardWidth
func() int64- OID
- 09200d…502f:66
BoardWidth details
BoardHeight
func() int64- OID
- 09200d…502f:67
BoardHeight details
TotalPlacements
func() int64- OID
- 09200d…502f:68
TotalPlacements details
OccupiedCells
func() int64- OID
- 09200d…502f:69
OccupiedCells details
ExpansionsCount
func() int64- OID
- 09200d…502f:70
ExpansionsCount details
PaletteCSV
func() string- OID
- 09200d…502f:71
PaletteCSV details
placerCount
typeValue
pixels.placerCount
TopPlacers
func(n int64) stringTopPlacers returns up to n "address,count" pairs, semicolon-separated, sorted by count descending -- the leaderboard. Iterated fresh on every call rather than kept pre-sorted, since contributor counts are small enough (real participants, not per-pixel) for a plain insertion sort to be cheap regardless of how large the canvas itself grows. Gno's "sort" package predates Go's generics-based sort.Slice, so this is hand-rolled rather than using sort.Interface for a one-off local type.
- OID
- 09200d…502f:72
TopPlacers details
CooldownRemaining
func(addr .uverse.address) int64- OID
- 09200d…502f:73
CooldownRemaining details
Snapshot
func() string- OID
- 09200d…502f:74
Snapshot details
canvasDataURI
func() string- OID
- 09200d…502f:75
canvasDataURI details
Render
func(path string) string- OID
- 09200d…502f:76