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

init.gno

2.89 Kb · 116 lines
  1package staker
  2
  3import (
  4	"gno.land/r/gnoswap/gov/staker"
  5)
  6
  7func init(cur realm) {
  8	registerGovStakerV1(cur)
  9}
 10
 11func registerGovStakerV1(cur realm) {
 12	staker.RegisterInitializer(cross(cur), func(_ int, rlm realm, store staker.IGovStakerStore) staker.IGovStaker {
 13		// `rlm` here is the gov/staker proxy realm threaded in by
 14		// staker.RegisterInitializer. Per-version store bootstrap writes
 15		// therefore pass the proxy's KV-store ACL.
 16		err := initStoreData(0, rlm, store)
 17		if err != nil {
 18			panic(err)
 19		}
 20
 21		return NewGovStakerV1(store)
 22	})
 23}
 24
 25func initStoreData(_ int, rlm realm, store staker.IGovStakerStore) error {
 26	// Initialize basic configuration
 27	if !store.HasUnDelegationLockupPeriodStoreKey() {
 28		err := store.SetUnDelegationLockupPeriod(0, rlm, int64(7*24*60*60)) // 7 days default
 29		if err != nil {
 30			return err
 31		}
 32	}
 33
 34	if !store.HasTotalDelegatedAmountStoreKey() {
 35		err := store.SetTotalDelegatedAmount(0, rlm, int64(0))
 36		if err != nil {
 37			return err
 38		}
 39	}
 40
 41	if !store.HasTotalLockedAmountStoreKey() {
 42		err := store.SetTotalLockedAmount(0, rlm, int64(0))
 43		if err != nil {
 44			return err
 45		}
 46	}
 47
 48	// Initialize delegation management
 49	if !store.HasDelegationCounterStoreKey() {
 50		err := store.SetDelegationCounter(0, rlm, staker.NewCounter())
 51		if err != nil {
 52			return err
 53		}
 54	}
 55
 56	if !store.HasDelegationsStoreKey() {
 57		err := store.SetDelegations(0, rlm, staker.NewDelegationTree())
 58		if err != nil {
 59			return err
 60		}
 61	}
 62
 63	// Initialize total delegation history (timestamp -> int64)
 64	if !store.HasTotalDelegationHistoryStoreKey() {
 65		err := store.SetTotalDelegationHistory(0, rlm, staker.NewUintTree())
 66		if err != nil {
 67			return err
 68		}
 69	}
 70
 71	// Initialize user delegation history (address -> *UintTree[timestamp -> int64])
 72	if !store.HasUserDelegationHistoryStoreKey() {
 73		err := store.SetUserDelegationHistory(0, rlm, staker.NewUserDelegationTree())
 74		if err != nil {
 75			return err
 76		}
 77	}
 78
 79	// Initialize EmissionRewardManager
 80	if !store.HasEmissionRewardManagerStoreKey() {
 81		emissionRewardManager := staker.NewEmissionRewardManager()
 82		err := store.SetEmissionRewardManager(0, rlm, emissionRewardManager)
 83		if err != nil {
 84			return err
 85		}
 86	}
 87
 88	// Initialize ProtocolFeeRewardManager
 89	if !store.HasProtocolFeeRewardManagerStoreKey() {
 90		protocolFeeRewardManager := staker.NewProtocolFeeRewardManager()
 91		err := store.SetProtocolFeeRewardManager(0, rlm, protocolFeeRewardManager)
 92		if err != nil {
 93			return err
 94		}
 95	}
 96
 97	// Initialize LaunchpadProjectDeposits
 98	if !store.HasLaunchpadProjectDepositsStoreKey() {
 99		launchpadDeposits := staker.NewLaunchpadProjectDeposits()
100		err := store.SetLaunchpadProjectDeposits(0, rlm, launchpadDeposits)
101		if err != nil {
102			return err
103		}
104	}
105
106	// Initialize DelegationManager
107	if !store.HasDelegationManagerStoreKey() {
108		delegationManager := staker.NewDelegationManager()
109		err := store.SetDelegationManager(0, rlm, delegationManager)
110		if err != nil {
111			return err
112		}
113	}
114
115	return nil
116}