init.gno
2.54 Kb · 94 lines
1package governance
2
3import (
4 "strconv"
5
6 "gno.land/r/gnoswap/gov/governance"
7)
8
9func init(cur realm) {
10 registerGovernanceV1(cur)
11}
12
13func registerGovernanceV1(cur realm) {
14 governance.RegisterInitializer(cross(cur), func(_ int, rlm realm, governanceStore governance.IGovernanceStore, stakerAccessor governance.GovStakerAccessor) governance.IGovernance {
15 // `rlm` here is the governance proxy realm threaded in by
16 // governance.RegisterInitializer. Per-version store bootstrap
17 // writes therefore pass the proxy's KV-store ACL.
18 err := initStoreData(0, rlm, governanceStore)
19 if err != nil {
20 panic(err)
21 }
22
23 return NewGovernanceV1(governanceStore, stakerAccessor)
24 })
25}
26
27func initStoreData(_ int, rlm realm, governanceStore governance.IGovernanceStore) error {
28 // Initialize counters if not already set
29 if !governanceStore.HasConfigCounterStoreKey() {
30 err := governanceStore.SetConfigCounter(0, rlm, governance.NewCounter())
31 if err != nil {
32 return err
33 }
34 }
35
36 if !governanceStore.HasProposalCounterStoreKey() {
37 err := governanceStore.SetProposalCounter(0, rlm, governance.NewCounter())
38 if err != nil {
39 return err
40 }
41 }
42
43 // Initialize Configs with default configuration if not already set
44 if !governanceStore.HasConfigsStoreKey() {
45 configs := governance.NewConfigTree()
46 counter := governanceStore.GetConfigCounter()
47 nextConfigVersion := counter.Next()
48
49 configs.Set(formatConfigKey(nextConfigVersion), governance.NewDefaultConfig())
50
51 err := governanceStore.SetConfigs(0, rlm, configs)
52 if err != nil {
53 return err
54 }
55 // Persist the mutated counter so the bumped version survives the
56 // boundary into the proxy's KV store.
57 if err := governanceStore.SetConfigCounter(0, rlm, counter); err != nil {
58 return err
59 }
60 }
61
62 if !governanceStore.HasProposalsStoreKey() {
63 err := governanceStore.SetProposals(0, rlm, governance.NewProposalTree())
64 if err != nil {
65 return err
66 }
67 }
68
69 if !governanceStore.HasActiveProposalsBySnapshotStoreKey() {
70 if err := governanceStore.SetActiveProposalsBySnapshot(0, rlm, governance.NewProposalTree()); err != nil {
71 return err
72 }
73 }
74
75 if !governanceStore.HasProposalUserVotingInfosStoreKey() {
76 err := governanceStore.SetProposalUserVotingInfos(0, rlm, governance.NewProposalUserVotingInfoTree())
77 if err != nil {
78 return err
79 }
80 }
81
82 if !governanceStore.HasUserProposalsStoreKey() {
83 err := governanceStore.SetUserProposals(0, rlm, governance.NewUserProposalTree())
84 if err != nil {
85 return err
86 }
87 }
88
89 return nil
90}
91
92func formatConfigKey(version int64) string {
93 return strconv.FormatInt(version, 10)
94}