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}