accessor.gno
4.02 Kb ยท 147 lines
1package staker
2
3import (
4 u256 "gno.land/p/gnoswap/uint256"
5
6 "gno.land/p/demo/tokens/grc721"
7 "gno.land/r/gnoswap/emission"
8 "gno.land/r/gnoswap/gnft"
9 "gno.land/r/gnoswap/pool"
10)
11
12type PoolAccessor interface {
13 ExistsPoolPath(poolPath string) bool
14 GetSlot0Tick(poolPath string) int32
15 GetSlot0SqrtPriceX96(poolPath string) *u256.Uint
16
17 SetTickCrossHook(hook func(poolPath string, tickId int32, zeroForOne bool, timestamp int64))
18 SetSwapStartHook(hook func(poolPath string, timestamp int64))
19 SetSwapEndHook(hook func(poolPath string) error)
20}
21
22type poolAccessor struct{}
23
24func (p *poolAccessor) ExistsPoolPath(poolPath string) bool {
25 return pool.ExistsPoolPath(poolPath)
26}
27
28func (p *poolAccessor) GetSlot0Tick(poolPath string) int32 {
29 return pool.GetSlot0Tick(poolPath)
30}
31
32func (p *poolAccessor) GetSlot0SqrtPriceX96(poolPath string) *u256.Uint {
33 return pool.GetSlot0SqrtPriceX96(poolPath)
34}
35
36func (p *poolAccessor) SetTickCrossHook(hook func(poolPath string, tickId int32, zeroForOne bool, timestamp int64)) {
37 pool.SetTickCrossHook(cross, func(cur realm, poolPath string, tickId int32, zeroForOne bool, timestamp int64) {
38 hook(poolPath, tickId, zeroForOne, timestamp)
39 })
40}
41
42func (p *poolAccessor) SetSwapStartHook(hook func(poolPath string, timestamp int64)) {
43 pool.SetSwapStartHook(cross, func(cur realm, poolPath string, timestamp int64) {
44 hook(poolPath, timestamp)
45 })
46}
47
48func (p *poolAccessor) SetSwapEndHook(hook func(poolPath string) error) {
49 pool.SetSwapEndHook(cross, func(cur realm, poolPath string) error {
50 return hook(poolPath)
51 })
52}
53
54func newPoolAccessor() PoolAccessor {
55 return &poolAccessor{}
56}
57
58type EmissionAccessor interface {
59 MintAndDistributeGns() (int64, bool)
60 GetStakerEmissionAmountPerSecond() int64
61 GetStakerEmissionAmountPerSecondInRange(start, end int64) ([]int64, []int64)
62 SetOnDistributionPctChangeCallback(callback func(emissionAmountPerSecond int64))
63}
64
65type emissionAccessor struct{}
66
67func (e *emissionAccessor) MintAndDistributeGns() (int64, bool) {
68 var amount int64
69 var ok bool
70 func(cur realm) {
71 amount, ok = emission.MintAndDistributeGns(cross)
72 }(cross)
73 return amount, ok
74}
75
76func (e *emissionAccessor) GetStakerEmissionAmountPerSecond() int64 {
77 return emission.GetStakerEmissionAmountPerSecond()
78}
79
80func (e *emissionAccessor) GetStakerEmissionAmountPerSecondInRange(start, end int64) ([]int64, []int64) {
81 return emission.GetStakerEmissionAmountPerSecondInRange(start, end)
82}
83
84func (e *emissionAccessor) SetOnDistributionPctChangeCallback(callback func(emissionAmountPerSecond int64)) {
85 callbackWithCross := func(emissionAmountPerSecond int64) {
86 func(cur realm) {
87 callback(emissionAmountPerSecond)
88 }(cross)
89 }
90
91 func(cur realm) {
92 emission.SetOnDistributionPctChangeCallback(cross, callbackWithCross)
93 }(cross)
94}
95
96func newEmissionAccessor() EmissionAccessor {
97 return &emissionAccessor{}
98}
99
100type NFTAccessor interface {
101 Approve(approved address, tid grc721.TokenID) error
102 Mint(to address, tid grc721.TokenID) grc721.TokenID
103 Burn(tid grc721.TokenID)
104 TransferFrom(from, to address, tid grc721.TokenID) error
105 TotalSupply() int64
106 Exists(tid grc721.TokenID) bool
107 MustOwnerOf(tid grc721.TokenID) address
108 OwnerOf(tid grc721.TokenID) (address, error)
109}
110
111type gnftAccessor struct{}
112
113func (n *gnftAccessor) Approve(approved address, tid grc721.TokenID) error {
114 return gnft.Approve(cross, approved, tid)
115}
116
117func (n *gnftAccessor) Mint(to address, tid grc721.TokenID) grc721.TokenID {
118 return gnft.Mint(cross, to, tid)
119}
120
121func (n *gnftAccessor) Burn(tid grc721.TokenID) {
122 gnft.Burn(cross, tid)
123}
124
125func (n *gnftAccessor) TransferFrom(from, to address, tid grc721.TokenID) error {
126 return gnft.TransferFrom(cross, from, to, tid)
127}
128
129func (n *gnftAccessor) TotalSupply() int64 {
130 return gnft.TotalSupply()
131}
132
133func (n *gnftAccessor) Exists(tid grc721.TokenID) bool {
134 return gnft.Exists(tid)
135}
136
137func (n *gnftAccessor) MustOwnerOf(tid grc721.TokenID) address {
138 return gnft.MustOwnerOf(tid)
139}
140
141func (n *gnftAccessor) OwnerOf(tid grc721.TokenID) (address, error) {
142 return gnft.OwnerOf(tid)
143}
144
145func newNFTAccessor() NFTAccessor {
146 return &gnftAccessor{}
147}