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

instance.gno

1.62 Kb · 71 lines
 1package position
 2
 3import (
 4	"errors"
 5	"gno.land/p/gnoswap/deps/tokens/grc721"
 6	"gno.land/r/gnoswap/gnft"
 7	"gno.land/r/gnoswap/position"
 8)
 9
10type positionV1 struct {
11	store       position.IPositionStore
12	nftAccessor NFTAccessor
13}
14
15func NewPositionV1(positionStore position.IPositionStore, accessor NFTAccessor) position.IPosition {
16	return &positionV1{
17		store:       positionStore,
18		nftAccessor: accessor,
19	}
20}
21
22type NFTAccessor interface {
23	Approve(_ int, rlm realm, approved address, tid grc721.TokenID) error
24	Mint(_ int, rlm realm, to address, tid grc721.TokenID) grc721.TokenID
25	Burn(_ int, rlm realm, tid grc721.TokenID)
26	TotalSupply() int64
27	Exists(tid grc721.TokenID) bool
28	OwnerOf(tid grc721.TokenID) (address, error)
29}
30
31type gnftAccessor struct{}
32
33func (n *gnftAccessor) Approve(_ int, rlm realm, approved address, tid grc721.TokenID) error {
34	if !rlm.IsCurrent() {
35		return errors.New(errSpoofedRealm)
36	}
37
38	return gnft.Approve(cross(rlm), approved, tid)
39}
40
41func (n *gnftAccessor) Mint(_ int, rlm realm, to address, tid grc721.TokenID) grc721.TokenID {
42	if !rlm.IsCurrent() {
43		panic(errors.New(errSpoofedRealm))
44	}
45
46	return gnft.Mint(cross(rlm), to, tid)
47}
48
49func (n *gnftAccessor) Burn(_ int, rlm realm, tid grc721.TokenID) {
50	if !rlm.IsCurrent() {
51		panic(errors.New(errSpoofedRealm))
52	}
53
54	gnft.Burn(cross(rlm), tid)
55}
56
57func (n *gnftAccessor) TotalSupply() int64 {
58	return gnft.TotalSupply()
59}
60
61func (n *gnftAccessor) Exists(tid grc721.TokenID) bool {
62	return gnft.Exists(tid)
63}
64
65func (n *gnftAccessor) OwnerOf(tid grc721.TokenID) (address, error) {
66	return gnft.OwnerOf(tid)
67}
68
69func newGNFTAccessor() NFTAccessor {
70	return &gnftAccessor{}
71}