github.com/cosmos/cosmos-sdk@v0.50.10/x/gov/genesis.go (about) 1 package gov 2 3 import ( 4 "fmt" 5 6 "cosmossdk.io/collections" 7 8 sdk "github.com/cosmos/cosmos-sdk/types" 9 "github.com/cosmos/cosmos-sdk/x/gov/keeper" 10 "github.com/cosmos/cosmos-sdk/x/gov/types" 11 v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" 12 ) 13 14 // InitGenesis - store genesis parameters 15 func InitGenesis(ctx sdk.Context, ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper, data *v1.GenesisState) { 16 err := k.ProposalID.Set(ctx, data.StartingProposalId) 17 if err != nil { 18 panic(err) 19 } 20 21 err = k.Params.Set(ctx, *data.Params) 22 if err != nil { 23 panic(err) 24 } 25 26 err = k.Constitution.Set(ctx, data.Constitution) 27 if err != nil { 28 panic(err) 29 } 30 31 // check if the deposits pool account exists 32 moduleAcc := k.GetGovernanceAccount(ctx) 33 if moduleAcc == nil { 34 panic(fmt.Sprintf("%s module account has not been set", types.ModuleName)) 35 } 36 37 var totalDeposits sdk.Coins 38 for _, deposit := range data.Deposits { 39 err := k.SetDeposit(ctx, *deposit) 40 if err != nil { 41 panic(err) 42 } 43 totalDeposits = totalDeposits.Add(deposit.Amount...) 44 } 45 46 for _, vote := range data.Votes { 47 addr, err := ak.AddressCodec().StringToBytes(vote.Voter) 48 if err != nil { 49 panic(err) 50 } 51 err = k.Votes.Set(ctx, collections.Join(vote.ProposalId, sdk.AccAddress(addr)), *vote) 52 if err != nil { 53 panic(err) 54 } 55 } 56 57 for _, proposal := range data.Proposals { 58 switch proposal.Status { 59 case v1.StatusDepositPeriod: 60 err := k.InactiveProposalsQueue.Set(ctx, collections.Join(*proposal.DepositEndTime, proposal.Id), proposal.Id) 61 if err != nil { 62 panic(err) 63 } 64 case v1.StatusVotingPeriod: 65 err := k.ActiveProposalsQueue.Set(ctx, collections.Join(*proposal.VotingEndTime, proposal.Id), proposal.Id) 66 if err != nil { 67 panic(err) 68 } 69 } 70 err := k.SetProposal(ctx, *proposal) 71 if err != nil { 72 panic(err) 73 } 74 } 75 76 // if account has zero balance it probably means it's not set, so we set it 77 balance := bk.GetAllBalances(ctx, moduleAcc.GetAddress()) 78 if balance.IsZero() { 79 ak.SetModuleAccount(ctx, moduleAcc) 80 } 81 82 // check if total deposits equals balance, if it doesn't panic because there were export/import errors 83 if !balance.Equal(totalDeposits) { 84 panic(fmt.Sprintf("expected module account was %s but we got %s", balance.String(), totalDeposits.String())) 85 } 86 } 87 88 // ExportGenesis - output genesis parameters 89 func ExportGenesis(ctx sdk.Context, k *keeper.Keeper) (*v1.GenesisState, error) { 90 startingProposalID, err := k.ProposalID.Peek(ctx) 91 if err != nil { 92 return nil, err 93 } 94 95 var proposals v1.Proposals 96 err = k.Proposals.Walk(ctx, nil, func(_ uint64, value v1.Proposal) (stop bool, err error) { 97 proposals = append(proposals, &value) 98 return false, nil 99 }) 100 if err != nil { 101 return nil, err 102 } 103 104 constitution, err := k.Constitution.Get(ctx) 105 if err != nil { 106 return nil, err 107 } 108 109 params, err := k.Params.Get(ctx) 110 if err != nil { 111 return nil, err 112 } 113 114 var proposalsDeposits v1.Deposits 115 err = k.Deposits.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], value v1.Deposit) (stop bool, err error) { 116 proposalsDeposits = append(proposalsDeposits, &value) 117 return false, nil 118 }) 119 if err != nil { 120 panic(err) 121 } 122 123 // export proposals votes 124 var proposalsVotes v1.Votes 125 err = k.Votes.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], value v1.Vote) (stop bool, err error) { 126 proposalsVotes = append(proposalsVotes, &value) 127 return false, nil 128 }) 129 if err != nil { 130 panic(err) 131 } 132 133 return &v1.GenesisState{ 134 StartingProposalId: startingProposalID, 135 Deposits: proposalsDeposits, 136 Votes: proposalsVotes, 137 Proposals: proposals, 138 Params: ¶ms, 139 Constitution: constitution, 140 }, nil 141 }