Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}