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

stable package

Overview

Package stablev4 is the permanent half of the gems6v2 split-realm design (stablev3 plus two fixes from the 2026-09-15 Pearl test run: a burned token's own page, and no per-token copy of the sealed image) -- a candidate successor to the real gems6/stable, built to prove two things together before either goes anywhere near mainnet: a delayed-reveal mint (fixing the OutOfGasError problem the real gems6/v1's instant-reveal MintAssembled has against Adena's own gas estimation -- confirmed on a throwaway single-realm spike, gno.land/r/g1gn6t0q9wenwhdda47rkrpfd63kcxjvyp7eqwku/revealpoc, before this real split-realm version was attempted), and the approved gemsartfab art package (crystal-look repaint + a real Rose Cut cascade fix + a facet-merge seam fix on Round Brilliant/Oval).

Deployed under a test address (not the vesting wallet) so this whole prototype -- stable, campaign, v2, and gemsartfab itself -- is self-contained and doesn't need the real collection's own keys to validate. Folding a confirmed-good design into the real mainnet deploy is a separate step once this proves out.

Reveal mechanism: MintAssembled records a trait selection and a SEALED placeholder image immediately (cheap, see RecordMint's own doc comment for why this is the whole point). TokenURI/TokenMetadata compute the real image via gemsartfab -- but ONLY once RevealDelayBlocks has passed -- through currentMetadata, which is the one addition to the real stable's own read path. This DOES mean this realm, unlike the real gems6/stable, imports an art package directly: unavoidable given gno's static imports (the realm serving TokenURI has to know how to render, and rendering can't be deferred to "whichever realm is currently approved" the way minting can, since a future version's own art package isn't importable before it exists). Matches the tradeoff the older g20 collection already accepted for the exact same reason -- not a new problem introduced here.

Everything else (ownership, whitelist, royalty, claim log, campaign wiring) is unchanged from the real gems6/stable -- see that package's own doc comments for the full design history.

Ledger: the standard gno.land/p/nt/grc721/v0 (2026-09-26), not a vendored grc721. Adena lists only collections whose NewToken/Transfer events come from that exact package (see ~/gno-land-dev-notes.md), and chain.Emit stamps the emitting package, so this cannot be retrofitted later. The package stores ownership only; every token's metadata is computed here from its traits (sealedData), never stored per token. TokenURI returns the image itself (Adena puts it straight into an <img>); TokenMetadata returns the metadata as a JSON string, and TokenJSON the classic base64 JSON data URI for marketplaces that want it.

Function

RecordMint

func RecordMint(cur realm, to address, payer address, tid grc721.TokenID, chainName string, shapeIdx, colorIdx int, metal string, active bool, comboKey string, rarity string) grc721.TokenID

RecordMint: the ENTIRE point of this v2 candidate. Unlike the real gems6/stable's own RecordMint, this does NOT take a full, rendered grc721.Metadata -- it takes the raw trait fields instead, and writes a small fixed-size SEALED placeholder to nft's own storage. The real image is never computed here, or anywhere, during a mint transaction -- see currentMetadata for where it actually happens (a plain read, unbound by any tx-level gas-wanted). Only the approved version realm may call this. Reserves comboKey atomically with the mint, same authoritative-check role the real stable's RecordMint plays.

Params

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/g17cjym5e9hhws46lt6329pv2gtx2ay0503hgems/gems/stable" -func "RecordMint" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "https://rpc.gno.land" ADDRESSgnokey query -remote "https://rpc.gno.land" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/g17cjym5e9hhws46lt6329pv2gtx2ay0503hgems/gems/stable" -func "RecordMint" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "https://rpc.gno.land" call.tx