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

types.gno

1.21 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/nt/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)