Search Apps Documentation Source Content File Folder Download Copy Actions Download

init.gno

2.35 Kb · 88 lines
 1package v1
 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.HasProposalUserVotingInfosStoreKey() {
70		err := governanceStore.SetProposalUserVotingInfos(0, rlm, governance.NewProposalUserVotingInfoTree())
71		if err != nil {
72			return err
73		}
74	}
75
76	if !governanceStore.HasUserProposalsStoreKey() {
77		err := governanceStore.SetUserProposals(0, rlm, governance.NewUserProposalTree())
78		if err != nil {
79			return err
80		}
81	}
82
83	return nil
84}
85
86func formatConfigKey(version int64) string {
87	return strconv.FormatInt(version, 10)
88}