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