diff --git a/Makefile b/Makefile index 9929d35..6ad33fa 100644 --- a/Makefile +++ b/Makefile @@ -134,7 +134,7 @@ check-cover: @go test -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./... check-build: build - @go test -mod=readonly -p 4 `go list ./cli_test/...` -tags=cli_test + @go test -mod=readonly -p 4 `go list ./cli_test/...` -tags=cli_test -v lint: golangci-lint diff --git a/app/app.go b/app/app.go index d40b9ed..8ed33f8 100644 --- a/app/app.go +++ b/app/app.go @@ -11,15 +11,16 @@ import ( bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/auth/genaccounts" "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/crisis" distr "github.com/cosmos/cosmos-sdk/x/distribution" distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client" + "github.com/cosmos/cosmos-sdk/x/genaccounts" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/gov" "github.com/cosmos/cosmos-sdk/x/mint" @@ -27,6 +28,7 @@ import ( paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" "github.com/cosmos/cosmos-sdk/x/slashing" "github.com/cosmos/cosmos-sdk/x/staking" + "github.com/cosmos/cosmos-sdk/x/supply" ) const appName = "GaiaApp" @@ -57,6 +59,7 @@ func init() { params.AppModuleBasic{}, crisis.AppModuleBasic{}, slashing.AppModuleBasic{}, + supply.AppModuleBasic{}, ) } @@ -77,30 +80,30 @@ type GaiaApp struct { invCheckPeriod uint // keys to access the substores - keyMain *sdk.KVStoreKey - keyAccount *sdk.KVStoreKey - keyStaking *sdk.KVStoreKey - tkeyStaking *sdk.TransientStoreKey - keySlashing *sdk.KVStoreKey - keyMint *sdk.KVStoreKey - keyDistr *sdk.KVStoreKey - tkeyDistr *sdk.TransientStoreKey - keyGov *sdk.KVStoreKey - keyFeeCollection *sdk.KVStoreKey - keyParams *sdk.KVStoreKey - tkeyParams *sdk.TransientStoreKey + keyMain *sdk.KVStoreKey + keyAccount *sdk.KVStoreKey + keySupply *sdk.KVStoreKey + keyStaking *sdk.KVStoreKey + tkeyStaking *sdk.TransientStoreKey + keySlashing *sdk.KVStoreKey + keyMint *sdk.KVStoreKey + keyDistr *sdk.KVStoreKey + tkeyDistr *sdk.TransientStoreKey + keyGov *sdk.KVStoreKey + keyParams *sdk.KVStoreKey + tkeyParams *sdk.TransientStoreKey // keepers - accountKeeper auth.AccountKeeper - feeCollectionKeeper auth.FeeCollectionKeeper - bankKeeper bank.Keeper - stakingKeeper staking.Keeper - slashingKeeper slashing.Keeper - mintKeeper mint.Keeper - distrKeeper distr.Keeper - govKeeper gov.Keeper - crisisKeeper crisis.Keeper - paramsKeeper params.Keeper + accountKeeper auth.AccountKeeper + bankKeeper bank.Keeper + supplyKeeper supply.Keeper + stakingKeeper staking.Keeper + slashingKeeper slashing.Keeper + mintKeeper mint.Keeper + distrKeeper distr.Keeper + govKeeper gov.Keeper + crisisKeeper crisis.Keeper + paramsKeeper params.Keeper // the module manager mm *module.Manager @@ -117,21 +120,21 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b bApp.SetAppVersion(version.Version) var app = &GaiaApp{ - BaseApp: bApp, - cdc: cdc, - invCheckPeriod: invCheckPeriod, - keyMain: sdk.NewKVStoreKey(bam.MainStoreKey), - keyAccount: sdk.NewKVStoreKey(auth.StoreKey), - keyStaking: sdk.NewKVStoreKey(staking.StoreKey), - tkeyStaking: sdk.NewTransientStoreKey(staking.TStoreKey), - keyMint: sdk.NewKVStoreKey(mint.StoreKey), - keyDistr: sdk.NewKVStoreKey(distr.StoreKey), - tkeyDistr: sdk.NewTransientStoreKey(distr.TStoreKey), - keySlashing: sdk.NewKVStoreKey(slashing.StoreKey), - keyGov: sdk.NewKVStoreKey(gov.StoreKey), - keyFeeCollection: sdk.NewKVStoreKey(auth.FeeStoreKey), - keyParams: sdk.NewKVStoreKey(params.StoreKey), - tkeyParams: sdk.NewTransientStoreKey(params.TStoreKey), + BaseApp: bApp, + cdc: cdc, + invCheckPeriod: invCheckPeriod, + keyMain: sdk.NewKVStoreKey(bam.MainStoreKey), + keyAccount: sdk.NewKVStoreKey(auth.StoreKey), + keySupply: sdk.NewKVStoreKey(supply.StoreKey), + keyStaking: sdk.NewKVStoreKey(staking.StoreKey), + tkeyStaking: sdk.NewTransientStoreKey(staking.TStoreKey), + keyMint: sdk.NewKVStoreKey(mint.StoreKey), + keyDistr: sdk.NewKVStoreKey(distr.StoreKey), + tkeyDistr: sdk.NewTransientStoreKey(distr.TStoreKey), + keySlashing: sdk.NewKVStoreKey(slashing.StoreKey), + keyGov: sdk.NewKVStoreKey(gov.StoreKey), + keyParams: sdk.NewKVStoreKey(params.StoreKey), + tkeyParams: sdk.NewTransientStoreKey(params.TStoreKey), } // init params keeper and subspaces @@ -145,19 +148,24 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b govSubspace := app.paramsKeeper.Subspace(gov.DefaultParamspace) crisisSubspace := app.paramsKeeper.Subspace(crisis.DefaultParamspace) + // account permissions + basicModuleAccs := []string{auth.FeeCollectorName, distr.ModuleName} + minterModuleAccs := []string{mint.ModuleName} + burnerModuleAccs := []string{staking.BondedPoolName, staking.NotBondedPoolName, gov.ModuleName} + // add keepers app.accountKeeper = auth.NewAccountKeeper(app.cdc, app.keyAccount, authSubspace, auth.ProtoBaseAccount) app.bankKeeper = bank.NewBaseKeeper(app.accountKeeper, bankSubspace, bank.DefaultCodespace) - app.feeCollectionKeeper = auth.NewFeeCollectionKeeper(app.cdc, app.keyFeeCollection) - stakingKeeper := staking.NewKeeper(app.cdc, app.keyStaking, app.tkeyStaking, app.bankKeeper, - stakingSubspace, staking.DefaultCodespace) - app.mintKeeper = mint.NewKeeper(app.cdc, app.keyMint, mintSubspace, &stakingKeeper, app.feeCollectionKeeper) - app.distrKeeper = distr.NewKeeper(app.cdc, app.keyDistr, distrSubspace, app.bankKeeper, &stakingKeeper, - app.feeCollectionKeeper, distr.DefaultCodespace) + app.supplyKeeper = supply.NewKeeper(app.cdc, app.keySupply, app.accountKeeper, + app.bankKeeper, supply.DefaultCodespace, basicModuleAccs, minterModuleAccs, burnerModuleAccs) + stakingKeeper := staking.NewKeeper(app.cdc, app.keyStaking, app.tkeyStaking, + app.supplyKeeper, stakingSubspace, staking.DefaultCodespace) + app.mintKeeper = mint.NewKeeper(app.cdc, app.keyMint, mintSubspace, &stakingKeeper, app.supplyKeeper, auth.FeeCollectorName) + app.distrKeeper = distr.NewKeeper(app.cdc, app.keyDistr, distrSubspace, &stakingKeeper, + app.supplyKeeper, distr.DefaultCodespace, auth.FeeCollectorName) app.slashingKeeper = slashing.NewKeeper(app.cdc, app.keySlashing, &stakingKeeper, slashingSubspace, slashing.DefaultCodespace) - app.crisisKeeper = crisis.NewKeeper(crisisSubspace, invCheckPeriod, app.distrKeeper, - app.bankKeeper, app.feeCollectionKeeper) + app.crisisKeeper = crisis.NewKeeper(crisisSubspace, invCheckPeriod, app.supplyKeeper, auth.FeeCollectorName) // register the proposal types govRouter := gov.NewRouter() @@ -165,7 +173,7 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b AddRoute(params.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)). AddRoute(distr.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.distrKeeper)) app.govKeeper = gov.NewKeeper(app.cdc, app.keyGov, app.paramsKeeper, govSubspace, - app.bankKeeper, &stakingKeeper, gov.DefaultCodespace, govRouter) + app.supplyKeeper, &stakingKeeper, gov.DefaultCodespace, govRouter) // register the staking hooks // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks @@ -175,14 +183,15 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b app.mm = module.NewManager( genaccounts.NewAppModule(app.accountKeeper), genutil.NewAppModule(app.accountKeeper, app.stakingKeeper, app.BaseApp.DeliverTx), - auth.NewAppModule(app.accountKeeper, app.feeCollectionKeeper), + auth.NewAppModule(app.accountKeeper), bank.NewAppModule(app.bankKeeper, app.accountKeeper), crisis.NewAppModule(app.crisisKeeper), - distr.NewAppModule(app.distrKeeper), - gov.NewAppModule(app.govKeeper), + supply.NewAppModule(app.supplyKeeper, app.accountKeeper), + distr.NewAppModule(app.distrKeeper, app.supplyKeeper), + gov.NewAppModule(app.govKeeper, app.supplyKeeper), mint.NewAppModule(app.mintKeeper), slashing.NewAppModule(app.slashingKeeper, app.stakingKeeper), - staking.NewAppModule(app.stakingKeeper, app.feeCollectionKeeper, app.distrKeeper, app.accountKeeper), + staking.NewAppModule(app.stakingKeeper, app.distrKeeper, app.accountKeeper, app.supplyKeeper), ) // During begin block slashing happens after distr.BeginBlocker so that @@ -194,7 +203,7 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b // genutils must occur after staking so that pools are properly // initialized with tokens from genesis accounts. - app.mm.SetOrderInitGenesis(genaccounts.ModuleName, distr.ModuleName, + app.mm.SetOrderInitGenesis(genaccounts.ModuleName, supply.ModuleName, distr.ModuleName, staking.ModuleName, auth.ModuleName, bank.ModuleName, slashing.ModuleName, gov.ModuleName, mint.ModuleName, crisis.ModuleName, genutil.ModuleName) @@ -202,14 +211,14 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b app.mm.RegisterRoutes(app.Router(), app.QueryRouter()) // initialize stores - app.MountStores(app.keyMain, app.keyAccount, app.keyStaking, app.keyMint, - app.keyDistr, app.keySlashing, app.keyGov, app.keyFeeCollection, - app.keyParams, app.tkeyParams, app.tkeyStaking, app.tkeyDistr) + app.MountStores(app.keyMain, app.keyAccount, app.keySupply, app.keyStaking, + app.keyMint, app.keyDistr, app.keySlashing, app.keyGov, app.keyParams, + app.tkeyParams, app.tkeyStaking, app.tkeyDistr) // initialize BaseApp app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) - app.SetAnteHandler(auth.NewAnteHandler(app.accountKeeper, app.feeCollectionKeeper, auth.DefaultSigVerificationGasConsumer)) + app.SetAnteHandler(auth.NewAnteHandler(app.accountKeeper, app.supplyKeeper, auth.DefaultSigVerificationGasConsumer)) app.SetEndBlocker(app.EndBlocker) if loadLatest { @@ -233,7 +242,7 @@ func (app *GaiaApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.R // application update at chain initialization func (app *GaiaApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { - var genesisState GenesisState + var genesisState simapp.GenesisState app.cdc.MustUnmarshalJSON(req.AppStateBytes, &genesisState) return app.mm.InitGenesis(ctx, genesisState) } diff --git a/app/app_test.go b/app/app_test.go index 1e880cd..3b73774 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -9,6 +9,7 @@ import ( "github.com/tendermint/tendermint/libs/log" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/simapp" abci "github.com/tendermint/tendermint/abci/types" ) @@ -26,7 +27,7 @@ func TestGaiadExport(t *testing.T) { func setGenesis(gapp *GaiaApp) error { - genesisState := NewDefaultGenesisState() + genesisState := simapp.NewDefaultGenesisState() stateBytes, err := codec.MarshalJSONIndent(gapp.cdc, genesisState) if err != nil { return err diff --git a/app/genesis.go b/app/genesis.go deleted file mode 100644 index d4e99dd..0000000 --- a/app/genesis.go +++ /dev/null @@ -1,19 +0,0 @@ -package app - -import ( - "encoding/json" -) - -// The genesis state of the blockchain is represented here as a map of raw json -// messages key'd by a identifier string. -// The identifier is used to determine which module genesis information belongs -// to so it may be appropriately routed during init chain. -// Within this application default genesis information is retrieved from -// the ModuleBasicManager which populates json from each BasicModule -// object provided to it during init. -type GenesisState map[string]json.RawMessage - -// NewDefaultGenesisState generates the default state for gaia. -func NewDefaultGenesisState() GenesisState { - return ModuleBasics.DefaultGenesis() -} diff --git a/app/sim_test.go b/app/sim_test.go index 3ca6032..44668b4 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -14,26 +14,18 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/secp256k1" dbm "github.com/tendermint/tendermint/libs/db" "github.com/tendermint/tendermint/libs/log" - tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/auth/genaccounts" authsim "github.com/cosmos/cosmos-sdk/x/auth/simulation" "github.com/cosmos/cosmos-sdk/x/bank" - distr "github.com/cosmos/cosmos-sdk/x/distribution" distrsim "github.com/cosmos/cosmos-sdk/x/distribution/simulation" - "github.com/cosmos/cosmos-sdk/x/gov" govsim "github.com/cosmos/cosmos-sdk/x/gov/simulation" - "github.com/cosmos/cosmos-sdk/x/mint" paramsim "github.com/cosmos/cosmos-sdk/x/params/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/cosmos/cosmos-sdk/x/slashing" slashingsim "github.com/cosmos/cosmos-sdk/x/slashing/simulation" "github.com/cosmos/cosmos-sdk/x/staking" stakingsim "github.com/cosmos/cosmos-sdk/x/staking/simulation" @@ -76,38 +68,35 @@ func getSimulateFromSeedInput(tb testing.TB, w io.Writer, app *GaiaApp) ( testAndRunTxs(app), invariants(app), numBlocks, blockSize, commit, lean, onOperation } -func appStateFromGenesisFileFn( - r *rand.Rand, _ []simulation.Account, _ time.Time, -) (json.RawMessage, []simulation.Account, string) { +func appStateFn( + r *rand.Rand, accs []simulation.Account, genesisTimestamp time.Time, +) (appState json.RawMessage, simAccs []simulation.Account, chainID string) { - var genesis tmtypes.GenesisDoc cdc := MakeCodec() - bytes, err := ioutil.ReadFile(genesisFile) - if err != nil { - panic(err) + switch { + case paramsFile != "" && genesisFile != "": + panic("cannot provide both a genesis file and a params file") + + case genesisFile != "": + appState, simAccs, chainID = simapp.AppStateFromGenesisFileFn(r, accs, genesisTimestamp) + + case paramsFile != "": + appParams := make(simulation.AppParams) + bz, err := ioutil.ReadFile(paramsFile) + if err != nil { + panic(err) + } + + cdc.MustUnmarshalJSON(bz, &appParams) + appState, simAccs, chainID = appStateRandomizedFn(r, accs, genesisTimestamp, appParams) + + default: + appParams := make(simulation.AppParams) + appState, simAccs, chainID = appStateRandomizedFn(r, accs, genesisTimestamp, appParams) } - cdc.MustUnmarshalJSON(bytes, &genesis) - - var appState GenesisState - cdc.MustUnmarshalJSON(genesis.AppState, &appState) - - accounts := genaccounts.GetGenesisStateFromAppState(cdc, appState) - - var newAccs []simulation.Account - for _, acc := range accounts { - // Pick a random private key, since we don't know the actual key - // This should be fine as it's only used for mock Tendermint validators - // and these keys are never actually used to sign by mock Tendermint. - privkeySeed := make([]byte, 15) - r.Read(privkeySeed) - - privKey := secp256k1.GenPrivKeySecp256k1(privkeySeed) - newAccs = append(newAccs, simulation.Account{privKey, privKey.PubKey(), acc.Address}) - } - - return genesis.AppState, newAccs, genesis.ChainID + return appState, simAccs, chainID } // TODO refactor out random initialization code to the modules @@ -116,7 +105,7 @@ func appStateRandomizedFn( ) (json.RawMessage, []simulation.Account, string) { cdc := MakeCodec() - genesisState := NewDefaultGenesisState() + genesisState := simapp.NewDefaultGenesisState() var ( amount int64 @@ -142,14 +131,15 @@ func appStateRandomizedFn( `, amount, numInitiallyBonded, ) - genGenesisAccounts(cdc, r, accs, genesisTimestamp, amount, numInitiallyBonded, genesisState) - genAuthGenesisState(cdc, r, appParams, genesisState) - genBankGenesisState(cdc, r, appParams, genesisState) - genGovGenesisState(cdc, r, appParams, genesisState) - genMintGenesisState(cdc, r, appParams, genesisState) - genDistrGenesisState(cdc, r, appParams, genesisState) - stakingGen := genStakingGenesisState(cdc, r, accs, amount, numAccs, numInitiallyBonded, appParams, genesisState) - genSlashingGenesisState(cdc, r, stakingGen, appParams, genesisState) + simapp.GenGenesisAccounts(cdc, r, accs, genesisTimestamp, amount, numInitiallyBonded, genesisState) + simapp.GenAuthGenesisState(cdc, r, appParams, genesisState) + simapp.GenBankGenesisState(cdc, r, appParams, genesisState) + simapp.GenSupplyGenesisState(cdc, amount, numInitiallyBonded, int64(len(accs)), genesisState) + simapp.GenGovGenesisState(cdc, r, appParams, genesisState) + simapp.GenMintGenesisState(cdc, r, appParams, genesisState) + simapp.GenDistrGenesisState(cdc, r, appParams, genesisState) + stakingGen := simapp.GenStakingGenesisState(cdc, r, accs, amount, numAccs, numInitiallyBonded, appParams, genesisState) + simapp.GenSlashingGenesisState(cdc, r, stakingGen, appParams, genesisState) appState, err := MakeCodec().MarshalJSON(genesisState) if err != nil { @@ -159,417 +149,6 @@ func appStateRandomizedFn( return appState, accs, "simulation" } -func appStateFn( - r *rand.Rand, accs []simulation.Account, genesisTimestamp time.Time, -) (appState json.RawMessage, simAccs []simulation.Account, chainID string) { - - cdc := MakeCodec() - - switch { - case paramsFile != "" && genesisFile != "": - panic("cannot provide both a genesis file and a params file") - - case genesisFile != "": - appState, simAccs, chainID = appStateFromGenesisFileFn(r, accs, genesisTimestamp) - - case paramsFile != "": - appParams := make(simulation.AppParams) - bz, err := ioutil.ReadFile(paramsFile) - if err != nil { - panic(err) - } - - cdc.MustUnmarshalJSON(bz, &appParams) - appState, simAccs, chainID = appStateRandomizedFn(r, accs, genesisTimestamp, appParams) - - default: - appParams := make(simulation.AppParams) - appState, simAccs, chainID = appStateRandomizedFn(r, accs, genesisTimestamp, appParams) - } - - return appState, simAccs, chainID -} - -func genAuthGenesisState(cdc *codec.Codec, r *rand.Rand, ap simulation.AppParams, genesisState map[string]json.RawMessage) { - authGenesis := auth.NewGenesisState( - nil, - auth.NewParams( - func(r *rand.Rand) uint64 { - var v uint64 - ap.GetOrGenerate(cdc, simulation.MaxMemoChars, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.MaxMemoChars](r).(uint64) - }) - return v - }(r), - func(r *rand.Rand) uint64 { - var v uint64 - ap.GetOrGenerate(cdc, simulation.TxSigLimit, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.TxSigLimit](r).(uint64) - }) - return v - }(r), - func(r *rand.Rand) uint64 { - var v uint64 - ap.GetOrGenerate(cdc, simulation.TxSizeCostPerByte, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.TxSizeCostPerByte](r).(uint64) - }) - return v - }(r), - func(r *rand.Rand) uint64 { - var v uint64 - ap.GetOrGenerate(cdc, simulation.SigVerifyCostED25519, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.SigVerifyCostED25519](r).(uint64) - }) - return v - }(r), - func(r *rand.Rand) uint64 { - var v uint64 - ap.GetOrGenerate(cdc, simulation.SigVerifyCostSECP256K1, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.SigVerifyCostSECP256K1](r).(uint64) - }) - return v - }(r), - ), - ) - - fmt.Printf("Selected randomly generated auth parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, authGenesis.Params)) - genesisState[auth.ModuleName] = cdc.MustMarshalJSON(authGenesis) -} - -func genBankGenesisState(cdc *codec.Codec, r *rand.Rand, ap simulation.AppParams, genesisState map[string]json.RawMessage) { - bankGenesis := bank.NewGenesisState( - func(r *rand.Rand) bool { - var v bool - ap.GetOrGenerate(cdc, simulation.SendEnabled, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.SendEnabled](r).(bool) - }) - return v - }(r), - ) - - fmt.Printf("Selected randomly generated bank parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, bankGenesis)) - genesisState[bank.ModuleName] = cdc.MustMarshalJSON(bankGenesis) -} - -func genGenesisAccounts( - cdc *codec.Codec, r *rand.Rand, accs []simulation.Account, - genesisTimestamp time.Time, amount, numInitiallyBonded int64, - genesisState map[string]json.RawMessage, -) { - - var genesisAccounts []genaccounts.GenesisAccount - - // randomly generate some genesis accounts - for i, acc := range accs { - coins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(amount))} - bacc := auth.NewBaseAccountWithAddress(acc.Address) - bacc.SetCoins(coins) - - var gacc genaccounts.GenesisAccount - - // Only consider making a vesting account once the initial bonded validator - // set is exhausted due to needing to track DelegatedVesting. - if int64(i) > numInitiallyBonded && r.Intn(100) < 50 { - var ( - vacc auth.VestingAccount - endTime int64 - ) - - startTime := genesisTimestamp.Unix() - - // Allow for some vesting accounts to vest very quickly while others very slowly. - if r.Intn(100) < 50 { - endTime = int64(simulation.RandIntBetween(r, int(startTime), int(startTime+(60*60*24*30)))) - } else { - endTime = int64(simulation.RandIntBetween(r, int(startTime), int(startTime+(60*60*12)))) - } - - if startTime == endTime { - endTime++ - } - - if r.Intn(100) < 50 { - vacc = auth.NewContinuousVestingAccount(&bacc, startTime, endTime) - } else { - vacc = auth.NewDelayedVestingAccount(&bacc, endTime) - } - - var err error - gacc, err = genaccounts.NewGenesisAccountI(vacc) - if err != nil { - panic(err) - } - } else { - gacc = genaccounts.NewGenesisAccount(&bacc) - } - - genesisAccounts = append(genesisAccounts, gacc) - } - - genesisState[genaccounts.ModuleName] = cdc.MustMarshalJSON(genesisAccounts) -} - -func genGovGenesisState(cdc *codec.Codec, r *rand.Rand, ap simulation.AppParams, genesisState map[string]json.RawMessage) { - var vp time.Duration - ap.GetOrGenerate(cdc, simulation.VotingParamsVotingPeriod, &vp, r, - func(r *rand.Rand) { - vp = simulation.ModuleParamSimulator[simulation.VotingParamsVotingPeriod](r).(time.Duration) - }) - - govGenesis := gov.NewGenesisState( - uint64(r.Intn(100)), - gov.NewDepositParams( - func(r *rand.Rand) sdk.Coins { - var v sdk.Coins - ap.GetOrGenerate(cdc, simulation.DepositParamsMinDeposit, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.DepositParamsMinDeposit](r).(sdk.Coins) - }) - return v - }(r), - vp, - ), - gov.NewVotingParams(vp), - gov.NewTallyParams( - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.TallyParamsQuorum, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.TallyParamsQuorum](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.TallyParamsThreshold, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.TallyParamsThreshold](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.TallyParamsVeto, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.TallyParamsVeto](r).(sdk.Dec) - }) - return v - }(r), - ), - ) - - fmt.Printf("Selected randomly generated governance parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, govGenesis)) - genesisState[gov.ModuleName] = cdc.MustMarshalJSON(govGenesis) -} - -func genMintGenesisState(cdc *codec.Codec, r *rand.Rand, ap simulation.AppParams, genesisState map[string]json.RawMessage) { - mintGenesis := mint.NewGenesisState( - mint.InitialMinter( - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.Inflation, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.Inflation](r).(sdk.Dec) - }) - return v - }(r), - ), - mint.NewParams( - sdk.DefaultBondDenom, - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.InflationRateChange, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.InflationRateChange](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.InflationMax, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.InflationMax](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.InflationMin, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.InflationMin](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.GoalBonded, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.GoalBonded](r).(sdk.Dec) - }) - return v - }(r), - uint64(60*60*8766/5), - ), - ) - - fmt.Printf("Selected randomly generated minting parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, mintGenesis.Params)) - genesisState[mint.ModuleName] = cdc.MustMarshalJSON(mintGenesis) -} - -func genDistrGenesisState(cdc *codec.Codec, r *rand.Rand, ap simulation.AppParams, genesisState map[string]json.RawMessage) { - distrGenesis := distr.GenesisState{ - FeePool: distr.InitialFeePool(), - CommunityTax: func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.CommunityTax, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.CommunityTax](r).(sdk.Dec) - }) - return v - }(r), - BaseProposerReward: func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.BaseProposerReward, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.BaseProposerReward](r).(sdk.Dec) - }) - return v - }(r), - BonusProposerReward: func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.BonusProposerReward, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.BonusProposerReward](r).(sdk.Dec) - }) - return v - }(r), - } - - fmt.Printf("Selected randomly generated distribution parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, distrGenesis)) - genesisState[distr.ModuleName] = cdc.MustMarshalJSON(distrGenesis) -} - -func genSlashingGenesisState( - cdc *codec.Codec, r *rand.Rand, stakingGen staking.GenesisState, - ap simulation.AppParams, genesisState map[string]json.RawMessage, -) { - slashingGenesis := slashing.NewGenesisState( - slashing.NewParams( - stakingGen.Params.UnbondingTime, - func(r *rand.Rand) int64 { - var v int64 - ap.GetOrGenerate(cdc, simulation.SignedBlocksWindow, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.SignedBlocksWindow](r).(int64) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.MinSignedPerWindow, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.MinSignedPerWindow](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) time.Duration { - var v time.Duration - ap.GetOrGenerate(cdc, simulation.DowntimeJailDuration, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.DowntimeJailDuration](r).(time.Duration) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.SlashFractionDoubleSign, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.SlashFractionDoubleSign](r).(sdk.Dec) - }) - return v - }(r), - func(r *rand.Rand) sdk.Dec { - var v sdk.Dec - ap.GetOrGenerate(cdc, simulation.SlashFractionDowntime, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.SlashFractionDowntime](r).(sdk.Dec) - }) - return v - }(r), - ), - nil, - nil, - ) - - fmt.Printf("Selected randomly generated slashing parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, slashingGenesis.Params)) - genesisState[slashing.ModuleName] = cdc.MustMarshalJSON(slashingGenesis) -} - -func genStakingGenesisState( - cdc *codec.Codec, r *rand.Rand, accs []simulation.Account, amount, numAccs, numInitiallyBonded int64, - ap simulation.AppParams, genesisState map[string]json.RawMessage, -) staking.GenesisState { - - stakingGenesis := staking.NewGenesisState( - staking.InitialPool(), - staking.NewParams( - func(r *rand.Rand) time.Duration { - var v time.Duration - ap.GetOrGenerate(cdc, simulation.UnbondingTime, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.UnbondingTime](r).(time.Duration) - }) - return v - }(r), - func(r *rand.Rand) uint16 { - var v uint16 - ap.GetOrGenerate(cdc, simulation.MaxValidators, &v, r, - func(r *rand.Rand) { - v = simulation.ModuleParamSimulator[simulation.MaxValidators](r).(uint16) - }) - return v - }(r), - 7, - sdk.DefaultBondDenom, - ), - nil, - nil, - ) - - var ( - validators []staking.Validator - delegations []staking.Delegation - ) - - valAddrs := make([]sdk.ValAddress, numInitiallyBonded) - for i := 0; i < int(numInitiallyBonded); i++ { - valAddr := sdk.ValAddress(accs[i].Address) - valAddrs[i] = valAddr - - validator := staking.NewValidator(valAddr, accs[i].PubKey, staking.Description{}) - validator.Tokens = sdk.NewInt(amount) - validator.DelegatorShares = sdk.NewDec(amount) - delegation := staking.NewDelegation(accs[i].Address, valAddr, sdk.NewDec(amount)) - validators = append(validators, validator) - delegations = append(delegations, delegation) - } - - stakingGenesis.Pool.NotBondedTokens = sdk.NewInt((amount * numAccs) + (numInitiallyBonded * amount)) - stakingGenesis.Validators = validators - stakingGenesis.Delegations = delegations - - fmt.Printf("Selected randomly generated staking parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, stakingGenesis.Params)) - genesisState[staking.ModuleName] = cdc.MustMarshalJSON(stakingGenesis) - - return stakingGenesis -} - func testAndRunTxs(app *GaiaApp) []simulation.WeightedOperation { cdc := MakeCodec() ap := make(simulation.AppParams) @@ -593,7 +172,7 @@ func testAndRunTxs(app *GaiaApp) []simulation.WeightedOperation { }) return v }(nil), - authsim.SimulateDeductFee(app.accountKeeper, app.feeCollectionKeeper), + authsim.SimulateDeductFee(app.accountKeeper, app.supplyKeeper), }, { func(_ *rand.Rand) int { @@ -764,6 +343,11 @@ func testAndRunTxs(app *GaiaApp) []simulation.WeightedOperation { } func invariants(app *GaiaApp) []sdk.Invariant { + // TODO: fix PeriodicInvariants, it doesn't seem to call individual invariants for a period of 1 + // Ref: https://github.com/cosmos/cosmos-sdk/issues/4631 + if period == 1 { + return app.crisisKeeper.Invariants() + } return simulation.PeriodicInvariants(app.crisisKeeper.Invariants(), period, 0) } @@ -891,7 +475,7 @@ func TestAppImportExport(t *testing.T) { newApp := NewGaiaApp(log.NewNopLogger(), newDB, nil, true, 0, fauxMerkleModeOpt) require.Equal(t, "GaiaApp", newApp.Name()) - var genesisState GenesisState + var genesisState simapp.GenesisState err = app.cdc.UnmarshalJSON(appState, &genesisState) if err != nil { panic(err) @@ -917,7 +501,7 @@ func TestAppImportExport(t *testing.T) { {app.keySlashing, newApp.keySlashing, [][]byte{}}, {app.keyMint, newApp.keyMint, [][]byte{}}, {app.keyDistr, newApp.keyDistr, [][]byte{}}, - {app.keyFeeCollection, newApp.keyFeeCollection, [][]byte{}}, + {app.keySupply, newApp.keySupply, [][]byte{}}, {app.keyParams, newApp.keyParams, [][]byte{}}, {app.keyGov, newApp.keyGov, [][]byte{}}, } @@ -930,10 +514,7 @@ func TestAppImportExport(t *testing.T) { storeB := ctxB.KVStore(storeKeyB) kvA, kvB, count, equal := sdk.DiffKVStores(storeA, storeB, prefixes) fmt.Printf("Compared %d key/value pairs between %s and %s\n", count, storeKeyA, storeKeyB) - require.True(t, equal, - "unequal stores: %s / %s:\nstore A %X => %X\nstore B %X => %X", - storeKeyA, storeKeyB, kvA.Key, kvA.Value, kvB.Key, kvB.Value, - ) + require.True(t, equal, simapp.GetSimulationLog(storeKeyA.Name(), app.cdc, newApp.cdc, kvA, kvB)) } } @@ -1077,7 +658,7 @@ func BenchmarkInvariants(b *testing.B) { for _, cr := range app.crisisKeeper.Routes() { b.Run(fmt.Sprintf("%s/%s", cr.ModuleName, cr.Route), func(b *testing.B) { if err := cr.Invar(ctx); err != nil { - fmt.Println(err) + fmt.Printf("broken invariant at block %d of %d\n%s", ctx.BlockHeight()-1, numBlocks, err) b.FailNow() } }) diff --git a/app/test_util.go b/app/utils.go similarity index 82% rename from app/test_util.go rename to app/utils.go index 4f04c40..da1450c 100644 --- a/app/test_util.go +++ b/app/utils.go @@ -1,19 +1,22 @@ +//nolint package app import ( "io" - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tendermint/libs/db" + "github.com/tendermint/tendermint/libs/log" bam "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking" ) -// used for debugging by gaia/cmd/gaiadebug -// NOTE to not use this function with non-test code +// DONTCOVER + +// NewGaiaAppUNSAFE is used for debugging purposes only. +// +// NOTE: to not use this function with non-test code func NewGaiaAppUNSAFE(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, invCheckPeriod uint, baseAppOptions ...func(*bam.BaseApp), ) (gapp *GaiaApp, keyMain, keyStaking *sdk.KVStoreKey, stakingKeeper staking.Keeper) { diff --git a/cli_test/README.md b/cli_test/README.md index 857150c..67975c4 100644 --- a/cli_test/README.md +++ b/cli_test/README.md @@ -3,10 +3,9 @@ The gaia cli integration tests live in this folder. You can run the full suite by running: ```bash -$ go test -mod=readonly -p 4 `go list ./cmd/gaia/cli_test/...` -tags=cli_test -# OR! -$ make test_cli +go test -mod=readonly -p 4 `go list ./cli_test/...` -tags=cli_test ``` + > NOTE: While the full suite runs in parallel, some of the tests can take up to a minute to complete ### Test Structure @@ -33,6 +32,7 @@ func TestMyNewCommand(t *testing.T) { ``` This boilerplate above: + - Ensures the tests run in parallel. Because the tests are calling out to `os/exec` for many operations these tests can take a long time to run. - Creates `.gaiad` and `.gaiacli` folders in a new temp folder. - Uses `gaiacli` to create 2 accounts for use in testing: `foo` and `bar` diff --git a/cli_test/cli_test.go b/cli_test/cli_test.go index 43a8ec5..a31ad3f 100644 --- a/cli_test/cli_test.go +++ b/cli_test/cli_test.go @@ -25,7 +25,7 @@ import ( "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/auth/genaccounts" + "github.com/cosmos/cosmos-sdk/x/genaccounts" "github.com/cosmos/cosmos-sdk/x/gov" "github.com/cosmos/cosmos-sdk/x/mint" ) @@ -442,6 +442,23 @@ func TestGaiaCLIQueryRewards(t *testing.T) { f.Cleanup() } +func TestGaiaCLIQuerySupply(t *testing.T) { + t.Parallel() + f := InitFixtures(t) + + // start gaiad server + proc := f.GDStart() + defer proc.Stop(false) + + totalSupply := f.QueryTotalSupply() + totalSupplyOf := f.QueryTotalSupplyOf(fooDenom) + + require.Equal(t, totalCoins, totalSupply) + require.True(sdk.IntEq(t, totalCoins.AmountOf(fooDenom), totalSupplyOf)) + + f.Cleanup() +} + func TestGaiaCLISubmitProposal(t *testing.T) { t.Parallel() f := InitFixtures(t) diff --git a/cli_test/test_helpers.go b/cli_test/test_helpers.go index 71feda4..d14f01e 100644 --- a/cli_test/test_helpers.go +++ b/cli_test/test_helpers.go @@ -23,6 +23,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" @@ -45,16 +46,23 @@ const ( ) var ( - startCoins = sdk.Coins{ - sdk.NewCoin(feeDenom, sdk.TokensFromConsensusPower(1000000)), + totalCoins = sdk.NewCoins( + sdk.NewCoin(fee2Denom, sdk.TokensFromConsensusPower(2000000)), + sdk.NewCoin(feeDenom, sdk.TokensFromConsensusPower(2000000)), + sdk.NewCoin(fooDenom, sdk.TokensFromConsensusPower(2000)), + sdk.NewCoin(denom, sdk.TokensFromConsensusPower(300).Add(sdk.NewInt(12))), // add coins from inflation + ) + + startCoins = sdk.NewCoins( sdk.NewCoin(fee2Denom, sdk.TokensFromConsensusPower(1000000)), + sdk.NewCoin(feeDenom, sdk.TokensFromConsensusPower(1000000)), sdk.NewCoin(fooDenom, sdk.TokensFromConsensusPower(1000)), sdk.NewCoin(denom, sdk.TokensFromConsensusPower(150)), - } + ) - vestingCoins = sdk.Coins{ + vestingCoins = sdk.NewCoins( sdk.NewCoin(feeDenom, sdk.TokensFromConsensusPower(500000)), - } + ) ) //___________________________________________________________________________________ @@ -112,12 +120,12 @@ func (f Fixtures) GenesisFile() string { } // GenesisFile returns the application's genesis state -func (f Fixtures) GenesisState() app.GenesisState { +func (f Fixtures) GenesisState() simapp.GenesisState { cdc := codec.New() genDoc, err := tmtypes.GenesisDocFromFile(f.GenesisFile()) require.NoError(f.T, err) - var appState app.GenesisState + var appState simapp.GenesisState require.NoError(f.T, cdc.UnmarshalJSON(genDoc.AppState, &appState)) return appState } @@ -643,9 +651,9 @@ func (f *Fixtures) QuerySlashingParams() slashing.Params { //___________________________________________________________________________________ // query distribution -// QuerySigningInfo returns the signing info for a validator +// QueryRewards returns the rewards of a delegator func (f *Fixtures) QueryRewards(delAddr sdk.AccAddress, flags ...string) distribution.QueryDelegatorTotalRewardsResponse { - cmd := fmt.Sprintf("%s query distr rewards %s %s", f.GaiacliBinary, delAddr, f.Flags()) + cmd := fmt.Sprintf("%s query distribution rewards %s %s", f.GaiacliBinary, delAddr, f.Flags()) res, errStr := tests.ExecuteT(f.T, cmd, "") require.Empty(f.T, errStr) cdc := app.MakeCodec() @@ -655,6 +663,32 @@ func (f *Fixtures) QueryRewards(delAddr sdk.AccAddress, flags ...string) distrib return rewards } +//___________________________________________________________________________________ +// query supply + +// QueryTotalSupply returns the total supply of coins +func (f *Fixtures) QueryTotalSupply(flags ...string) (totalSupply sdk.Coins) { + cmd := fmt.Sprintf("%s query supply total %s", f.GaiacliBinary, f.Flags()) + res, errStr := tests.ExecuteT(f.T, cmd, "") + require.Empty(f.T, errStr) + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(res), &totalSupply) + require.NoError(f.T, err) + return totalSupply +} + +// QueryTotalSupplyOf returns the total supply of a given coin denom +func (f *Fixtures) QueryTotalSupplyOf(denom string, flags ...string) sdk.Int { + cmd := fmt.Sprintf("%s query supply total %s %s", f.GaiacliBinary, denom, f.Flags()) + res, errStr := tests.ExecuteT(f.T, cmd, "") + require.Empty(f.T, errStr) + cdc := app.MakeCodec() + var supplyOf sdk.Int + err := cdc.UnmarshalJSON([]byte(res), &supplyOf) + require.NoError(f.T, err) + return supplyOf +} + //___________________________________________________________________________________ // executors diff --git a/cmd/gaiacli/main.go b/cmd/gaiacli/main.go index 8fa636b..6d94f7a 100644 --- a/cmd/gaiacli/main.go +++ b/cmd/gaiacli/main.go @@ -92,7 +92,7 @@ func queryCmd(cdc *amino.Codec) *cobra.Command { client.LineBreak, rpc.ValidatorCommand(cdc), rpc.BlockCommand(), - authcmd.QueryTxsByTagsCmd(cdc), + authcmd.QueryTxsByEventsCmd(cdc), authcmd.QueryTxCmd(cdc), client.LineBreak, ) diff --git a/cmd/gaiad/main.go b/cmd/gaiad/main.go index 808970c..7a03f8e 100644 --- a/cmd/gaiad/main.go +++ b/cmd/gaiad/main.go @@ -20,8 +20,8 @@ import ( "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth/genaccounts" - genaccscli "github.com/cosmos/cosmos-sdk/x/auth/genaccounts/client/cli" + "github.com/cosmos/cosmos-sdk/x/genaccounts" + genaccscli "github.com/cosmos/cosmos-sdk/x/genaccounts/client/cli" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" "github.com/cosmos/cosmos-sdk/x/staking" ) diff --git a/cmd/gaiad/testnet.go b/cmd/gaiad/testnet.go index fcf8433..eb4abc2 100644 --- a/cmd/gaiad/testnet.go +++ b/cmd/gaiad/testnet.go @@ -26,7 +26,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/auth/genaccounts" + "github.com/cosmos/cosmos-sdk/x/genaccounts" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/staking" ) diff --git a/docs/delegator-guide-cli.md b/docs/delegator-guide-cli.md index 7db8059..59e8d87 100644 --- a/docs/delegator-guide-cli.md +++ b/docs/delegator-guide-cli.md @@ -314,7 +314,7 @@ gaiacli query staking delegations gaiacli query staking delegation // query the rewards of a delegator given a delegator address (e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) -gaiacli query distr rewards +gaiacli query distribution rewards // query all proposals currently open for depositing gaiacli query gov proposals --status deposit_period @@ -408,7 +408,7 @@ gaiacli tx staking redelegate =0.025uatom -gaiacli tx distr withdraw-all-rewards --from --gas auto --gas-adjustment 1.5 --gas-prices +gaiacli tx distribution withdraw-all-rewards --from --gas auto --gas-adjustment 1.5 --gas-prices // Unbond a certain amount of Atoms from a given validator diff --git a/docs/gaiacli.md b/docs/gaiacli.md index ae642de..502d7c4 100644 --- a/docs/gaiacli.md +++ b/docs/gaiacli.md @@ -733,7 +733,7 @@ gaiacli query gov param deposit To check the current distribution parameters, run: ```bash -gaiacli query distr params +gaiacli query distribution params ``` #### Query distribution Community Pool @@ -741,7 +741,7 @@ gaiacli query distr params To query all coins in the community pool which is under Governance control: ```bash -gaiacli query distr community-pool +gaiacli query distribution community-pool ``` #### Query outstanding rewards @@ -749,7 +749,7 @@ gaiacli query distr community-pool To check the current outstanding (un-withdrawn) rewards, run: ```bash -gaiacli query distr outstanding-rewards +gaiacli query distribution outstanding-rewards ``` #### Query Validator Commission @@ -757,7 +757,7 @@ gaiacli query distr outstanding-rewards To check the current outstanding commission for a validator, run: ```bash -gaiacli query distr commission +gaiacli query distribution commission ``` #### Query Validator Slashes @@ -765,7 +765,7 @@ gaiacli query distr commission To check historical slashes for a validator, run: ```bash -gaiacli query distr slashes +gaiacli query distribution slashes ``` #### Query Delegator Rewards @@ -773,7 +773,7 @@ gaiacli query distr slashes To check current rewards for a delegation (were they to be withdrawn), run: ```bash -gaiacli query distr rewards +gaiacli query distribution rewards ``` #### Query All Delegator Rewards @@ -781,7 +781,7 @@ gaiacli query distr rewards To check all current rewards for a delegation (were they to be withdrawn), run: ```bash -gaiacli query distr rewards +gaiacli query distribution rewards ``` ### Multisig Transactions diff --git a/docs/genesis-state.md b/docs/genesis-state.md index 727944f..fdd2628 100644 --- a/docs/genesis-state.md +++ b/docs/genesis-state.md @@ -14,7 +14,7 @@ type GenesisState struct { BankData bank.GenesisState `json:"bank"` StakingData staking.GenesisState `json:"staking"` MintData mint.GenesisState `json:"mint"` - DistrData distr.GenesisState `json:"distr"` + DistrData distr.GenesisState `json:"distribution"` GovData gov.GenesisState `json:"gov"` SlashingData slashing.GenesisState `json:"slashing"` GenTxs []json.RawMessage `json:"gentxs"` diff --git a/docs/genesis.md b/docs/genesis.md index c361ce3..163c969 100644 --- a/docs/genesis.md +++ b/docs/genesis.md @@ -201,10 +201,10 @@ Let us break down the parameters: ### Distribution -The `distr` module handles the logic of distribution block provisions and fees to validators and delegators. The `distr` section in the genesis file looks like the follwing: +The `distribution` module handles the logic of distribution block provisions and fees to validators and delegators. The `distribution` section in the genesis file looks like the follwing: ```json - "distr": { + "distribution": { "fee_pool": { "community_pool": null }, @@ -235,8 +235,8 @@ Let us break down the parameters: - `previous_proposer`: Proposer of the previous block. Set to `""` if genesis was not exported from previous state. - `outstanding_rewards`: Outstanding (un-withdrawn) rewards. Set to `null` if genesis was not exported from previous state. - `validator_accumulated_commission`: Outstanding (un-withdrawn) commission of validators. Set to `null` if genesis was not exported from previous state. -- `validator_historical_rewards`: Set of information related to the historical rewards of validators and used by the `distr` module for various computation. Set to `null` if genesis was not exported from previous state. -- `validators_current_rewards`: Set of information related to the current rewards of validators and used by the `distr` module for various computation. Set to `null` if genesis was not exported from previous state. +- `validator_historical_rewards`: Set of information related to the historical rewards of validators and used by the `distribution` module for various computation. Set to `null` if genesis was not exported from previous state. +- `validators_current_rewards`: Set of information related to the current rewards of validators and used by the `distribution` module for various computation. Set to `null` if genesis was not exported from previous state. - `delegator_starting_infos`: Tracks the previous validator period, the delegation's amount of staking token, and the creation height (to check later on if any slashes have occurred). Set to `null` if genesis was not exported from previous state. - `validator_slash_events`: Set of information related to the past slashing of validators. Set to `null` if genesis was not exported from previous state. diff --git a/docs/translations/cn/delegator-guide-cli.md b/docs/translations/cn/delegator-guide-cli.md index ed04163..72985f4 100644 --- a/docs/translations/cn/delegator-guide-cli.md +++ b/docs/translations/cn/delegator-guide-cli.md @@ -347,7 +347,7 @@ gaiacli query staking delegations gaiacli query staking delegation // 查询一个指定地址的委托人(e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg)所能获得的奖励情况 -gaiacli query distr rewards +gaiacli query distribution rewards // 查询所有现在正等待抵押的提案 gaiacli query gov proposals --status deposit_period @@ -407,7 +407,7 @@ gaiacli tx staking delegate --from =1000uatom -gaiacli tx distr withdraw-all-rewards --from --gas auto --gas-prices +gaiacli tx distribution withdraw-all-rewards --from --gas auto --gas-prices // 向指定验证人申请解绑一定数量的Atom通证 diff --git a/docs/translations/cn/gaiacli.md b/docs/translations/cn/gaiacli.md index 7b0f909..08ccf14 100644 --- a/docs/translations/cn/gaiacli.md +++ b/docs/translations/cn/gaiacli.md @@ -680,7 +680,7 @@ gaiacli query gov param deposit 查询当前的分配参数: ```bash -gaiacli query distr params +gaiacli query distribution params ``` #### 查询 @@ -688,7 +688,7 @@ gaiacli query distr params 查询当前未结算的(未提取)的奖励: ```bash -gaiacli query distr outstanding-rewards +gaiacli query distribution outstanding-rewards ``` #### 查询验证人佣金 @@ -696,7 +696,7 @@ gaiacli query distr outstanding-rewards 查询对一个验证人的未结算的佣金: ```bash -gaiacli query distr commission +gaiacli query distribution commission ``` #### 查询验证人的削减处罚 @@ -704,7 +704,7 @@ gaiacli query distr commission 查询一个验证人的处罚历史记录: ```bash -gaiacli query distr slashes +gaiacli query distribution slashes ``` #### 查询委托人奖励 @@ -712,7 +712,7 @@ gaiacli query distr slashes 查询某笔委托当前的奖励(如果要取回): ```bash -gaiacli query distr rewards +gaiacli query distribution rewards ``` #### 查询所有的委托人奖励 @@ -720,7 +720,7 @@ gaiacli query distr rewards 要查询委托人的所有当前奖励(如果要取回),请运行: ```bash -gaiacli query distr rewards +gaiacli query distribution rewards ``` ### 多签交易 diff --git a/docs/translations/cn/genesis-state.md b/docs/translations/cn/genesis-state.md index 9defaee..168d434 100644 --- a/docs/translations/cn/genesis-state.md +++ b/docs/translations/cn/genesis-state.md @@ -11,7 +11,7 @@ type GenesisState struct { BankData bank.GenesisState `json:"bank"` StakingData staking.GenesisState `json:"staking"` MintData mint.GenesisState `json:"mint"` - DistrData distr.GenesisState `json:"distr"` + DistrData distr.GenesisState `json:"distribution"` GovData gov.GenesisState `json:"gov"` SlashingData slashing.GenesisState `json:"slashing"` GenTxs []json.RawMessage `json:"gentxs"` diff --git a/docs/translations/cn/genesis.md b/docs/translations/cn/genesis.md index 49ad533..1169390 100644 --- a/docs/translations/cn/genesis.md +++ b/docs/translations/cn/genesis.md @@ -201,10 +201,10 @@ gaiad add-genesis-account ### 分配(Distribution) -`distr`模块处理每个块中发给验证人和委托人的挖矿及手续费的分配逻辑。 创世文件中的`distr`部分如下所示: +`distribution`模块处理每个块中发给验证人和委托人的挖矿及手续费的分配逻辑。 创世文件中的`distribution`部分如下所示: ```json - "distr": { + "distribution": { "fee_pool": { "community_pool": null }, @@ -235,8 +235,8 @@ gaiad add-genesis-account - `previous_proposer`: 上一个块的提议者, 如果没有从之前的状态导出,则设置为""。 - `outstanding_rewards`: 未付(未提取)奖励。如果没有从之前的状态导出,设置为`null`。 - `validator_accumulated_commission`: 未付(未提取)验证人佣金。如果没有从之前的状态导出,设置为`null`。 -- `validator_historical_rewards`: 验证人的历史奖励相关的信息,由`distr`模块用于各种计算。 如果没有从之前的状态导出,设置为`null`。 -- `validators_current_rewards`: 验证人的当前奖励相关的信息,由`distr`模块用于各种计算。 如果没有从之前的状态导出,设置为`null`。 +- `validator_historical_rewards`: 验证人的历史奖励相关的信息,由`distribution`模块用于各种计算。 如果没有从之前的状态导出,设置为`null`。 +- `validators_current_rewards`: 验证人的当前奖励相关的信息,由`distribution`模块用于各种计算。 如果没有从之前的状态导出,设置为`null`。 - `delegator_starting_infos`: Tracks the previous validator period, the delegation's amount of staking token, and the creation height (to check later on if any slashes have occurred). 跟踪先前的验证人时期,委托的 token 数量和创建高度(稍后检查是否发生了需要惩罚的事件)。 如果没有从之前的状态导出,设置为`null`。 - `validator_slash_events`: Set of information related to the past slashing of validators. Set to `null` if genesis was not exported from previous state. 过往验证人惩罚事件相关的信息集。 如果没有从之前的状态导出,设置为`null`。 diff --git a/docs/translations/kr/delegator-guide-cli.md b/docs/translations/kr/delegator-guide-cli.md index f36adeb..7f6000a 100644 --- a/docs/translations/kr/delegator-guide-cli.md +++ b/docs/translations/kr/delegator-guide-cli.md @@ -43,7 +43,6 @@ CLI를 사용하는 위임자는 매우 실험적인 블록체인 기술이 사 모든 코스모스 계정에는 12개 또는 24개의 단어로 이루어진 '시드(Seed)'가 할당됩니다. 이 시드 단어(또는 시드 키)를 기반으로 다수의 코스모스 계정을 생성할 수 있습니다 (예를들어: 다수의 프라이빗 키/퍼블릭 키 쌍). 이런 형태의 월렛은 HD(Hierarchical deterministic) 월렛이라고 불립니다 (HD 월렛에 대한 자세한 정보는 [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)를 참고하세요). - ``` 계정 0 계정 1 계정 2 @@ -76,6 +75,7 @@ CLI를 사용하는 위임자는 매우 실험적인 블록체인 기술이 사 | | +-------------------+ ``` + 특정 계좌에 보관된 자산은 프라이빗 키에 의해 관리됩니다. 이 프라이빗 키는 시드의 일방적 기능(one-way function)을 통해 생성됩니다. 프라이빗 키를 분실한 경우, 시드 키를 사용하여 프라이빗 키를 다시 복구하는 것이 가능합니다. 하지만 시드 키를 분실한 경우, 모든 프라이빗 키에 대한 사용권을 잃게 됩니다. 누군가 본인의 시드 키를 가진 경우, 해당 키와 연관된 모든 계정의 소유권을 가진 것과 동일합니다. ::: warning @@ -277,7 +277,7 @@ gaiacli query delegations <위임자 주소(delegatorAddress)> gaiacli query delegations <위임자 주소(delegatorAddress)> <검증인 주소(validatorAddress)> // 위임자 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 위임자 리워드 조회 -gaiacli query distr rewards <위임자 주소(delegatorAddress)> +gaiacli query distribution rewards <위임자 주소(delegatorAddress)> // 예치금(deposit)을 대기중인 모든 프로포절 조회 gaiacli query proposals --status deposit_period @@ -340,7 +340,7 @@ gaiacli tx staking --amount <위임할 수량(amountToBond)> --validator <검증 // 리워드 수령하기 -gaiacli tx distr withdraw-rewards --from <위임자 키 명칭(delegatorKeyName)> +gaiacli tx distribution withdraw-rewards --from <위임자 키 명칭(delegatorKeyName)> ``` ::: tip diff --git a/docs/translations/kr/gaiacli.md b/docs/translations/kr/gaiacli.md index 5465237..481a025 100755 --- a/docs/translations/kr/gaiacli.md +++ b/docs/translations/kr/gaiacli.md @@ -610,7 +610,7 @@ gaiacli query gov param deposit 현재 리워드 분배 파라미터 값을 조회하기 위해서는: ```bash -gaiacli query distr params +gaiacli query distribution params ``` #### 수령되지 않은 리워드를 받기 @@ -618,7 +618,7 @@ gaiacli query distr params 수령하지 않은 리워드를 수령하기 위해서는: ```bash -gaiacli query distr outstanding-rewards +gaiacli query distribution outstanding-rewards ``` #### 검증인 커미션 조회 @@ -626,7 +626,7 @@ gaiacli query distr outstanding-rewards 특정 검증인의 커미션을 조회하기 위해서는: ```bash -gaiacli query distr commission +gaiacli query distribution commission ``` #### 검증인 슬래싱 조회 @@ -634,7 +634,7 @@ gaiacli query distr commission 특정 검증인의 슬래싱 기록을 조회하기 위해서는: ```bash -gaiacli query distr slashes +gaiacli query distribution slashes ``` #### 특정 검증인에서 수령되지 않은 리워드 조회 @@ -642,7 +642,7 @@ gaiacli query distr slashes +gaiacli query distribution rewards ``` #### 위임자의 수령 대기중인 모든 리워드 조회 @@ -650,7 +650,7 @@ gaiacli query distr rewards +gaiacli query distribution rewards ``` ### 멀티시그 트랜잭션 diff --git a/go.mod b/go.mod index 190d8d9..4196464 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,13 @@ module github.com/cosmos/gaia go 1.12 require ( - github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c // indirect - github.com/cosmos/cosmos-sdk v0.28.2-0.20190626164114-c898dac6a9fc + github.com/btcsuite/btcd v0.0.0-20190629003639-c26ffa870fd8 // indirect + github.com/cosmos/cosmos-sdk v0.28.2-0.20190705123402-2fdbf631e763 github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d // indirect - github.com/gorilla/mux v1.7.2 // indirect + github.com/etcd-io/bbolt v1.3.3 // indirect + github.com/go-kit/kit v0.9.0 // indirect + github.com/golang/mock v1.3.1 // indirect + github.com/gorilla/mux v1.7.3 // indirect github.com/magiconair/properties v1.8.1 // indirect github.com/mattn/go-isatty v0.0.8 // indirect github.com/onsi/ginkgo v1.8.0 // indirect @@ -15,10 +18,10 @@ require ( github.com/otiai10/curr v0.0.0-20190513014714-f5a3d24e5776 // indirect github.com/pelletier/go-toml v1.4.0 // indirect github.com/pkg/errors v0.8.1 - github.com/prometheus/common v0.4.1 // indirect - github.com/prometheus/procfs v0.0.0-20190523193104-a7aeb8df3389 // indirect + github.com/prometheus/common v0.6.0 // indirect + github.com/prometheus/procfs v0.0.3 // indirect github.com/rakyll/statik v0.1.6 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect + github.com/rcrowley/go-metrics v0.0.0-20190704165056-9c2d0518ed81 // indirect github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/afero v1.2.2 // indirect github.com/spf13/cobra v0.0.5 @@ -27,11 +30,13 @@ require ( github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tendermint/go-amino v0.15.0 github.com/tendermint/tendermint v0.32.0 - golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f // indirect - golang.org/x/sys v0.0.0-20190527104216-9cd6430ef91e // indirect + golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect + golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect + golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb // indirect golang.org/x/text v0.3.2 // indirect google.golang.org/appengine v1.4.0 // indirect - google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69 // indirect + google.golang.org/genproto v0.0.0-20190701230453-710ae3a149df // indirect + google.golang.org/grpc v1.22.0 // indirect ) replace golang.org/x/crypto => github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5 diff --git a/go.sum b/go.sum index d29a20a..3e40513 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c h1:aEbSeNALREWXk0G7UdNhR3ayBV7tZ4M2PNmnrCAph6Q= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190629003639-c26ffa870fd8 h1:mOg8/RgDSHTQ1R0IR+LMDuW4TDShPv+JzYHuR4GLoNA= +github.com/btcsuite/btcd v0.0.0-20190629003639-c26ffa870fd8/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= @@ -37,8 +37,8 @@ github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8Nz github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/cosmos-sdk v0.28.2-0.20190626164114-c898dac6a9fc h1:7xWMlVQdgCd/zLYLDKPFKWFu+AsCTyfvoL6gXNjdi8M= -github.com/cosmos/cosmos-sdk v0.28.2-0.20190626164114-c898dac6a9fc/go.mod h1:60lRWFK7DUes/k5FIyDeE+3rS2Q0/wHek/ep6SLUUow= +github.com/cosmos/cosmos-sdk v0.28.2-0.20190705123402-2fdbf631e763 h1:25yfmbpVGN0+5yijzd4XhAMx0tJ/y5Jrec0gRqczjuA= +github.com/cosmos/cosmos-sdk v0.28.2-0.20190705123402-2fdbf631e763/go.mod h1:ngmaRot5kvm4Op0NBgOgbOTWJOKw9cM2qAXv0DUs94Q= github.com/cosmos/go-bip39 v0.0.0-20180618194314-52158e4697b8/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -55,6 +55,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/etcd-io/bbolt v1.3.2 h1:RLRQ0TKLX7DlBRXAJHvbmXL17Q3KNnTBtZ9B6Qo+/Y0= github.com/etcd-io/bbolt v1.3.2/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= @@ -64,6 +66,8 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/go-kit/kit v0.6.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -78,6 +82,8 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1-0.20190508161146-9fa652df1129 h1:tT8iWCYw4uOem71yYA3htfH+LNopJvcqZQshm56G5L4= github.com/golang/mock v1.3.1-0.20190508161146-9fa652df1129/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= @@ -87,12 +93,13 @@ github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -110,6 +117,7 @@ github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -122,8 +130,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5/go.mod h1:c2mYKRyMb1BPkO5St0c/ps62L4S0W2NAkaTXj9qEI+0= -github.com/lusis/slack-test v0.0.0-20190426140909-c40012f20018/go.mod h1:sFlOUpQL1YcjhFVXhg1CG8ZASEs/Mf1oVb6H75JL/zg= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -135,8 +141,9 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nlopes/slack v0.5.0/go.mod h1:jVI4BBK3lSktibKahxBF74txcK2vyvkza1z/+rRnVAM= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -165,6 +172,8 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -175,19 +184,22 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190227231451-bbced9601137/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190523193104-a7aeb8df3389 h1:F/k2nob1S9M6v5Xkq7KjSTQirOYaYQord0jR4TwyVmY= -github.com/prometheus/procfs v0.0.0-20190523193104-a7aeb8df3389/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.4/go.mod h1:OEi9wJV/fMUAGx1eNjq75DKDsJVuEv1U0oYdX6GX8Zs= github.com/rakyll/statik v0.1.6 h1:uICcfUXpgqtw2VopbIncslhAmE5hwc4g20TEyEENBNs= github.com/rakyll/statik v0.1.6/go.mod h1:OEi9wJV/fMUAGx1eNjq75DKDsJVuEv1U0oYdX6GX8Zs= github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20190704165056-9c2d0518ed81 h1:zQTtDd7fQiF9e80lbl+ShnD9/5NSq5r1EhcS8955ECg= +github.com/rcrowley/go-metrics v0.0.0-20190704165056-9c2d0518ed81/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -261,6 +273,9 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -275,8 +290,8 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190527104216-9cd6430ef91e h1:Pzdi8HRppinixnWWzN6KSa0QkBM+GKsTJaWwwfJskNw= -golang.org/x/sys v0.0.0-20190527104216-9cd6430ef91e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -287,17 +302,20 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69 h1:4rNOqY4ULrKzS6twXa619uQgI7h9PaVd4ZhjFQ7C5zs= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190701230453-710ae3a149df h1:k3DT34vxk64+4bD5x+fRy6U0SXxZehzUHRSYUJcKfII= +google.golang.org/genproto v0.0.0-20190701230453-710ae3a149df/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/grpc v1.13.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= @@ -312,3 +330,4 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/lcd_test/helpers.go b/lcd_test/helpers.go index 6fb05ef..e685caf 100644 --- a/lcd_test/helpers.go +++ b/lcd_test/helpers.go @@ -15,16 +15,18 @@ import ( "github.com/cosmos/cosmos-sdk/codec" crkeys "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" - "github.com/cosmos/cosmos-sdk/x/auth/genaccounts" "github.com/cosmos/cosmos-sdk/x/crisis" distr "github.com/cosmos/cosmos-sdk/x/distribution" + "github.com/cosmos/cosmos-sdk/x/genaccounts" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/mint" "github.com/cosmos/cosmos-sdk/x/staking" + "github.com/cosmos/cosmos-sdk/x/supply" "github.com/pkg/errors" "github.com/spf13/viper" @@ -151,6 +153,8 @@ func defaultGenesis(config *tmcfg.Config, nValidators int, initAddrs []sdk.AccAd var genTxs []auth.StdTx var accs []genaccounts.GenesisAccount + totalSupply := sdk.ZeroInt() + for i := 0; i < nValidators; i++ { operPrivKey := secp256k1.GenPrivKey() operAddr := operPrivKey.PubKey().Address() @@ -187,11 +191,13 @@ func defaultGenesis(config *tmcfg.Config, nValidators int, initAddrs []sdk.AccAd accAuth := auth.NewBaseAccountWithAddress(sdk.AccAddress(operAddr)) accTokens := sdk.TokensFromConsensusPower(150) - accAuth.Coins = sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, accTokens)} + totalSupply = totalSupply.Add(accTokens) + + accAuth.Coins = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, accTokens)) accs = append(accs, genaccounts.NewGenesisAccount(&accAuth)) } - genesisState := gapp.NewDefaultGenesisState() + genesisState := simapp.NewDefaultGenesisState() genDoc.AppState, err = cdc.MarshalJSON(genesisState) if err != nil { return @@ -212,10 +218,19 @@ func defaultGenesis(config *tmcfg.Config, nValidators int, initAddrs []sdk.AccAd accAuth := auth.NewBaseAccountWithAddress(addr) accTokens := sdk.TokensFromConsensusPower(100) accAuth.Coins = sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, accTokens)} + totalSupply = totalSupply.Add(accTokens) acc := genaccounts.NewGenesisAccount(&accAuth) accs = append(accs, acc) } + // supply data + supplyDataBz := genesisState[supply.ModuleName] + var supplyData supply.GenesisState + cdc.MustUnmarshalJSON(supplyDataBz, &supplyData) + supplyData.Supply.Total = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, totalSupply)) + supplyDataBz = cdc.MustMarshalJSON(supplyData) + genesisState[supply.ModuleName] = supplyDataBz + // distr data distrDataBz := genesisState[distr.ModuleName] var distrData distr.GenesisState @@ -223,12 +238,6 @@ func defaultGenesis(config *tmcfg.Config, nValidators int, initAddrs []sdk.AccAd distrData.FeePool.CommunityPool = sdk.DecCoins{sdk.DecCoin{Denom: "test", Amount: sdk.NewDecFromInt(sdk.NewInt(10))}} distrDataBz = cdc.MustMarshalJSON(distrData) genesisState[distr.ModuleName] = distrDataBz - - // now add the account tokens to the non-bonded pool - for _, acc := range accs { - accTokens := acc.Coins.AmountOf(sdk.DefaultBondDenom) - stakingData.Pool.NotBondedTokens = stakingData.Pool.NotBondedTokens.Add(accTokens) - } genesisState[staking.ModuleName] = cdc.MustMarshalJSON(stakingData) genesisState[genaccounts.ModuleName] = cdc.MustMarshalJSON(accs) diff --git a/lcd_test/helpers_test.go b/lcd_test/helpers_test.go index 35fdc83..54a854a 100644 --- a/lcd_test/helpers_test.go +++ b/lcd_test/helpers_test.go @@ -265,14 +265,12 @@ func deleteKey(t *testing.T, port, name, password string) { } // GET /auth/accounts/{address} Get the account information on blockchain -func getAccount(t *testing.T, port string, addr sdk.AccAddress) auth.Account { +func getAccount(t *testing.T, port string, addr sdk.AccAddress) (acc auth.Account) { res, body := Request(t, port, "GET", fmt.Sprintf("/auth/accounts/%s", addr.String()), nil) require.Equal(t, http.StatusOK, res.StatusCode, body) - - var acc authrest.AccountWithHeight require.Nil(t, cdc.UnmarshalJSON([]byte(body), &acc)) - return acc.Account + return acc } // ---------------------------------------------------------------------- diff --git a/lcd_test/lcd_test.go b/lcd_test/lcd_test.go index 73d3551..5411250 100644 --- a/lcd_test/lcd_test.go +++ b/lcd_test/lcd_test.go @@ -30,7 +30,6 @@ import ( disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/gov" "github.com/cosmos/cosmos-sdk/x/slashing" - "github.com/cosmos/cosmos-sdk/x/staking" ) const ( @@ -381,36 +380,6 @@ func TestTxs(t *testing.T) { require.Equal(t, http.StatusInternalServerError, res.StatusCode) } -func TestPoolParamsQuery(t *testing.T) { - kb, err := keys.NewKeyBaseFromDir(InitClientHome("")) - require.NoError(t, err) - addr, _, err := CreateAddr(name1, pw, kb) - require.NoError(t, err) - cleanup, _, _, port, err := InitializeLCD(1, []sdk.AccAddress{addr}, true) - require.NoError(t, err) - defer cleanup() - - defaultParams := staking.DefaultParams() - - params := getStakingParams(t, port) - require.True(t, defaultParams.Equal(params)) - - pool := getStakingPool(t, port) - - initialPool := staking.InitialPool() - tokens := sdk.TokensFromConsensusPower(100) - freeTokens := sdk.TokensFromConsensusPower(50) - initialPool.NotBondedTokens = initialPool.NotBondedTokens.Add(tokens) - initialPool.BondedTokens = initialPool.BondedTokens.Add(tokens) // Delegate tx on GaiaAppGenState - initialPool.NotBondedTokens = initialPool.NotBondedTokens.Add(freeTokens) - - require.Equal(t, initialPool.BondedTokens, pool.BondedTokens) - - //TODO include this test once REST for distribution is online, need to include distribution tokens from inflation - // for this equality to make sense - //require.Equal(t, initialPool.NotBondedTokens, pool.NotBondedTokens) -} - func TestValidatorsQuery(t *testing.T) { cleanup, valPubKeys, operAddrs, port, err := InitializeLCD(1, []sdk.AccAddress{}, true) require.NoError(t, err) @@ -1174,7 +1143,7 @@ func TestAccountBalanceQuery(t *testing.T) { // empty account res, body := Request(t, port, "GET", fmt.Sprintf("/auth/accounts/%s", someFakeAddr), nil) require.Equal(t, http.StatusOK, res.StatusCode, body) - require.Contains(t, body, `"type":"auth/Account"`) + require.Contains(t, body, `"type":"cosmos-sdk/Account"`) // empty account balance res, body = Request(t, port, "GET", fmt.Sprintf("/bank/balances/%s", someFakeAddr), nil)