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

0.91 Kb · 39 lines
 1// Package enumerable is a stackable GRC721 extension implementing
 2// EIP-721Enumerable. Attach it via NewEnumerable before the first mint.
 3package enumerable
 4
 5import (
 6	"errors"
 7
 8	"gno.land/p/nt/avl/v0"
 9	"gno.land/p/nt/grc721/v0"
10)
11
12var ErrIndexOutOfRange = errors.New("index out of range")
13
14// Stored by pointer so in-place swap-and-pop updates persist.
15type tokenList struct {
16	ids []grc721.TokenID
17}
18
19type storage struct {
20	allTokens  []grc721.TokenID
21	allIndex   avl.Tree // grc721.TokenID -> int (position in allTokens)
22	owned      avl.Tree // owner address -> *tokenList
23	ownedIndex avl.Tree // grc721.TokenID -> int (position within its owner list)
24	owner      avl.Tree // grc721.TokenID -> owner address
25}
26
27type Enumerable struct {
28	core *grc721.Token
29	st   *storage
30}
31
32type Ledger struct {
33	core *grc721.Token
34	st   *storage
35}
36
37var _ grc721.Extension = (*Ledger)(nil)
38
39var _ grc721.ExtensionView = (*Enumerable)(nil)