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.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}