github.com/Finschia/finschia-sdk@v0.48.1/x/gov/genesis.go (about) 1 package gov 2 3 import ( 4 "fmt" 5 6 sdk "github.com/Finschia/finschia-sdk/types" 7 "github.com/Finschia/finschia-sdk/x/gov/keeper" 8 "github.com/Finschia/finschia-sdk/x/gov/types" 9 ) 10 11 // InitGenesis - store genesis parameters 12 func InitGenesis(ctx sdk.Context, ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper, data *types.GenesisState) { 13 k.SetProposalID(ctx, data.StartingProposalId) 14 k.SetDepositParams(ctx, data.DepositParams) 15 k.SetVotingParams(ctx, data.VotingParams) 16 k.SetTallyParams(ctx, data.TallyParams) 17 18 // check if the deposits pool account exists 19 moduleAcc := k.GetGovernanceAccount(ctx) 20 if moduleAcc == nil { 21 panic(fmt.Sprintf("%s module account has not been set", types.ModuleName)) 22 } 23 24 var totalDeposits sdk.Coins 25 for _, deposit := range data.Deposits { 26 k.SetDeposit(ctx, deposit) 27 totalDeposits = totalDeposits.Add(deposit.Amount...) 28 } 29 30 for _, vote := range data.Votes { 31 k.SetVote(ctx, vote) 32 } 33 34 for _, proposal := range data.Proposals { 35 switch proposal.Status { 36 case types.StatusDepositPeriod: 37 k.InsertInactiveProposalQueue(ctx, proposal.ProposalId, proposal.DepositEndTime) 38 case types.StatusVotingPeriod: 39 k.InsertActiveProposalQueue(ctx, proposal.ProposalId, proposal.VotingEndTime) 40 } 41 k.SetProposal(ctx, proposal) 42 } 43 44 // if account has zero balance it probably means it's not set, so we set it 45 balance := bk.GetAllBalances(ctx, moduleAcc.GetAddress()) 46 if balance.IsZero() { 47 ak.SetModuleAccount(ctx, moduleAcc) 48 } 49 50 // check if total deposits equals balance, if it doesn't panic because there were export/import errors 51 if !balance.IsEqual(totalDeposits) { 52 panic(fmt.Sprintf("expected module account was %s but we got %s", balance.String(), totalDeposits.String())) 53 } 54 } 55 56 // ExportGenesis - output genesis parameters 57 func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { 58 startingProposalID, _ := k.GetProposalID(ctx) 59 depositParams := k.GetDepositParams(ctx) 60 votingParams := k.GetVotingParams(ctx) 61 tallyParams := k.GetTallyParams(ctx) 62 proposals := k.GetProposals(ctx) 63 64 var proposalsDeposits types.Deposits 65 var proposalsVotes types.Votes 66 for _, proposal := range proposals { 67 deposits := k.GetDeposits(ctx, proposal.ProposalId) 68 proposalsDeposits = append(proposalsDeposits, deposits...) 69 70 votes := k.GetVotes(ctx, proposal.ProposalId) 71 proposalsVotes = append(proposalsVotes, votes...) 72 } 73 74 return &types.GenesisState{ 75 StartingProposalId: startingProposalID, 76 Deposits: proposalsDeposits, 77 Votes: proposalsVotes, 78 Proposals: proposals, 79 DepositParams: depositParams, 80 VotingParams: votingParams, 81 TallyParams: tallyParams, 82 } 83 }