Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}