Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

instance.gno

2.77 Kb · 104 lines
  1package staker
  2
  3import sr "gno.land/r/gnoswap/staker"
  4
  5type stakerV1 struct {
  6	store            sr.IStakerStore
  7	poolAccessor     sr.PoolAccessor
  8	emissionAccessor sr.EmissionAccessor
  9	nftAccessor      sr.NFTAccessor
 10}
 11
 12func (s *stakerV1) getPools() *Pools {
 13	return &Pools{
 14		tree: s.store.GetPools(),
 15	}
 16}
 17
 18func (s *stakerV1) getPoolTier() *PoolTier {
 19	return NewPoolTierBy(
 20		s.store.GetPoolTierMemberships(),
 21		s.store.GetPoolTierRatio(),
 22		s.store.GetPoolTierCounts(),
 23		s.store.GetPoolTierLastRewardCacheTimestamp(),
 24		s.store.GetPoolTierCurrentEmission(),
 25		s.store.GetPoolTierGetEmission(),
 26		s.store.GetPoolTierGetHalvingBlocksInRange(),
 27	)
 28}
 29
 30func (s *stakerV1) updatePoolTier(_ int, rlm realm, poolTier *PoolTier) {
 31	err := s.store.SetPoolTierMemberships(0, rlm, poolTier.membership)
 32	if err != nil {
 33		panic(err)
 34	}
 35
 36	err = s.store.SetPoolTierRatio(0, rlm, poolTier.tierRatio)
 37	if err != nil {
 38		panic(err)
 39	}
 40
 41	err = s.store.SetPoolTierCounts(0, rlm, poolTier.counts)
 42	if err != nil {
 43		panic(err)
 44	}
 45
 46	err = s.store.SetPoolTierLastRewardCacheTimestamp(0, rlm, poolTier.lastRewardCacheTimestamp)
 47	if err != nil {
 48		panic(err)
 49	}
 50
 51	err = s.store.SetPoolTierCurrentEmission(0, rlm, poolTier.currentEmission)
 52	if err != nil {
 53		panic(err)
 54	}
 55
 56	err = s.store.SetPoolTierGetEmission(0, rlm, poolTier.getEmission)
 57	if err != nil {
 58		panic(err)
 59	}
 60
 61	err = s.store.SetPoolTierGetHalvingBlocksInRange(0, rlm, poolTier.getHalvingBlocksInRange)
 62	if err != nil {
 63		panic(err)
 64	}
 65}
 66
 67func (s *stakerV1) getDeposits() *Deposits {
 68	return &Deposits{
 69		tree: s.store.GetDeposits(),
 70	}
 71}
 72
 73func (s *stakerV1) getExternalIncentives() *ExternalIncentives {
 74	return &ExternalIncentives{
 75		tree: s.store.GetExternalIncentives(),
 76	}
 77}
 78
 79func (s *stakerV1) getDepositResolver(lpTokenId uint64) (*DepositResolver, error) {
 80	deposit, err := s.getDeposit(lpTokenId)
 81	if err != nil {
 82		return nil, err
 83	}
 84	return NewDepositResolver(deposit), nil
 85}
 86
 87// NewStakerV1 constructs a version 1 staker implementation backed by the supplied accessors.
 88//
 89// Parameters:
 90//   - stakerStore: Persistent storage accessor for pools, deposits, incentives, tier state, and reward bookkeeping.
 91//   - poolAccessor: Accessor for pool state used while updating and resolving staked positions.
 92//   - emissionAccessor: Accessor for GNS emission data used to calculate rewards.
 93//   - nftAccessor: Accessor for the position NFT ownership and token operations.
 94//
 95// Returns:
 96//   - staker: New stakerV1 implementation wired to the supplied store and accessors.
 97func NewStakerV1(stakerStore sr.IStakerStore, poolAccessor sr.PoolAccessor, emissionAccessor sr.EmissionAccessor, nftAccessor sr.NFTAccessor) *stakerV1 {
 98	return &stakerV1{
 99		store:            stakerStore,
100		poolAccessor:     poolAccessor,
101		emissionAccessor: emissionAccessor,
102		nftAccessor:      nftAccessor,
103	}
104}