init.gno
2.42 Kb ยท 90 lines
1package v1
2
3import (
4 "strconv"
5
6 "gno.land/p/nt/avl"
7 "gno.land/r/gnoswap/gov/governance"
8)
9
10var defaultConfig = governance.Config{
11 VotingStartDelay: 86400, // 1 day - delay before voting starts
12 VotingPeriod: 604800, // 7 days - duration for collecting votes
13 VotingWeightSmoothingDuration: 86400, // 1 day - period for averaging voting weight
14 Quorum: 50, // 50% of total xGNS supply required
15 ProposalCreationThreshold: 1_000_000_000, // 1 billion - minimum balance to create proposals
16 ExecutionDelay: 86400, // 1 day - waiting period before execution
17 ExecutionWindow: 2592000, // 30 days - window for executing proposals
18}
19
20func init() {
21 registerGovernanceV1()
22}
23
24func registerGovernanceV1() {
25 governance.RegisterInitializer(cross, func(governanceStore governance.IGovernanceStore, stakerAccessor governance.GovStakerAccessor) governance.IGovernance {
26 err := initStoreData(governanceStore)
27 if err != nil {
28 panic(err)
29 }
30
31 return NewGovernanceV1(governanceStore, stakerAccessor)
32 })
33}
34
35func initStoreData(governanceStore governance.IGovernanceStore) error {
36 // Initialize counters if not already set
37 if !governanceStore.HasConfigCounterStoreKey() {
38 err := governanceStore.SetConfigCounter(governance.NewCounter())
39 if err != nil {
40 return err
41 }
42 }
43
44 if !governanceStore.HasProposalCounterStoreKey() {
45 err := governanceStore.SetProposalCounter(governance.NewCounter())
46 if err != nil {
47 return err
48 }
49 }
50
51 // Initialize Configs with default configuration if not already set
52 if !governanceStore.HasConfigsStoreKey() {
53 configs := avl.NewTree()
54 nextConfigVersion := governanceStore.GetConfigCounter().Next()
55
56 configs.Set(formatConfigKey(nextConfigVersion), defaultConfig)
57
58 err := governanceStore.SetConfigs(configs)
59 if err != nil {
60 return err
61 }
62 }
63
64 if !governanceStore.HasProposalsStoreKey() {
65 err := governanceStore.SetProposals(avl.NewTree())
66 if err != nil {
67 return err
68 }
69 }
70
71 if !governanceStore.HasProposalUserVotingInfosStoreKey() {
72 err := governanceStore.SetProposalUserVotingInfos(avl.NewTree())
73 if err != nil {
74 return err
75 }
76 }
77
78 if !governanceStore.HasUserProposalsStoreKey() {
79 err := governanceStore.SetUserProposals(avl.NewTree())
80 if err != nil {
81 return err
82 }
83 }
84
85 return nil
86}
87
88func formatConfigKey(version int64) string {
89 return strconv.FormatInt(version, 10)
90}