github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/gov/genesis.go (about) 1 package gov 2 3 import ( 4 "fmt" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/types" 8 ) 9 10 // InitGenesis - store genesis parameters 11 func InitGenesis(ctx sdk.Context, k Keeper, supplyKeeper types.SupplyKeeper, data GenesisState) { 12 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 StatusDepositPeriod: 37 k.InsertInactiveProposalQueue(ctx, proposal.ProposalID, proposal.DepositEndTime) 38 case StatusVotingPeriod: 39 k.InsertActiveProposalQueue(ctx, proposal.ProposalID, proposal.VotingEndTime) 40 } 41 k.SetProposal(ctx, proposal) 42 } 43 44 // add coins if not provided on genesis 45 if moduleAcc.GetCoins().IsZero() { 46 if err := moduleAcc.SetCoins(totalDeposits); err != nil { 47 panic(err) 48 } 49 supplyKeeper.SetModuleAccount(ctx, moduleAcc) 50 } 51 } 52 53 // ExportGenesis - output genesis parameters 54 func ExportGenesis(ctx sdk.Context, k Keeper) GenesisState { 55 startingProposalID, _ := k.GetProposalID(ctx) 56 depositParams := k.GetDepositParams(ctx) 57 votingParams := k.GetVotingParams(ctx) 58 tallyParams := k.GetTallyParams(ctx) 59 proposals := k.GetProposals(ctx) 60 61 var proposalsDeposits Deposits 62 var proposalsVotes Votes 63 for _, proposal := range proposals { 64 deposits := k.GetDeposits(ctx, proposal.ProposalID) 65 proposalsDeposits = append(proposalsDeposits, deposits...) 66 67 votes := k.GetVotes(ctx, proposal.ProposalID) 68 proposalsVotes = append(proposalsVotes, votes...) 69 } 70 71 return GenesisState{ 72 StartingProposalID: startingProposalID, 73 Deposits: proposalsDeposits, 74 Votes: proposalsVotes, 75 Proposals: proposals, 76 DepositParams: depositParams, 77 VotingParams: votingParams, 78 TallyParams: tallyParams, 79 } 80 }