Search Apps Documentation Source Content File Folder Download Copy Actions Download

init.gno

2.89 Kb · 116 lines
  1package v1
  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}