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}