MetadataStatic
untyped string// base URI fixed at creation
Value
"static"
MetadataReveal
untyped string// placeholder until one committed reveal
Value
"reveal"
MetadataMutable
untyped string// creator may change the base URI until frozen
Value
"mutable"
metadata
typemetadata decides what TokenURI answers. Once frozen, the base URI can never change again; only then can traits be committed.
Value
v1.metadata
contentAddressed
func(s string) boolcontentAddressed accepts an IPFS path that resolves to the same files for good: a server behind any other scheme could change them at will, and an empty CID, a "." or ".." segment, an escape, a query or a fragment could make a gateway resolve it elsewhere, a mutable IPNS name included.
- OID
- 09fb21…b7d9:3
contentAddressed details
validBaseURI
func(s string) boolA base URI is a directory: token n resolves to \<base>\<n>.json.
- OID
- 09fb21…b7d9:5
validBaseURI details
validHash
func(s string) bool- OID
- 09fb21…b7d9:6
validHash details
RevealCommitment
func(creator .uverse.address, salt string, baseURI string) stringRevealCommitment is what a creator commits to at creation and opens at Reveal: sha256("launchpad-reveal-v1|\<creator>|\<salt>|\<base URI>"), with a salt of 64 hex digits the creator keeps secret until then. The salt keeps a guessed URI from being confirmed before the reveal. The creator's address keeps another account from reusing the commitment: a collection's ID does not exist yet when its creator commits, so the account stands in for it.
- OID
- 09fb21…b7d9:7
RevealCommitment details
newMetadata
func(mode string, baseURI string, placeholderURI string, commitment string, provenance string, creator .uverse.address) v1.metadata- OID
- 09fb21…b7d9:8
newMetadata details
emitMetadata
func(id string, m v1.metadata)- OID
- 09fb21…b7d9:9
emitMetadata details
Reveal
func(id string, baseURI string, salt string)Reveal publishes the base URI committed at creation, with the salt that opens the commitment, and fixes it for good. The commitment stays bound to the account that created the collection, whoever holds the creator role now.
- OID
- 09fb21…b7d9:10
Reveal details
mutable
func(id string) *v1.metadata- OID
- 09fb21…b7d9:11
mutable details
SetBaseURI
func(id string, baseURI string)SetBaseURI points a mutable collection at new metadata. Every change is announced with its revision number.
- OID
- 09fb21…b7d9:12
SetBaseURI details
FreezeMetadata
func(id string)FreezeMetadata gives up the right to change a mutable collection's base URI.
- OID
- 09fb21…b7d9:13
FreezeMetadata details
CommitTraits
func(id string, root string)CommitTraits records, once, the Merkle root of the collection's traits. It waits for frozen metadata so the root cannot outlive the files it describes. A leaf is sha256(0x00 || "launchpad-trait-v1|\<collection>|\<number>|\<type>=\<value>") in a p/samcrew/launchpad/merkle/v1 tree, where neither the type nor the value contains "=" or "|": a leaf has then one reading only, and a leaf that breaks the rule matches no trait offer. The ledger cannot check the root against the files; whoever relies on it must recompute it from them.
- OID
- 09fb21…b7d9:14
CommitTraits details
TraitsRoot
func(id string) stringTraitsRoot is empty until the creator commits one.
- OID
- 09fb21…b7d9:15
TraitsRoot details
dropsPath
untyped stringValue
"gno.land/r/samcrew/launchpad/drops/v1"
marketPath
untyped stringValue
"gno.land/r/samcrew/launchpad/market/v1"
ModeOpen
untyped stringValue
"open"
ModeRoyaltyProtected
untyped stringValue
"royalty_protected"
ModeSoulbound
untyped stringValue
"soulbound"
StatusActive
untyped stringValue
"active"
StatusBurned
untyped stringValue
"burned"
StatusRevoked
untyped stringValue
"revoked"
Info
typeInfo is a collection's public record. The creator may edit the profile fields until FreezeProfile, hand the creator role over and seal the supply; everything else is immutable.
Value
v1.Info
collection
typeValue
v1.collection
lastID
v0.IDValue
<zero>
collections
v0.Tree// collection key -> \*collection
- OID
- 09fb21…b7d9:18
collections details
holdings
v0.Tree// owner -> \*avl.Tree of "\<collection key>/\<number key>" -> custody ID
- OID
- 09fb21…b7d9:20
holdings details
lastCustody
v0.ID// the last custody ID given
Value
<zero>
isIssuer
func(who .uverse.address) boolisIssuer reports whether a realm may create collections and mint into its own: the drops realm always, and every realm on config's add-only list.
- OID
- 09fb21…b7d9:22
isIssuer details
gate
func(issuer .uverse.address, lane string)gate stops a new collection or a new mint while its lane is paused, so the pauser is a brake on every issuer config may add, whatever that issuer checks. The drops realm is not asked twice: it applies the same gate itself, with the currency it charges, before it calls here.
- OID
- 09fb21…b7d9:24
gate details
callingRealm
func() .uverse.address- OID
- 09fb21…b7d9:25
callingRealm details
actor
func() .uverse.address- OID
- 09fb21…b7d9:26
actor details
check
func(err .uverse.error)- OID
- 09fb21…b7d9:27
check details
checkProfile
func(description string, image string, banner string, website string)- OID
- 09fb21…b7d9:28
checkProfile details
mustCollection
func(id string) *v1.collection- OID
- 09fb21…b7d9:29
mustCollection details
tokenID
func(number int64) v0.TokenID- OID
- 09fb21…b7d9:30
tokenID details
holdingKey
func(c *v1.collection, number int64) string- OID
- 09fb21…b7d9:31
holdingKey details
hold
func(owner .uverse.address, c *v1.collection, number int64)hold and release keep the holdings index equal to ownership: one tree per owner, so a page of an account's tokens costs the same wherever it starts.
- OID
- 09fb21…b7d9:32
hold details
renew
func(owner .uverse.address, c *v1.collection, number int64)renew gives a held token a new custody ID, as a move does: a change of its single-token approval starts a new custody too.
- OID
- 09fb21…b7d9:33
renew details
release
func(owner .uverse.address, c *v1.collection, number int64)- OID
- 09fb21…b7d9:34
release details
Create
func(creator .uverse.address, name string, symbol string, description string, image string, banner string, website string, mode string, revocable bool, maxSupply int64, metadataMode string, baseURI string, placeholderURI string, commitment string, provenance string, royalties string) stringCreate registers a collection for a creator the calling issuer realm has authenticated and charged. The issuer is recorded on the collection and no other realm can mint into it. royalties is "address:bps;address:bps" with addresses in strictly ascending order, or empty; the metadata arguments are those of newMetadata.
- OID
- 09fb21…b7d9:35
Create details
MintTo
func(id string, recipient .uverse.address) int64MintTo issues the next token number. Only the collection's issuer calls it, after its own accounting of stages and payment. The ledger mints to whoever the issuer names: it is the issuer's duty to mint a soulbound token only to the wallet that asked for it.
- OID
- 09fb21…b7d9:36
MintTo details
operator
func(c *v1.collection, who .uverse.address) booloperator reports whether who may be approved for, or move, a token of c. Soulbound tokens never move. A royalty-protected token moves only through a realm on the collection's market list. The ledger cannot make a realm pay: the creator who lists one vouches that it pays the collection's royalties.
- OID
- 09fb21…b7d9:37
operator details
denied
func(c *v1.collection)- OID
- 09fb21…b7d9:38
denied details
TransferFrom
func(id string, from .uverse.address, to .uverse.address, number int64)TransferFrom moves a token when the collection's mode lets the caller move one, and the caller owns it or is approved for it.
- OID
- 09fb21…b7d9:39
TransferFrom details
Approve
func(id string, to .uverse.address, number int64)Approve lets one account move one token; an empty address clears it. A soulbound token takes no approval at all, a royalty-protected one only a listed market.
- OID
- 09fb21…b7d9:40
Approve details
SetApprovalForAll
func(id string, to .uverse.address, approved bool)SetApprovalForAll lets, or stops letting, one account move every token the caller holds in the collection.
- OID
- 09fb21…b7d9:41
SetApprovalForAll details
ownerOf
func(c *v1.collection, number int64) .uverse.address- OID
- 09fb21…b7d9:42
ownerOf details
retire
func(c *v1.collection, owner .uverse.address, number int64, status string)- OID
- 09fb21…b7d9:43
retire details
Burn
func(id string, number int64)Burn is the holder's alone, in every mode. No creator, operator or admin can destroy a token somebody else holds, except through Revoke.
- OID
- 09fb21…b7d9:44
Burn details
Revoke
func(id string, number int64, reason string)Revoke retires a credential. It exists only for soulbound collections created as revocable, a term every holder could read before claiming. A holder who burns first leaves a burned token, not a revoked one.
- OID
- 09fb21…b7d9:45
Revoke details
creatorOf
func(id string) *v1.collectioncreatorOf returns the collection when the caller is its creator.
- OID
- 09fb21…b7d9:46
creatorOf details
ProposeCreator
func(id string, next .uverse.address)ProposeCreator starts handing the creator role to another account. Nothing changes until that account accepts; an empty address withdraws the offer.
- OID
- 09fb21…b7d9:47
ProposeCreator details
AcceptCreator
func(id string)AcceptCreator makes the caller the creator it was proposed as.
- OID
- 09fb21…b7d9:48
AcceptCreator details
SetIssuer
func(id string, pkgPath string)SetIssuer moves the collection's minting to another issuer realm, for instance a later version of the one that created it. Only the creator can choose it, and only among realms allowed to issue.
- OID
- 09fb21…b7d9:49
SetIssuer details
SealSupply
func(id string)SealSupply ends minting for good, whatever the cap was.
- OID
- 09fb21…b7d9:50
SealSupply details
profileOwner
func(id string) *v1.collection- OID
- 09fb21…b7d9:51
profileOwner details
SetProfile
func(id string, description string, image string, banner string, website string)- OID
- 09fb21…b7d9:52
SetProfile details
FreezeProfile
func(id string)- OID
- 09fb21…b7d9:53
FreezeProfile details
GetInfo
func(id string) v1.Info- OID
- 09fb21…b7d9:54
GetInfo details
Count
func() int64- OID
- 09fb21…b7d9:55
Count details
BalanceOf
func(id string, owner .uverse.address) int64- OID
- 09fb21…b7d9:56
BalanceOf details
OwnerOf
func(id string, number int64) .uverse.address- OID
- 09fb21…b7d9:57
OwnerOf details
TotalSupply
func(id string) int64- OID
- 09fb21…b7d9:58
TotalSupply details
GetApproved
func(id string, number int64) .uverse.address- OID
- 09fb21…b7d9:59
GetApproved details
IsApprovedForAll
func(id string, owner .uverse.address, operator .uverse.address) bool- OID
- 09fb21…b7d9:60
IsApprovedForAll details
statusOf
func(c *v1.collection, number int64) string- OID
- 09fb21…b7d9:61
statusOf details
Epoch
func(id string, number int64) int64Epoch returns the ID of a token's current custody: a new one at every move and every change of its single-token approval (the same approval again changes nothing), never one given before; 0 for a retired token. A market binds an order to it, so the order dies with the custody it was made under.
- OID
- 09fb21…b7d9:62
Epoch details
StatusOf
func(id string, number int64) string- OID
- 09fb21…b7d9:63
StatusOf details
TokenURI
func(id string, number int64) stringTokenURI answers for every minted number, retired or not: the metadata of a burned token is still part of the collection's public record.
- OID
- 09fb21…b7d9:64
TokenURI details
Render
func(path string) string- OID
- 09fb21…b7d9:65
Render details
maxRoyaltyReceivers
untyped bigintHard limits, fixed for the life of this realm.
Value
(10 <untyped> bigint)
maxRoyaltyBPS
untyped bigint// 10% of a sale, across all receivers
Value
(1000 <untyped> bigint)
maxMarkets
untyped bigintHard limits, fixed for the life of this realm.
Value
(5 <untyped> bigint)
royalty
typeroyalty is one receiver's share of every sale, in basis points.
Value
v1.royalty
RoyaltyPayout
typeValue
v1.RoyaltyPayout
parseBPS
func(s string) int64parseBPS reads a positive decimal with no sign, space or leading zero.
- OID
- 09fb21…b7d9:66
parseBPS details
parseRoyalties
func(encoded string, mode string) ([]v1.royalty, int64)parseRoyalties reads "address:bps;address:bps". Strictly ascending addresses give every split exactly one encoding and rule out duplicates.
- OID
- 09fb21…b7d9:68
parseRoyalties details
validName
func(s string) boolvalidName is the chain's rule for one segment of a package path: a letter first, then letters and digits, joined by single "\_" or "-".
- OID
- 09fb21…b7d9:69
validName details
validMarketPath
func(path string) boolA market may be any realm the chain can host, a third party's included, so its path follows the chain's own rule for a realm path: "gno.land/r/", then names separated by "/", none ending in "\_test", in at most 200 bytes. A slot is permanent: none is given to a path no realm can have. The rule for issuers is config's and is narrower (plain segments in our own namespace): an issuer is one of ours, a market need not be.
- OID
- 09fb21…b7d9:70
validMarketPath details
RoyaltyBPS
func(id string) int64- OID
- 09fb21…b7d9:71
RoyaltyBPS details
RoyaltyQuote
func(id string, price int64) []v1.RoyaltyPayoutRoyaltyQuote floors each receiver's share of price. The seller keeps the rounding remainder.
- OID
- 09fb21…b7d9:72
RoyaltyQuote details
AllowMarket
func(id string, pkgPath string)AllowMarket adds a realm through which a royalty-protected collection's tokens may be sold. The list starts with the Launchpad market and only grows: a holder's way out can be widened, never taken away. The ledger cannot make a realm pay: the creator vouches that the market it lists pays this collection's royalties, and every holder can read the list.
- OID
- 09fb21…b7d9:73
AllowMarket details
maxPage
untyped bigintLists are paged: a zero-based page of 1 to maxPage entries.
Value
(50 <untyped> bigint)
num
func(n int64) stringint64 values are decimal strings so a JSON client cannot round them.
- OID
- 09fb21…b7d9:74
num details
listJSON
func(tree *v0.Tree, page int64, size int64, render func(...)) stringlistJSON renders one page of a tree in key order. The tree seeks the first entry by subtree sizes, so a deep page costs what the first one does.
- OID
- 09fb21…b7d9:76
listJSON details
CollectionJSON
func(id string) string- OID
- 09fb21…b7d9:77
CollectionJSON details
royaltiesJSON
func(royalties []v1.royalty) string- OID
- 09fb21…b7d9:78
royaltiesJSON details
addressesJSON
func(list [].uverse.address) string- OID
- 09fb21…b7d9:79
addressesJSON details
CapabilitiesJSON
func(id string) stringCapabilitiesJSON tells a wallet or a market what a holder of this collection can do, without it knowing the modes. "markets" is empty when any operator may be approved. Royalties are paid by markets at sale. "royaltyEnforcement" is "none" without royalties; "market\_sales" for an open collection, where the ledger enforces nothing: a market that honours royalties pays them at a sale, and a direct transfer or any other realm pays none; "listed\_markets" when the ledger lets a token move only through the realms in "markets". Whether a listed realm pays is the word of the creator who listed it. "creatorRevoke" is the creator's right to revoke a token of a revocable soulbound collection.
- OID
- 09fb21…b7d9:80
CapabilitiesJSON details
ListCollectionsJSON
func(page int64, size int64) stringListCollectionsJSON pages through a summary of every collection, in creation order. CollectionJSON has the full record.
- OID
- 09fb21…b7d9:81
ListCollectionsJSON details
tokenJSON
func(c *v1.collection, number int64) string- OID
- 09fb21…b7d9:82
tokenJSON details
TokenJSON
func(id string, number int64) stringTokenJSON describes one minted number. A retired token has no owner.
- OID
- 09fb21…b7d9:83
TokenJSON details
ApprovalJSON
func(id string, number int64, operator string) stringApprovalJSON answers, in one read, whether operator may move an active token: by a single-token approval or by the owner's collection-wide one.
- OID
- 09fb21…b7d9:84
ApprovalJSON details
TokensJSON
func(id string, page int64, size int64) stringTokensJSON pages through a collection's minted numbers in order, retired ones included.
- OID
- 09fb21…b7d9:85
TokensJSON details
HoldingsJSON
func(owner string, page int64, size int64) stringHoldingsJSON pages through the tokens an account holds, across every collection, in collection then number order.
- OID
- 09fb21…b7d9:86