PathrockNetwork Gno Explorer
HomeBlocksTransactionsTokensRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/r/g1n4pl5uc4yt5r96m9w6fmdznx3x0jyg8l6arhmt/bazaar/c/adcol

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
adcol
Namespace
g1n4pl5uc4yt5r96m9w6fmdznx3x0jyg8l6arhmt / bazaar / c
Files
3 (gnomod.toml)
Exported functions
50
Module
gno.land/r/g1n4pl5uc4yt5r96m9w6fmdznx3x0jyg8l6arhmt/bazaar/c/adcol
gno
0.9

Files (3)

  • gnomod.tomltoml
  • adcol.gnogno
  • book.gnogno
adcol.gnogno
1package adcol23import (4	"chain"5	"chain/banker"6	"chain/runtime/unsafe"7	"strconv"8	"strings"910	"gno.land/p/nt/grc721/metadata/v0"11	"gno.land/p/nt/grc721/v0"12	"gno.land/p/nt/avl/v0"13	"gno.land/p/nt/seqid/v0"14	"gno.land/r/g1n4pl5uc4yt5r96m9w6fmdznx3x0jyg8l6arhmt/bazaar/factory"15)1617const (18	maxNameLen      = 6419	maxImageLen     = 20020	maxSupplyBound  = 1_000_00021	maxRoyaltyBps   = 100022	nativeDenom     = "ugnot"23	publicOrigin    = "https://bazaar-gno.vercel.app"24	dropAddCap      = 2025	dropSlotHardCap = 1000026	minSlugLen      = 227)2829type item struct {30	id       int31	name     string32	image    string33	owner    address34	seller   address35	price    int6436	listed   bool37	rarity   string38	traits   string39	revealed bool40	slot     int41}4243type dropSlot struct {44	name   string45	image  string46	rarity string47	traits string48}4950var (51	items      avl.Tree52	dropSlots  avl.Tree53	token      *grc721.Token54	ledger     *grc721.PrivateLedger55	metaView   *metadata.Metadata56	metaLed    *metadata.Ledger57	tokenSeq   seqid.ID58	nextID     int59	minted     int60	loaded     int61	maxSupply  int62	mintPrice  int6463	royaltyBps int64	paused     bool65	inited     bool66	creator    address67	self       address68	colName    string69	colSymbol  string70	colCover   string71	slug       string72)7374func Init(cur realm, name, symbol, cover string, maxSupplyN int, mintPriceUgnot int64, royalty int64) {75	if !cur.Previous().IsUserCall() {76		panic("col: EOA only")77	}78	if !cur.IsCurrent() {79		panic("col: spoofed realm")80	}81	if len(symbol) < 1 || len(symbol) > grc721.MaxSymbolLen {82		panic("col: symbol")83	}84	pathSlug := lastElem(cur.PkgPath())85	if !validPkgName(pathSlug) {86		panic("col: slug")87	}88	if maxSupplyN < 0 || maxSupplyN > maxSupplyBound {89		panic("col: maxSupply")90	}91	if mintPriceUgnot < 0 {92		panic("col: mintPrice")93	}94	if royalty < 0 || royalty > maxRoyaltyBps {95		panic("col: royalty")96	}97	if !validName(name) {98		panic("col: name")99	}100	if !validImage(cover) {101		panic("col: cover")102	}103	if inited {104		panic("col: already initialized")105	}106	slug = pathSlug107	reservedWho := factory.ReservedCreator(slug)108	takeLaunchFee(cur)109	tok, led := grc721.NewToken(name, symbol, tokenSeq.Next(), cur)110	token = tok111	ledger = led112	metaView, metaLed = metadata.NewMetadata(led)113	creator = cur.Previous().Address()114	self = cur.Address()115	colName = name116	colSymbol = symbol117	colCover = cover118	maxSupply = maxSupplyN119	mintPrice = mintPriceUgnot120	royaltyBps = int(royalty)121	items = avl.Tree{}122	dropSlots = avl.Tree{}123	loaded = 0124	inited = true125	if reservedWho == "" {126		factory.CreditLaunchFee(cross(cur))127	}128	factory.Register(cross(cur), name, symbol, cover, maxSupplyN, mintPriceUgnot, royalty)129	chain.Emit("Init", "creator", creator.String(), "slug", slug)130}131132func Mint(cur realm, name, imageURL string) int {133	caller := requireUser(cur)134	if caller != creator {135		panic("col: not creator")136	}137	id := mintTo(cur, caller, name, imageURL)138	writeTokenMeta(id)139	chain.Emit("Mint", "id", strconv.Itoa(id), "owner", caller.String())140	return id141}142143func PublicMint(cur realm) int {144	caller := requireUser(cur)145	takeExact(mintPrice)146	name := colName + " #" + strconv.Itoa(minted+1)147	image := publicImage()148	var slot *dropSlot149	slotIndex := -1150	if loaded > 0 {151		if minted >= loaded {152			panic("col: no slot")153		}154		v := dropSlots.Get(slotKey(minted))155		if v == nil {156			panic("col: no slot")157		}158		slot = v.(*dropSlot)159		name = slot.name160		image = slot.image161		slotIndex = minted162	}163	id := mintTo(cur, caller, name, image)164	if slot != nil {165		applySlot(id, slot, slotIndex)166	}167	writeTokenMeta(id)168	if mintPrice > 0 {169		bk := banker.NewBanker(banker.BankerTypeRealmSend, cur)170		bk.SendCoins(self, creator, chain.Coins{{Denom: nativeDenom, Amount: mintPrice}})171	}172	chain.Emit("PublicMint", "id", strconv.Itoa(id), "n", strconv.Itoa(minted))173	return id174}175176func AddDropItems(cur realm, blob string) {177	caller := requireUser(cur)178	if caller != creator {179		panic("col: not creator")180	}181	lines := splitDropLines(blob)182	if len(lines) < 1 || len(lines) > dropAddCap {183		panic("col: slots")184	}185	if loaded+len(lines) > slotCap() {186		panic("col: slots")187	}188	for _, line := range lines {189		name, image, rarity, traits := parseDropLine(line)190		if !validName(name) {191			panic("col: name")192		}193		if !validImage(image) {194			panic("col: image")195		}196		if !validRarity(rarity) {197			panic("col: rarity")198		}199		if !validTraits(traits) {200			panic("col: traits")201		}202		dropSlots.Set(slotKey(loaded), &dropSlot{name: name, image: image, rarity: rarity, traits: traits})203		loaded++204	}205	chain.Emit("AddDropItems", "slug", slug, "loaded", strconv.Itoa(loaded))206}207208func ListDropSlots() string {209	requireInit()210	out := ""211	for i := 0; i < loaded; i++ {212		v := dropSlots.Get(slotKey(i))213		if v == nil {214			continue215		}216		s := v.(*dropSlot)217		if out != "" {218			out += "\n"219		}220		out += strconv.Itoa(i) + "|" + s.name + "|" + s.image + "|" + s.rarity + "|" + s.traits221	}222	return out223}224225func LoadedOf() int {226	requireInit()227	return loaded228}229230func PauseMint(cur realm) {231	caller := requireUser(cur)232	if caller != creator {233		panic("col: not creator")234	}235	paused = true236	chain.Emit("PauseMint", "slug", slug)237}238239func ResumeMint(cur realm) {240	caller := requireUser(cur)241	if caller != creator {242		panic("col: not creator")243	}244	paused = false245	chain.Emit("ResumeMint", "slug", slug)246}247248func OwnerOf(tid string) string {249	return mustItem(parseTid(tid)).owner.String()250}251252func GrcName() string {253	requireInit()254	return token.GetName()255}256257func GrcSymbol() string {258	requireInit()259	return token.GetSymbol()260}261262func GrcBalanceOf(addr string) int64 {263	requireInit()264	who := address(addr)265	if !who.IsValid() {266		return 0267	}268	n, err := token.BalanceOf(who)269	if err != nil {270		return 0271	}272	return n273}274275func GrcOwnerOf(id int) string {276	requireInit()277	owner, err := token.OwnerOf(itemTid(id))278	if err != nil {279		panic("col: owner")280	}281	return owner.String()282}283284func Name() string {285	return GrcName()286}287288func Symbol() string {289	return GrcSymbol()290}291292func BalanceOf(addr string) int64 {293	return GrcBalanceOf(addr)294}295296func TokenURI(tid string) string {297	id := parseTid(tid)298	mustItem(id)299	if metaView != nil {300		u, err := metaView.TokenURI(itemTid(id))301		if err == nil && u != "" {302			return u303		}304	}305	return tokenJSON(mustItem(id))306}307308func guardUnlisted(id int) {309	if mustItem(id).listed {310		panic("col: listed")311	}312}313314func Approve(cur realm, to, tid string) {315	caller := requireUser(cur)316	id := parseTid(tid)317	guardUnlisted(id)318	who := address(to)319	if to != "" && !who.IsValid() {320		panic("col: addr")321	}322	if err := ledger.Approve(caller, who, itemTid(id)); err != nil {323		panic("col: approve")324	}325}326327func SetApprovalForAll(cur realm, operator string, approved bool) {328	caller := requireUser(cur)329	op := address(operator)330	if !op.IsValid() {331		panic("col: addr")332	}333	if err := ledger.SetApprovalForAll(caller, op, approved); err != nil {334		panic("col: approve")335	}336}337338func TransferFrom(cur realm, from, to, tid string) {339	caller := requireUser(cur)340	id := parseTid(tid)341	guardUnlisted(id)342	src := address(from)343	dst := address(to)344	if !src.IsValid() || !dst.IsValid() {345		panic("col: addr")346	}347	if err := ledger.TransferFrom(caller, src, dst, itemTid(id)); err != nil {348		panic("col: transfer")349	}350	it := mustItem(id)351	it.owner = dst352	items.Set(itemKey(id), it)353}354355func GetApproved(id int) string {356	requireInit()357	who, err := token.GetApproved(itemTid(id))358	if err != nil {359		return ""360	}361	return who.String()362}363364func IsApprovedForAll(owner, operator string) bool {365	requireInit()366	a := address(owner)367	b := address(operator)368	if !a.IsValid() || !b.IsValid() {369		return false370	}371	return token.IsApprovedForAll(a, b)372}373374func TotalSupply() int64 {375	requireInit()376	return token.TotalSupply()377}378379func SellerOf(id int) address {380	return mustItem(id).seller381}382383func PriceOf(id int) int64 {384	return mustItem(id).price385}386387func NameOf(id int) string {388	return mustItem(id).name389}390391func ImageOf(id int) string {392	return mustItem(id).image393}394395func Listed(id int) bool {396	return mustItem(id).listed397}398399func NextID() int {400	return nextID401}402403func CollectionOf(_ int) string {404	requireInit()405	return slug406}407408func ItemLine(id int) string {409	it := mustItem(id)410	return strconv.Itoa(it.id) + "|" + it.name + "|" + it.owner.String() + "|" + it.seller.String() + "|" + strconv.FormatInt(it.price, 10) + "|" + strconv.FormatBool(it.listed) + "|" + it.image + "|" + slug + "|" + it.rarity + "|" + it.traits + "|" + strconv.FormatBool(it.revealed) + "|" + strconv.Itoa(it.slot)411}412413func ListOpen() string {414	requireInit()415	out := ""416	n := 0417	items.Iterate("", "", func(_ string, value any) bool {418		it := value.(*item)419		if !it.listed {420			return false421		}422		if n >= 50 {423			return true424		}425		if out != "" {426			out += "\n"427		}428		out += ItemLine(it.id)429		n++430		return false431	})432	return out433}434435func TokensOf(owner string) string {436	requireInit()437	who := address(owner)438	if !who.IsValid() {439		return ""440	}441	out := ""442	items.Iterate("", "", func(_ string, value any) bool {443		it := value.(*item)444		if it.owner != who {445			return false446		}447		if out != "" {448			out += ","449		}450		out += strconv.Itoa(it.id)451		return false452	})453	return out454}455456func TokenOfOwnerByIndex(owner string, index int64) string {457	requireInit()458	who := address(owner)459	if !who.IsValid() {460		panic("col: addr")461	}462	if index < 0 {463		panic("col: index")464	}465	var n int64466	found := ""467	items.Iterate("", "", func(_ string, value any) bool {468		it := value.(*item)469		if it.owner != who {470			return false471		}472		if n == index {473			found = strconv.Itoa(it.id)474			return true475		}476		n++477		return false478	})479	if found == "" {480		panic("col: index")481	}482	return found483}484485func TokenByIndex(index int64) string {486	requireInit()487	if index < 0 {488		panic("col: index")489	}490	var n int64491	found := ""492	items.Iterate("", "", func(_ string, value any) bool {493		if n == index {494			found = strconv.Itoa(value.(*item).id)495			return true496		}497		n++498		return false499	})500	if found == "" {501		panic("col: index")502	}503	return found504}505506func Creator() string {507	requireInit()508	return creator.String()509}510511func MintPrice() int64 {512	requireInit()513	return mintPrice514}515516func MaxSupply() int {517	requireInit()518	return maxSupply519}520521func Minted() int {522	requireInit()523	return minted524}525526func RoyaltyBps() int {527	requireInit()528	return royaltyBps529}530531func SetRoyalty(cur realm, bps int) {532	caller := requireUser(cur)533	if caller != creator {534		panic("col: not creator")535	}536	if minted != 0 {537		panic("col: minted")538	}539	if bps < 0 || bps > maxRoyaltyBps {540		panic("col: royalty")541	}542	royaltyBps = bps543	factory.NoteRoyalty(cross(cur), bps)544	chain.Emit("SetRoyalty", "slug", slug, "bps", strconv.Itoa(bps))545}546547func RarityOf(id int) string {548	return mustItem(id).rarity549}550551func TraitsOf(id int) string {552	return mustItem(id).traits553}554555func Render(_ string) string {556	if !inited {557		return "# Collection\n\nCall Init first.\n"558	}559	out := "# " + colName + " ($" + colSymbol + ")\n\n"560	out += "- minted: " + strconv.Itoa(minted) + "\n"561	out += "- mint price: " + strconv.FormatInt(mintPrice, 10) + " ugnot\n\n"562	open := ListOpen()563	if open == "" {564		out += "_No open listings._\n"565	} else {566		out += "```\n" + open + "\n```\n"567	}568	return out569}570571func mintTo(cur realm, caller address, name, imageURL string) int {572	requireInit()573	if !cur.IsCurrent() {574		panic("col: spoofed realm")575	}576	if paused {577		panic("col: paused")578	}579	if maxSupply > 0 && minted >= maxSupply {580		panic("col: sold out")581	}582	if !validName(name) {583		panic("col: name")584	}585	if !validImage(imageURL) {586		panic("col: image")587	}588	nextID++589	id := nextID590	it := &item{591		id:       id,592		name:     name,593		image:    imageURL,594		owner:    caller,595		rarity:   rarityOf(id),596		revealed: true,597		slot:     -1,598	}599	items.Set(itemKey(id), it)600	err := ledger.Mint(caller, itemTid(id))601	if err != nil {602		panic("col: mint")603	}604	minted++605	factory.NoteMinted(cross(cur), minted)606	return id607}608609func takeLaunchFee(cur realm) {610	fee := factory.LaunchFee()611	who := factory.ReservedCreator(lastElem(cur.PkgPath()))612	if who != "" && who == cur.Previous().Address().String() {613		takeExact(0)614		return615	}616	takeExact(fee)617	if fee > 0 {618		bk := banker.NewBanker(banker.BankerTypeRealmSend, cur)619		bk.SendCoins(cur.Address(), factory.Address(), chain.Coins{{Denom: nativeDenom, Amount: fee}})620	}621}622623func takeExact(want int64) {624	sent := unsafe.OriginSend()625	if want == 0 {626		if len(sent) != 0 {627			panic("col: extra denoms")628		}629		return630	}631	if len(sent) != 1 || sent[0].Denom != nativeDenom || sent[0].Amount != want {632		panic("col: wrong payment")633	}634}635636func publicImage() string {637	img := "/samples/" + slug + "-0" + strconv.Itoa(minted+1) + ".png"638	if validImage(img) {639		return img640	}641	return colCover642}643644func requireInit() {645	if !inited {646		panic("col: call Init first")647	}648}649650func requireUser(cur realm) address {651	requireInit()652	if !cur.IsCurrent() {653		panic("col: spoofed realm")654	}655	if !cur.Previous().IsUserCall() {656		panic("col: EOA only")657	}658	return cur.Previous().Address()659}660661func itemTid(id int) grc721.TokenID {662	return grc721.TokenID(strconv.Itoa(id))663}664665func parseTid(tid string) int {666	id, err := strconv.Atoi(tid)667	if err != nil || id < 1 {668		panic("col: tid")669	}670	return id671}672673func mustItem(id int) *item {674	v := items.Get(itemKey(id))675	if v == nil {676		panic("col: unknown item")677	}678	return v.(*item)679}680681func itemKey(id int) string {682	return strconv.Itoa(id)683}684685func lastElem(pkg string) string {686	i := strings.LastIndex(pkg, "/")687	if i < 0 || i+1 >= len(pkg) {688		panic("col: pkg")689	}690	return pkg[i+1:]691}692693func slotKey(i int) string {694	return strconv.Itoa(i)695}696697func slotCap() int {698	if maxSupply > 0 {699		return maxSupply700	}701	return dropSlotHardCap702}703704func applySlot(id int, s *dropSlot, slotIndex int) {705	it := mustItem(id)706	it.name = s.name707	it.image = s.image708	if s.rarity != "" {709		it.rarity = s.rarity710	}711	it.traits = s.traits712	it.revealed = true713	it.slot = slotIndex714	items.Set(itemKey(id), it)715}716717func writeTokenMeta(id int) {718	it := mustItem(id)719	uri := tokenJSON(it)720	if metaLed == nil {721		return722	}723	if err := metaLed.SetTokenURI(itemTid(id), uri); err != nil {724		panic("col: tokenURI")725	}726	if err := metaLed.SetTokenMetadata(itemTid(id), metadata.Data{727		Name:        it.name,728		Description: colName + " #" + strconv.Itoa(id),729		Image:       absImage(it.image),730		Attributes:  traitAttrs(it),731	}); err != nil {732		panic("col: metadata")733	}734}735736func tokenJSON(it *item) string {737	attrs := ""738	for _, tr := range traitAttrs(it) {739		if attrs != "" {740			attrs += ","741		}742		attrs += `{"trait_type":` + jsonStr(tr.TraitType) + `,"value":` + jsonStr(tr.Value) + `}`743	}744	body := `{"name":` + jsonStr(it.name) + `,"description":` + jsonStr(colName+" #"+strconv.Itoa(it.id)) + `,"image":` + jsonStr(absImage(it.image)) + `,"attributes":[` + attrs + `]}`745	return "data:application/json;charset=utf-8," + pctURI(body)746}747748func traitAttrs(it *item) []metadata.Trait {749	out := []metadata.Trait{}750	if it.rarity != "" {751		out = append(out, metadata.Trait{TraitType: "Rarity", Value: it.rarity})752	}753	for _, part := range strings.Split(it.traits, ";") {754		part = strings.TrimSpace(part)755		colon := strings.Index(part, ":")756		if colon <= 0 || colon >= len(part)-1 {757			continue758		}759		key := strings.TrimSpace(part[:colon])760		val := strings.TrimSpace(part[colon+1:])761		if key == "" || val == "" {762			continue763		}764		out = append(out, metadata.Trait{TraitType: key, Value: val})765	}766	return out767}768769func absImage(u string) string {770	if u == "" {771		return u772	}773	if strings.HasPrefix(u, "https://") || strings.HasPrefix(u, "http://") || strings.HasPrefix(u, "ipfs://") {774		return u775	}776	if strings.HasPrefix(u, "/") {777		return publicOrigin + u778	}779	return u780}781782func jsonStr(s string) string {783	out := `"`784	for _, r := range s {785		switch r {786		case '"':787			out += `\"`788		case '\\':789			out += `\\`790		case '\n':791			out += `\n`792		case '\r':793			out += `\r`794		case '\t':795			out += `\t`796		default:797			if r < 0x20 {798				out += `\u00`799				hex := "0123456789abcdef"800				out += string([]byte{hex[r>>4], hex[r&15]})801			} else {802				out += string(r)803			}804		}805	}806	return out + `"`807}808809func pctURI(s string) string {810	out := ""811	for i := 0; i < len(s); i++ {812		c := s[i]813		if (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~' {814			out += string(c)815			continue816		}817		hex := "0123456789ABCDEF"818		out += "%"819		out += string([]byte{hex[c>>4], hex[c&15]})820	}821	return out822}823824func splitDropLines(blob string) []string {825	raw := strings.Split(blob, "\n")826	out := make([]string, 0, len(raw))827	for _, line := range raw {828		line = strings.TrimSpace(line)829		if line == "" {830			continue831		}832		out = append(out, line)833	}834	return out835}836837func parseDropLine(line string) (string, string, string, string) {838	parts := strings.Split(line, "|")839	name := ""840	image := ""841	rarity := ""842	traits := ""843	if len(parts) > 0 {844		name = strings.TrimSpace(parts[0])845	}846	if len(parts) > 1 {847		image = strings.TrimSpace(parts[1])848	}849	if len(parts) > 2 {850		rarity = strings.TrimSpace(parts[2])851	}852	if len(parts) > 3 {853		traits = strings.TrimSpace(parts[3])854	}855	return name, image, rarity, traits856}857858func validRarity(s string) bool {859	if s == "" {860		return true861	}862	return s == "Common" || s == "Uncommon" || s == "Rare" || s == "Epic" || s == "Legendary"863}864865func validTraits(s string) bool {866	if s == "" {867		return true868	}869	if len(s) > 200 {870		return false871	}872	if strings.ContainsAny(s, "\n\r|") {873		return false874	}875	n := 0876	for _, part := range strings.Split(s, ";") {877		part = strings.TrimSpace(part)878		if part == "" {879			continue880		}881		colon := strings.Index(part, ":")882		if colon <= 0 || colon >= len(part)-1 {883			return false884		}885		key := strings.TrimSpace(part[:colon])886		val := strings.TrimSpace(part[colon+1:])887		if key == "" || val == "" {888			return false889		}890		if !asciiSet(key, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 _-") {891			return false892		}893		if !asciiSet(val, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 _-") {894			return false895		}896		n++897		if n > 8 {898			return false899		}900	}901	return n >= 1902}903904func validPkgName(s string) bool {905	if len(s) < minSlugLen || len(s) > grc721.MaxSymbolLen {906		return false907	}908	if s[0] < 'a' || s[0] > 'z' {909		return false910	}911	return asciiSet(s, "abcdefghijklmnopqrstuvwxyz0123456789")912}913914func rarityOf(id int) string {915	r := id % 10916	if r == 0 {917		return "Legendary"918	}919	if r == 1 {920		return "Common"921	}922	if r == 2 {923		return "Uncommon"924	}925	if r == 3 {926		return "Rare"927	}928	if r == 4 {929		return "Epic"930	}931	if r <= 7 {932		return "Uncommon"933	}934	return "Common"935}936937func validName(name string) bool {938	if len(name) < 1 || len(name) > maxNameLen {939		return false940	}941	if strings.ContainsAny(name, "\n\r|\t\"\\") {942		return false943	}944	for _, r := range name {945		if r < 0x20 {946			return false947		}948	}949	return true950}951952func validImage(u string) bool {953	if u == "" {954		return true955	}956	if len(u) > maxImageLen {957		return false958	}959	if strings.ContainsAny(u, " \t\n\r|<>\"'`") {960		return false961	}962	if strings.HasPrefix(u, "https://") || strings.HasPrefix(u, "http://") {963		return true964	}965	const prefix = "/samples/"966	if !strings.HasPrefix(u, prefix) {967		return false968	}969	rest := u[len(prefix):]970	if rest == "" {971		return false972	}973	return asciiSet(rest, "abcdefghijklmnopqrstuvwxyz0123456789._-")974}975976func asciiSet(s, allowed string) bool {977	for i := 0; i < len(s); i++ {978		if !strings.ContainsRune(allowed, rune(s[i])) {979			return false980		}981	}982	return true983}984

Functions

  • AddDropItems(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, blob string)

  • Approve(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, to string, tid string)

  • BalanceOf(addr string) int64

  • Buy(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id int)

  • Cancel(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id int)

  • CollectionOf(int) string

  • Creator() string

  • GetApproved(id int) string

  • GrcBalanceOf(addr string) int64

  • GrcName() string

  • GrcOwnerOf(id int) string

  • GrcSymbol() string

  • ImageOf(id int) string

  • Init(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, name string, symbol string, cover string, maxSupplyN int, mintPriceUgnot int64, royalty int64)

  • IsApprovedForAll(owner string, operator string) bool

  • ItemLine(id int) string

  • List(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id int, priceUgnot int64)

  • ListDropSlots() string

  • Listed(id int) bool

  • ListOpen() string

  • LoadedOf() int

  • MaxSupply() int

  • Mint(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, name string, imageURL string) int

  • Minted() int

  • MintPrice() int64

  • Name() string

  • NameOf(id int) string

  • NextID() int

  • OwnerOf(tid string) string

  • PauseMint(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})

  • PriceOf(id int) int64

  • ProtocolBps() int64

  • PublicMint(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}) int

  • RarityOf(id int) string

  • Render(string) string

  • ResumeMint(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})

  • RoyaltyBps() int

  • SellerOf(id int) string

  • SetApprovalForAll(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, operator string, approved bool)

  • SetRoyalty(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, bps int)

  • Symbol() string

  • TokenByIndex(index int64) string

  • TokenOfOwnerByIndex(owner string, index int64) string

  • TokensOf(owner string) string

  • TokenURI(tid string) string

  • TotalSupply() int64

  • TraitsOf(id int) string

  • Transfer(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, to string, id int)

  • TransferFrom(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, from string, to string, tid string)

  • UpdatePrice(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id int, priceUgnot int64)

Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

Rendered

RenderedRawgnoweb ↗

vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.