package staker
import (
"gno.land/r/gnoswap/gov/staker"
)
func init(cur realm) {
registerGovStakerV1(cur)
}
func registerGovStakerV1(cur realm) {
staker.RegisterInitializer(cross(cur), func(_ int, rlm realm, store staker.IGovStakerStore) staker.IGovStaker {
// `rlm` here is the gov/staker proxy realm threaded in by
// staker.RegisterInitializer. Per-version store bootstrap writes
// therefore pass the proxy's KV-store ACL.
err := initStoreData(0, rlm, store)
if err != nil {
panic(err)
}
return NewGovStakerV1(store)
})
}
func initStoreData(_ int, rlm realm, store staker.IGovStakerStore) error {
// Initialize basic configuration
if !store.HasUnDelegationLockupPeriodStoreKey() {
err := store.SetUnDelegationLockupPeriod(0, rlm, int64(7*24*60*60)) // 7 days default
if err != nil {
return err
}
}
if !store.HasTotalDelegatedAmountStoreKey() {
err := store.SetTotalDelegatedAmount(0, rlm, int64(0))
if err != nil {
return err
}
}
if !store.HasTotalLockedAmountStoreKey() {
err := store.SetTotalLockedAmount(0, rlm, int64(0))
if err != nil {
return err
}
}
// Initialize delegation management
if !store.HasDelegationCounterStoreKey() {
err := store.SetDelegationCounter(0, rlm, staker.NewCounter())
if err != nil {
return err
}
}
if !store.HasDelegationsStoreKey() {
err := store.SetDelegations(0, rlm, staker.NewDelegationTree())
if err != nil {
return err
}
}
// Initialize total delegation history (timestamp -> int64)
if !store.HasTotalDelegationHistoryStoreKey() {
err := store.SetTotalDelegationHistory(0, rlm, staker.NewUintTree())
if err != nil {
return err
}
}
// Initialize user delegation history (address -> *UintTree[timestamp -> int64])
if !store.HasUserDelegationHistoryStoreKey() {
err := store.SetUserDelegationHistory(0, rlm, staker.NewUserDelegationTree())
if err != nil {
return err
}
}
// Initialize EmissionRewardManager
if !store.HasEmissionRewardManagerStoreKey() {
emissionRewardManager := staker.NewEmissionRewardManager()
err := store.SetEmissionRewardManager(0, rlm, emissionRewardManager)
if err != nil {
return err
}
}
// Initialize ProtocolFeeRewardManager
if !store.HasProtocolFeeRewardManagerStoreKey() {
protocolFeeRewardManager := staker.NewProtocolFeeRewardManager()
err := store.SetProtocolFeeRewardManager(0, rlm, protocolFeeRewardManager)
if err != nil {
return err
}
}
// Initialize LaunchpadProjectDeposits
if !store.HasLaunchpadProjectDepositsStoreKey() {
launchpadDeposits := staker.NewLaunchpadProjectDeposits()
err := store.SetLaunchpadProjectDeposits(0, rlm, launchpadDeposits)
if err != nil {
return err
}
}
// Initialize DelegationManager
if !store.HasDelegationManagerStoreKey() {
delegationManager := staker.NewDelegationManager()
err := store.SetDelegationManager(0, rlm, delegationManager)
if err != nil {
return err
}
}
return nil
}