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}