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)