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

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

types.gno

1.25 Kb · 59 lines
 1// Package metadata is a stackable GRC721 extension for EIP-721 tokenURI and
 2// OpenSea on-chain metadata. Writes are issuer-only so a holder cannot rewrite metadata after acquisition.
 3package metadata
 4
 5import (
 6	"errors"
 7
 8	"gno.land/p/nt/avl/v0"
 9	"gno.land/p/g1n4pl5uc4yt5r96m9w6fmdznx3x0jyg8l6arhmt/bazaar/grc721/v0"
10)
11
12const (
13	MetadataUpdateEvent = "MetadataUpdate"
14	TokenURIUpdateEvent = "TokenURIUpdate"
15)
16
17var (
18	ErrTokenNotMinted = errors.New("token is not minted")
19	ErrNoMetadata     = errors.New("token has no metadata")
20	ErrNoTokenURI     = errors.New("token has no uri")
21)
22
23type Metadata struct {
24	core *grc721.Token
25	st   *storage
26}
27
28type Ledger struct {
29	core *grc721.Token
30	st   *storage
31}
32
33// Data is the OpenSea on-chain metadata for a single token.
34type Data struct {
35	Image           string
36	ImageData       string
37	ExternalURL     string
38	Description     string
39	Name            string
40	Attributes      []Trait
41	BackgroundColor string
42	AnimationURL    string
43	YoutubeURL      string
44}
45
46type Trait struct {
47	DisplayType string
48	TraitType   string
49	Value       string
50}
51
52type storage struct {
53	uris avl.Tree // grc721.TokenID -> string
54	data avl.Tree // grc721.TokenID -> Data
55}
56
57var _ grc721.Extension = (*Ledger)(nil)
58
59var _ grc721.ExtensionView = (*Metadata)(nil)