From 2527e1fa3bc07b8bbfb8ca2879e01fa96122e380 Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Mon, 8 Oct 2018 00:57:52 +0800 Subject: [PATCH] Implement NewTestGaiaAppGenState and update LCD test bonding --- client/lcd/lcd_test.go | 5 ++- cmd/gaia/app/genesis.go | 2 +- cmd/gaia/app/test_utils.go | 74 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 cmd/gaia/app/test_utils.go diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 485c5a2f6d..b9334a6e6d 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -518,9 +518,12 @@ func TestBonding(t *testing.T) { name, password, denom := "test", "1234567890", "steak" addr, seed := CreateAddr(t, name, password, GetKeyBase(t)) - cleanup, _, operAddrs, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + cleanup, valPubKeys, operAddrs, port := InitializeTestLCD(t, 2, []sdk.AccAddress{addr}) defer cleanup() + require.Equal(t, 2, len(valPubKeys)) + require.Equal(t, 2, len(operAddrs)) + amt := sdk.NewDec(60) validator := getValidator(t, port, operAddrs[0]) diff --git a/cmd/gaia/app/genesis.go b/cmd/gaia/app/genesis.go index 84f0ea7fa7..f2e5f90cc8 100644 --- a/cmd/gaia/app/genesis.go +++ b/cmd/gaia/app/genesis.go @@ -161,7 +161,6 @@ func GaiaAppGenTxNF(cdc *codec.Codec, pk crypto.PubKey, addr sdk.AccAddress, nam // Create the core parameters for genesis initialization for gaia // note that the pubkey input is this machines pubkey func GaiaAppGenState(cdc *codec.Codec, appGenTxs []json.RawMessage) (genesisState GenesisState, err error) { - if len(appGenTxs) == 0 { err = errors.New("must provide at least genesis transaction") return @@ -196,6 +195,7 @@ func GaiaAppGenState(cdc *codec.Codec, appGenTxs []json.RawMessage) (genesisStat StakeData: stakeData, GovData: gov.DefaultGenesisState(), } + return } diff --git a/cmd/gaia/app/test_utils.go b/cmd/gaia/app/test_utils.go new file mode 100644 index 0000000000..f590f782d2 --- /dev/null +++ b/cmd/gaia/app/test_utils.go @@ -0,0 +1,74 @@ +package app + +import ( + "encoding/json" + "errors" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/gov" + "github.com/cosmos/cosmos-sdk/x/stake" + tmtypes "github.com/tendermint/tendermint/types" +) + +// NewTestGaiaAppGenState creates the core parameters for a test genesis +// initialization given a set of genesis txs, TM validators and their respective +// operating addresses. +func NewTestGaiaAppGenState( + cdc *codec.Codec, appGenTxs []json.RawMessage, tmVals []tmtypes.GenesisValidator, valOperAddrs []sdk.ValAddress, +) (GenesisState, error) { + + switch { + case len(appGenTxs) == 0: + return GenesisState{}, errors.New("must provide at least genesis transaction") + case len(tmVals) != len(valOperAddrs): + return GenesisState{}, errors.New("number of TM validators does not match number of operator addresses") + } + + // start with the default staking genesis state + stakeData := stake.DefaultGenesisState() + + // get genesis account information + genAccs := make([]GenesisAccount, len(appGenTxs)) + for i, appGenTx := range appGenTxs { + + var genTx GaiaGenTx + if err := cdc.UnmarshalJSON(appGenTx, &genTx); err != nil { + return GenesisState{}, err + } + + // create the genesis account for the given genesis tx + genAccs[i] = genesisAccountFromGenTx(genTx) + } + + for i, tmVal := range tmVals { + var issuedDelShares sdk.Dec + + // increase total supply by validator's power + power := sdk.NewInt(tmVal.Power) + stakeData.Pool.LooseTokens = stakeData.Pool.LooseTokens.Add(sdk.NewDecFromInt(power)) + + // add the validator + desc := stake.NewDescription(tmVal.Name, "", "", "") + validator := stake.NewValidator(sdk.ValAddress(valOperAddrs[i]), tmVal.PubKey, desc) + + validator, stakeData.Pool, issuedDelShares = validator.AddTokensFromDel(stakeData.Pool, power) + stakeData.Validators = append(stakeData.Validators, validator) + + // create the self-delegation from the issuedDelShares + selfDel := stake.Delegation{ + DelegatorAddr: sdk.AccAddress(validator.OperatorAddr), + ValidatorAddr: validator.OperatorAddr, + Shares: issuedDelShares, + Height: 0, + } + + stakeData.Bonds = append(stakeData.Bonds, selfDel) + } + + return GenesisState{ + Accounts: genAccs, + StakeData: stakeData, + GovData: gov.DefaultGenesisState(), + }, nil +}