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/g1sw5xklxjjuv0yvuxy5f5s3l3mnj0nqq626a9wr/goldenticket

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
goldenticket
Namespace
g1sw5xklxjjuv0yvuxy5f5s3l3mnj0nqq626a9wr
Files
3 (gnomod.toml)
Exported functions
8
Module
gno.land/r/g1sw5xklxjjuv0yvuxy5f5s3l3mnj0nqq626a9wr/goldenticket
gno
0.9

Files (3)

  • gnomod.tomltoml
  • goldenticket.gnogno
  • goldenticket_test.gnogno
goldenticket_test.gnogno
1package goldenticket23import (4	"strings"5	"testing"67	"gno.land/p/nt/grc721/v0"8	"gno.land/p/nt/testutils/v0"9	"gno.land/p/nt/uassert/v0"10)1112var (13	aliceAddr = testutils.TestAddress("alice")14	bobAddr   = testutils.TestAddress("bob")15)1617// reset redoes what init does on chain, with alice as the publisher.18func reset(cur realm) {19	func(cur realm) {20		bootstrap(aliceAddr, cur)21	}(cross(cur))22}2324// The reads, called as Adena calls them: the id a quoted string, two values.25func TestReads(cur realm, t *testing.T) {26	reset(cur)2728	owner, err := OwnerOf("1")29	uassert.NoError(t, err)30	uassert.Equal(t, aliceAddr, owner)3132	n, err := BalanceOf(aliceAddr)33	uassert.NoError(t, err)34	uassert.Equal(t, int64(1), n)35	n, err = BalanceOf(bobAddr)36	uassert.NoError(t, err)37	uassert.Equal(t, int64(0), n)3839	uri, err := TokenURI("1")40	uassert.NoError(t, err)41	uassert.Equal(t, image, uri)42	uassert.True(t, strings.HasPrefix(uri, "https://"))4344	meta, err := TokenMetadata("1")45	uassert.NoError(t, err)46	uassert.Equal(t, `{"name":"Golden Ticket #1","description":"A 1/1 on gno.land, minted to check that collections show in Adena.",`+47		`"image":"`+image+`","attributes":[{"traitType":"edition","value":"1 of 1"},{"traitType":"metal","value":"gold"}]}`, meta)4849	uassert.Equal(t, int64(1), Token.TotalSupply())50	uassert.Equal(t, "Golden Ticket", Name())51	uassert.Equal(t, "GOLD", Symbol())5253	// Any other id is an error, not a panic.54	for _, bad := range []grc721.TokenID{"", "0", "2", "01", " 1"} {55		_, err = OwnerOf(bad)56		uassert.ErrorContains(t, err, errNoTicket, string(bad))57		_, err = TokenURI(bad)58		uassert.ErrorContains(t, err, errNoTicket, string(bad))59		_, err = TokenMetadata(bad)60		uassert.ErrorContains(t, err, errNoTicket, string(bad))61	}62}6364func TestTransfer(cur realm, t *testing.T) {65	reset(cur)6667	// Only the holder moves the ticket.68	testing.SetRealm(testing.NewUserRealm(bobAddr))69	uassert.AbortsWithMessage(t, cur, errNotOwner, func() {70		Transfer(cross(cur), bobAddr)71	})7273	testing.SetRealm(testing.NewUserRealm(aliceAddr))74	uassert.AbortsWithMessage(t, cur, errBadOwner, func() {75		Transfer(cross(cur), address("nope"))76	})77	Transfer(cross(cur), bobAddr)78	owner, err := OwnerOf("1")79	uassert.NoError(t, err)80	uassert.Equal(t, bobAddr, owner)81	n, _ := BalanceOf(aliceAddr)82	uassert.Equal(t, int64(0), n)83	n, _ = BalanceOf(bobAddr)84	uassert.Equal(t, int64(1), n)8586	// Not through another realm.87	testing.SetRealm(testing.NewCodeRealm("gno.land/r/demo/relay"))88	uassert.AbortsWithMessage(t, cur, errNotOwner, func() {89		Transfer(cross(cur), aliceAddr)90	})91}9293func TestRender(cur realm, t *testing.T) {94	reset(cur)95	out := Render("")96	uassert.True(t, strings.Contains(out, "# Golden Ticket\n"))97	uassert.True(t, strings.Contains(out, "!["+tokenName+"]("+image+")"))98	uassert.True(t, strings.Contains(out, "Held by `"+aliceAddr.String()+"`."))99}100

Functions

  • BalanceOf(addr string) (int64, interface {Error func() string})

  • Name() string

  • OwnerOf(tid string) (string, interface {Error func() string})

  • Render(string) string

  • Symbol() string

  • TokenMetadata(tid string) (string, interface {Error func() string})

  • TokenURI(tid string) (string, interface {Error func() 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)

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.