Search Apps Documentation Source Content File Folder Download Copy Actions Download 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}