diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b61035266ee..866a08d121ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,8 +16,8 @@ BREAKING CHANGES * Gaia CLI (`gaiacli`) - [x/stake] change `--keybase-sig` to `--identity` - [x/stake] \#1828 Force user to specify amount on create-validator command by removing default - - [x/gov] Change `--proposalID` to `--proposal-id` - - [x/stake, x/gov] \#1606 Use `--from` instead of adhoc flags like `--address-validator` + - [x/gov] Change `--proposalID` to `--proposal-id` + - [x/stake, x/gov] \#1606 Use `--from` instead of adhoc flags like `--address-validator` and `--proposer` to indicate the sender address. - \#1551 Remove `--name` completely - Genesis/key creation (`gaiad init`) now supports user-provided key passwords @@ -26,12 +26,12 @@ BREAKING CHANGES - [x/stake] Inflation doesn't use rationals in calculation (performance boost) - [x/stake] Persist a map from `addr->pubkey` in the state since BeginBlock doesn't provide pubkeys. - - [x/gov] \#1781 Added tags sub-package, changed tags to use dash-case + - [x/gov] \#1781 Added tags sub-package, changed tags to use dash-case - [x/gov] \#1688 Governance parameters are now stored in globalparams store - [x/gov] \#1859 Slash validators who do not vote on a proposal - [x/gov] \#1914 added TallyResult type that gets stored in Proposal after tallying is finished - -* SDK + +* SDK - [baseapp] Msgs are no longer run on CheckTx, removed `ctx.IsCheckTx()` - [baseapp] NewBaseApp constructor takes sdk.TxDecoder as argument instead of wire.Codec - [types] sdk.NewCoin takes sdk.Int, sdk.NewInt64Coin takes int64 @@ -40,14 +40,14 @@ BREAKING CHANGES - Removed all tx related fields and logic (building & signing) to separate structure `TxContext` in `x/auth/client/context` -* Tendermint +* Tendermint - v0.22.5 -> See [Tendermint PR](https://github.com/tendermint/tendermint/pull/1966) - - change all the cryptography imports. + - change all the cryptography imports. - v0.23.0 -> See [Changelog](https://github.com/tendermint/tendermint/blob/v0.23.0/CHANGELOG.md#0230) and [SDK PR](https://github.com/cosmos/cosmos-sdk/pull/1927) - BeginBlock no longer includes crypto.Pubkey - - use time.Time instead of int64 for time. + - use time.Time instead of int64 for time. FEATURES @@ -56,11 +56,12 @@ FEATURES * Gaia CLI (`gaiacli`) - [x/gov] added `query-proposals` command. Can filter by `depositer`, `voter`, and `status` + - [x/stake] \#2021 Added staking query cli cmds for unbonding-delegations and redelegations * Gaia - [networks] Added ansible scripts to upgrade seed nodes on a network -* SDK +* SDK - [x/mock/simulation] Randomized simulation framework - Modules specify invariants and operations, preferably in an x/[module]/simulation package - Modules can test random combinations of their own operations @@ -78,10 +79,10 @@ IMPROVEMENTS - [spec] \#967 Inflation and distribution specs drastically improved - [x/gov] \#1773 Votes on a proposal can now be queried - [x/gov] Initial governance parameters can now be set in the genesis file - - [x/stake] \#1815 Sped up the processing of `EditValidator` txs. + - [x/stake] \#1815 Sped up the processing of `EditValidator` txs. - [config] \#1930 Transactions indexer indexes all tags by default. -* SDK +* SDK - [baseapp] \#1587 Allow any alphanumeric character in route - [baseapp] Allow any alphanumeric character in route - [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` @@ -95,13 +96,14 @@ BUG FIXES * Gaia CLI (`gaiacli`) - \#1766 Fixes bad example for keybase identity + - [x/stake] \#2021 Fixed repeated CLI commands in staking * Gaia - \#1804 Fixes gen-tx genesis generation logic temporarily until upstream updates - \#1799 Fix `gaiad export` - \#1839 Fixed bug where intra-tx counter wasn't set correctly for genesis validators - [x/stake] \#1858 Fixed bug where the cliff validator was not updated correctly - - [tests] \#1675 Fix non-deterministic `test_cover` + - [tests] \#1675 Fix non-deterministic `test_cover` - [tests] \#1551 Fixed invalid LCD test JSON payload in `doIBCTransfer` - [basecoin] Fixes coin transaction failure and account query [discussion](https://forum.cosmos.network/t/unmarshalbinarybare-expected-to-read-prefix-bytes-75fbfab8-since-it-is-registered-concrete-but-got-0a141dfa/664/6) - [x/gov] \#1757 Fix VoteOption conversion to String @@ -274,7 +276,7 @@ FEATURES * [types] Added MinInt and MinUint functions * [gaiad] `unsafe_reset_all` now resets addrbook.json * [democoin] add x/oracle, x/assoc -* [tests] created a randomized testing framework. +* [tests] created a randomized testing framework. - Currently bank has limited functionality in the framework - Auth has its invariants checked within the framework * [tests] Add WaitForNextNBlocksTM helper method diff --git a/Makefile b/Makefile index 208b59ade1ab..cace7845318e 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ BUILD_TAGS = netgo ledger BUILD_FLAGS = -tags "${BUILD_TAGS}" -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}" GCC := $(shell command -v gcc 2> /dev/null) LEDGER_ENABLED ?= true +UNAME_S := $(shell uname -s) all: get_tools get_vendor_deps install install_examples install_cosmos-sdk-cli test_lint test ######################################## @@ -15,14 +16,20 @@ ci: get_tools get_vendor_deps install test_cover test_lint test ######################################## ### Build/Install -check-ledger: +check-ledger: ifeq ($(LEDGER_ENABLED),true) -ifndef GCC -$(error "gcc not installed for ledger support, please install") -endif + ifeq ($(UNAME_S),OpenBSD) + $(info "OpenBSD detected, disabling ledger support (https://github.com/cosmos/cosmos-sdk/issues/1988)") + TMP_BUILD_TAGS := $(BUILD_TAGS) + BUILD_TAGS = $(filter-out ledger, $(TMP_BUILD_TAGS)) + else + ifndef GCC + $(error "gcc not installed for ledger support, please install or set LEDGER_ENABLED to false in the Makefile") + endif + endif else -TMP_BUILD_TAGS := $(BUILD_TAGS) -BUILD_TAGS = $(filter-out ledger, $(TMP_BUILD_TAGS)) + TMP_BUILD_TAGS := $(BUILD_TAGS) + BUILD_TAGS = $(filter-out ledger, $(TMP_BUILD_TAGS)) endif build: check-ledger @@ -100,6 +107,7 @@ get_dev_tools: get_vendor_deps: @echo "--> Running dep ensure" + @rm -rf .vendor-new @dep ensure -v draw_deps: diff --git a/PENDING.md b/PENDING.md index 9f0b86a994eb..9ade31c8b3fc 100644 --- a/PENDING.md +++ b/PENDING.md @@ -8,10 +8,10 @@ BREAKING CHANGES * Gaia * Make the transient store key use a distinct store key. [#2013](https://github.com/cosmos/cosmos-sdk/pull/2013) - -* SDK -* Tendermint +* SDK + +* Tendermint FEATURES @@ -22,9 +22,9 @@ FEATURES * Gaia -* SDK +* SDK -* Tendermint +* Tendermint IMPROVEMENTS @@ -35,9 +35,9 @@ IMPROVEMENTS * Gaia -* SDK +* SDK -* Tendermint +* Tendermint BUG FIXES @@ -48,7 +48,6 @@ BUG FIXES * Gaia -* SDK - -* Tendermint +* SDK +* Tendermint diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index cbc1a2c20d7c..9b8c5e439719 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -385,64 +385,70 @@ func TestValidatorQuery(t *testing.T) { func TestBonding(t *testing.T) { name, password, denom := "test", "1234567890", "steak" - addr, seed := CreateAddr(t, "test", password, GetKeyBase(t)) + addr, seed := CreateAddr(t, name, password, GetKeyBase(t)) cleanup, pks, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) defer cleanup() validator1Owner := sdk.AccAddress(pks[0].Address()) + validator := getValidator(t, port, validator1Owner) - // create bond TX - resultTx := doDelegate(t, port, seed, name, password, addr, validator1Owner) + resultTx := doDelegate(t, port, seed, name, password, addr, validator1Owner, 60) tests.WaitForHeight(resultTx.Height+1, port) - // check if tx was committed require.Equal(t, uint32(0), resultTx.CheckTx.Code) require.Equal(t, uint32(0), resultTx.DeliverTx.Code) - // query sender acc := getAccount(t, port, addr) coins := acc.GetCoins() require.Equal(t, int64(40), coins.AmountOf(denom).Int64()) - // query validator bond := getDelegation(t, port, addr, validator1Owner) require.Equal(t, "60.0000000000", bond.Shares) + summary := getDelegationSummary(t, port, addr) + + require.Len(t, summary.Delegations, 1, "Delegation summary holds all delegations") + require.Equal(t, "60.0000000000", summary.Delegations[0].Shares) + require.Len(t, summary.UnbondingDelegations, 0, "Delegation summary holds all unbonding-delegations") + + bondedValidators := getDelegatorValidators(t, port, addr) + require.Len(t, bondedValidators, 1) + require.Equal(t, validator1Owner, bondedValidators[0].Owner) + require.Equal(t, validator.DelegatorShares.Add(sdk.NewRat(60)).FloatString(), bondedValidators[0].DelegatorShares.FloatString()) + + bondedValidator := getDelegatorValidator(t, port, addr, validator1Owner) + require.Equal(t, validator1Owner, bondedValidator.Owner) + ////////////////////// // testing unbonding - // create unbond TX - resultTx = doBeginUnbonding(t, port, seed, name, password, addr, validator1Owner) + resultTx = doBeginUnbonding(t, port, seed, name, password, addr, validator1Owner, 60) tests.WaitForHeight(resultTx.Height+1, port) - // query validator - bond = getDelegation(t, port, addr, validator1Owner) - require.Equal(t, "30.0000000000", bond.Shares) - - // check if tx was committed require.Equal(t, uint32(0), resultTx.CheckTx.Code) require.Equal(t, uint32(0), resultTx.DeliverTx.Code) - // should the sender should have not received any coins as the unbonding has only just begun - // query sender + // sender should have not received any coins as the unbonding has only just begun acc = getAccount(t, port, addr) coins = acc.GetCoins() require.Equal(t, int64(40), coins.AmountOf("steak").Int64()) - // query unbonding delegation - validatorAddr := sdk.AccAddress(pks[0].Address()) - unbondings := getUndelegations(t, port, addr, validatorAddr) - assert.Len(t, unbondings, 1, "Unbondings holds all unbonding-delegations") - assert.Equal(t, "30", unbondings[0].Balance.Amount.String()) + unbondings := getUndelegations(t, port, addr, validator1Owner) + require.Len(t, unbondings, 1, "Unbondings holds all unbonding-delegations") + require.Equal(t, "60", unbondings[0].Balance.Amount.String()) - // query summary - summary := getDelegationSummary(t, port, addr) + summary = getDelegationSummary(t, port, addr) - assert.Len(t, summary.Delegations, 1, "Delegation summary holds all delegations") - assert.Equal(t, "30.0000000000", summary.Delegations[0].Shares) - assert.Len(t, summary.UnbondingDelegations, 1, "Delegation summary holds all unbonding-delegations") - assert.Equal(t, "30", summary.UnbondingDelegations[0].Balance.Amount.String()) + require.Len(t, summary.Delegations, 0, "Delegation summary holds all delegations") + require.Len(t, summary.UnbondingDelegations, 1, "Delegation summary holds all unbonding-delegations") + require.Equal(t, "60", summary.UnbondingDelegations[0].Balance.Amount.String()) + + bondedValidators = getDelegatorValidators(t, port, addr) + require.Len(t, bondedValidators, 0, "There's no delegation as the user withdraw all funds") + + // TODO Undonding status not currently implemented + // require.Equal(t, sdk.Unbonding, bondedValidators[0].Status) // TODO add redelegation, need more complex capabilities such to mock context and // TODO check summary for redelegation @@ -757,64 +763,89 @@ func getSigningInfo(t *testing.T, port string, validatorPubKey string) slashing. // ============= Stake Module ================ func getDelegation(t *testing.T, port string, delegatorAddr, validatorAddr sdk.AccAddress) rest.DelegationWithoutRat { - - // get the account to get the sequence res, body := Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/delegations/%s", delegatorAddr, validatorAddr), nil) require.Equal(t, http.StatusOK, res.StatusCode, body) + var bond rest.DelegationWithoutRat + err := cdc.UnmarshalJSON([]byte(body), &bond) require.Nil(t, err) + return bond } func getUndelegations(t *testing.T, port string, delegatorAddr, validatorAddr sdk.AccAddress) []stake.UnbondingDelegation { - - // get the account to get the sequence res, body := Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/unbonding_delegations/%s", delegatorAddr, validatorAddr), nil) require.Equal(t, http.StatusOK, res.StatusCode, body) + var unbondings []stake.UnbondingDelegation + err := cdc.UnmarshalJSON([]byte(body), &unbondings) require.Nil(t, err) + return unbondings } func getDelegationSummary(t *testing.T, port string, delegatorAddr sdk.AccAddress) rest.DelegationSummary { - - // get the account to get the sequence res, body := Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s", delegatorAddr), nil) require.Equal(t, http.StatusOK, res.StatusCode, body) + var summary rest.DelegationSummary + err := cdc.UnmarshalJSON([]byte(body), &summary) require.Nil(t, err) + return summary } func getBondingTxs(t *testing.T, port string, delegatorAddr sdk.AccAddress, query string) []tx.Info { - - // get the account to get the sequence var res *http.Response var body string + if len(query) > 0 { res, body = Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/txs?type=%s", delegatorAddr, query), nil) } else { res, body = Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/txs", delegatorAddr), nil) } require.Equal(t, http.StatusOK, res.StatusCode, body) + var txs []tx.Info + err := cdc.UnmarshalJSON([]byte(body), &txs) require.Nil(t, err) + return txs } -func doDelegate(t *testing.T, port, seed, name, password string, delegatorAddr, validatorAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { - // get the account to get the sequence +func getDelegatorValidators(t *testing.T, port string, delegatorAddr sdk.AccAddress) []stake.BechValidator { + res, body := Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/validators", delegatorAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var bondedValidators []stake.BechValidator + + err := cdc.UnmarshalJSON([]byte(body), &bondedValidators) + require.Nil(t, err) + + return bondedValidators +} + +func getDelegatorValidator(t *testing.T, port string, delegatorAddr sdk.AccAddress, validatorAddr sdk.AccAddress) stake.BechValidator { + res, body := Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/validators/%s", delegatorAddr, validatorAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var bondedValidator stake.BechValidator + err := cdc.UnmarshalJSON([]byte(body), &bondedValidator) + require.Nil(t, err) + + return bondedValidator +} + +func doDelegate(t *testing.T, port, seed, name, password string, delegatorAddr, validatorAddr sdk.AccAddress, amount int64) (resultTx ctypes.ResultBroadcastTxCommit) { acc := getAccount(t, port, delegatorAddr) accnum := acc.GetAccountNumber() sequence := acc.GetSequence() - chainID := viper.GetString(client.FlagChainID) - // send jsonStr := []byte(fmt.Sprintf(`{ "name": "%s", "password": "%s", @@ -826,14 +857,15 @@ func doDelegate(t *testing.T, port, seed, name, password string, delegatorAddr, { "delegator_addr": "%s", "validator_addr": "%s", - "delegation": { "denom": "%s", "amount": "60" } + "delegation": { "denom": "%s", "amount": "%d" } } ], "begin_unbondings": [], "complete_unbondings": [], "begin_redelegates": [], "complete_redelegates": [] - }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorAddr, "steak")) + }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorAddr, "steak", amount)) + res, body := Request(t, port, "POST", fmt.Sprintf("/stake/delegators/%s/delegations", delegatorAddr), jsonStr) require.Equal(t, http.StatusOK, res.StatusCode, body) @@ -845,16 +877,13 @@ func doDelegate(t *testing.T, port, seed, name, password string, delegatorAddr, } func doBeginUnbonding(t *testing.T, port, seed, name, password string, - delegatorAddr, validatorAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { + delegatorAddr, validatorAddr sdk.AccAddress, amount int64) (resultTx ctypes.ResultBroadcastTxCommit) { - // get the account to get the sequence acc := getAccount(t, port, delegatorAddr) accnum := acc.GetAccountNumber() sequence := acc.GetSequence() - chainID := viper.GetString(client.FlagChainID) - // send jsonStr := []byte(fmt.Sprintf(`{ "name": "%s", "password": "%s", @@ -867,13 +896,14 @@ func doBeginUnbonding(t *testing.T, port, seed, name, password string, { "delegator_addr": "%s", "validator_addr": "%s", - "shares": "30" + "shares": "%d" } ], "complete_unbondings": [], "begin_redelegates": [], "complete_redelegates": [] - }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorAddr)) + }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorAddr, amount)) + res, body := Request(t, port, "POST", fmt.Sprintf("/stake/delegators/%s/delegations", delegatorAddr), jsonStr) require.Equal(t, http.StatusOK, res.StatusCode, body) @@ -887,14 +917,12 @@ func doBeginUnbonding(t *testing.T, port, seed, name, password string, func doBeginRedelegation(t *testing.T, port, seed, name, password string, delegatorAddr, validatorSrcAddr, validatorDstAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { - // get the account to get the sequence acc := getAccount(t, port, delegatorAddr) accnum := acc.GetAccountNumber() sequence := acc.GetSequence() chainID := viper.GetString(client.FlagChainID) - // send jsonStr := []byte(fmt.Sprintf(`{ "name": "%s", "password": "%s", @@ -915,6 +943,7 @@ func doBeginRedelegation(t *testing.T, port, seed, name, password string, ], "complete_redelegates": [] }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorSrcAddr, validatorDstAddr)) + res, body := Request(t, port, "POST", fmt.Sprintf("/stake/delegators/%s/delegations", delegatorAddr), jsonStr) require.Equal(t, http.StatusOK, res.StatusCode, body) @@ -926,7 +955,6 @@ func doBeginRedelegation(t *testing.T, port, seed, name, password string, } func getValidators(t *testing.T, port string) []stake.BechValidator { - // get the account to get the sequence res, body := Request(t, port, "GET", "/stake/validators", nil) require.Equal(t, http.StatusOK, res.StatusCode, body) var validators []stake.BechValidator @@ -936,7 +964,6 @@ func getValidators(t *testing.T, port string) []stake.BechValidator { } func getValidator(t *testing.T, port string, validatorAddr sdk.AccAddress) stake.BechValidator { - // get the account to get the sequence res, body := Request(t, port, "GET", fmt.Sprintf("/stake/validators/%s", validatorAddr.String()), nil) require.Equal(t, http.StatusOK, res.StatusCode, body) var validator stake.BechValidator @@ -1034,7 +1061,7 @@ func getProposalsFilterStatus(t *testing.T, port string, status gov.ProposalStat } func doSubmitProposal(t *testing.T, port, seed, name, password string, proposerAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { - // get the account to get the sequence + acc := getAccount(t, port, proposerAddr) accnum := acc.GetAccountNumber() sequence := acc.GetSequence() @@ -1068,7 +1095,7 @@ func doSubmitProposal(t *testing.T, port, seed, name, password string, proposerA } func doDeposit(t *testing.T, port, seed, name, password string, proposerAddr sdk.AccAddress, proposalID int64) (resultTx ctypes.ResultBroadcastTxCommit) { - // get the account to get the sequence + acc := getAccount(t, port, proposerAddr) accnum := acc.GetAccountNumber() sequence := acc.GetSequence() diff --git a/cmd/gaia/cli_test/cli_test.go b/cmd/gaia/cli_test/cli_test.go index 8d652bc43525..ea4f2e47de3b 100644 --- a/cmd/gaia/cli_test/cli_test.go +++ b/cmd/gaia/cli_test/cli_test.go @@ -34,7 +34,7 @@ func init() { } func TestGaiaCLISend(t *testing.T) { - tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe_reset_all", gaiadHome), "") + tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe-reset-all", gaiadHome), "") executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s foo", gaiacliHome), app.DefaultKeyPass) executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s bar", gaiacliHome), app.DefaultKeyPass) @@ -87,7 +87,7 @@ func TestGaiaCLISend(t *testing.T) { } func TestGaiaCLICreateValidator(t *testing.T) { - tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe_reset_all", gaiadHome), "") + tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe-reset-all", gaiadHome), "") executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s foo", gaiacliHome), app.DefaultKeyPass) executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s bar", gaiacliHome), app.DefaultKeyPass) chainID := executeInit(t, fmt.Sprintf("gaiad init -o --name=foo --home=%s --home-client=%s", gaiadHome, gaiacliHome)) @@ -153,7 +153,7 @@ func TestGaiaCLICreateValidator(t *testing.T) { } func TestGaiaCLISubmitProposal(t *testing.T) { - tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe_reset_all", gaiadHome), "") + tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe-reset-all", gaiadHome), "") executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s foo", gaiacliHome), app.DefaultKeyPass) executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s bar", gaiacliHome), app.DefaultKeyPass) chainID := executeInit(t, fmt.Sprintf("gaiad init -o --name=foo --home=%s --home-client=%s", gaiadHome, gaiacliHome)) diff --git a/cmd/gaia/cmd/gaiacli/main.go b/cmd/gaia/cmd/gaiacli/main.go index 9c4d67b8c4a8..02a96b6149ec 100644 --- a/cmd/gaia/cmd/gaiacli/main.go +++ b/cmd/gaia/cmd/gaiacli/main.go @@ -88,6 +88,10 @@ func main() { stakecmd.GetCmdQueryValidators("stake", cdc), stakecmd.GetCmdQueryDelegation("stake", cdc), stakecmd.GetCmdQueryDelegations("stake", cdc), + stakecmd.GetCmdQueryUnbondingDelegation("stake", cdc), + stakecmd.GetCmdQueryUnbondingDelegations("stake", cdc), + stakecmd.GetCmdQueryRedelegation("stake", cdc), + stakecmd.GetCmdQueryRedelegations("stake", cdc), slashingcmd.GetCmdQuerySigningInfo("slashing", cdc), )...) stakeCmd.AddCommand( diff --git a/docs/clients/lcd-rest-api.yaml b/docs/clients/lcd-rest-api.yaml index 063e3a55b857..3b8349f4bd59 100644 --- a/docs/clients/lcd-rest-api.yaml +++ b/docs/clients/lcd-rest-api.yaml @@ -493,6 +493,49 @@ paths: 500: description: Internal Server Error + /stake/delegators/{delegatorAddr}/validators: + parameters: + - in: path + name: delegatorAddr + description: Bech32 AccAddress of Delegator + required: true + type: string + get: + summary: Query all validators that a delegator is bonded to + tags: + - stake + produces: + - application/json + responses: + 200: + description: OK + 404: + description: Not Found + + /stake/delegators/{delegatorAddr}/validators/{validatorAddr}: + parameters: + - in: path + name: delegatorAddr + description: Bech32 AccAddress of Delegator + required: true + type: string + - in: path + name: validatorAddr + description: Bech32 ValAddress of Delegator + required: true + type: string + get: + summary: Query a validator that a delegator is bonded to + tags: + - stake + produces: + - application/json + responses: + 200: + description: OK + 404: + description: Not Found + /stake/delegators/{delegatorAddr}/txs: parameters: - in: path diff --git a/docs/getting-started/full-node.md b/docs/getting-started/full-node.md index 1add3f8c0b19..87c28581b1a5 100644 --- a/docs/getting-started/full-node.md +++ b/docs/getting-started/full-node.md @@ -41,7 +41,7 @@ First, remove the outdated files and reset the data. ```bash rm $HOME/.gaiad/config/addrbook.json $HOME/.gaiad/config/genesis.json -gaiad unsafe_reset_all +gaiad unsafe-reset-all ``` Your node is now in a pristine state while keeping the original `priv_validator.json` and `config.toml`. If you had any sentry nodes or full nodes setup before, diff --git a/docs/install.md b/docs/install.md deleted file mode 100644 index bafdfc4bdeb9..000000000000 --- a/docs/install.md +++ /dev/null @@ -1,59 +0,0 @@ -# Install - -The fastest and easiest way to install the Cosmos SDK binaries -is to run [this script](https://github.com/cosmos/cosmos-sdk/blob/develop/scripts/install_sdk_ubuntu.sh) on a fresh Ubuntu instance. Similarly, you can run [this script](https://github.com/cosmos/cosmos-sdk/blob/develop/scripts/install_sdk_bsd.sh) on a fresh FreeBSD instance. Read the scripts before running them to ensure no untrusted connection is being made, for example we're making curl requests to download golang. Also read the comments / instructions carefully (i.e., reset your terminal after running the script). - -Cosmos SDK can be installed to -`$GOPATH/src/github.com/cosmos/cosmos-sdk` like a normal Go program: - -``` -go get github.com/cosmos/cosmos-sdk -``` - -If the dependencies have been updated with breaking changes, or if -another branch is required, `dep` is used for dependency management. -Thus, assuming you've already run `go get` or otherwise cloned the repo, -the correct way to install is: - -``` -cd $GOPATH/src/github.com/cosmos/cosmos-sdk -make get_tools -make get_vendor_deps -make install -make install_examples -``` - -This will install `gaiad` and `gaiacli` and four example binaries: -`basecoind`, `basecli`, `democoind`, and `democli`. - -Verify that everything is OK by running: - -``` -gaiad version -``` - -you should see: - -``` -0.17.3-a5a78eb -``` - -then with: - -``` -gaiacli version -``` -you should see the same version (or a later one for both). - -## Update - -Get latest code (you can also `git fetch` only the version desired), -ensure the dependencies are up to date, then recompile. - -``` -cd $GOPATH/src/github.com/cosmos/cosmos-sdk -git fetch -a origin -git checkout VERSION -make get_vendor_deps -make install -``` diff --git a/docs/light/api.md b/docs/light/api.md index 41abed5da6ef..d4e66eaf152e 100644 --- a/docs/light/api.md +++ b/docs/light/api.md @@ -479,6 +479,62 @@ Returns on error: } ``` +### /stake/delegators/{delegatorAddr}/validators - GET + +url: /stake/delegators/{delegatorAddr}/validators + +Functionality: Query all validators that a delegator is bonded to. + +Returns on success: + +```json +{ + "rest api":"2.0", + "code":200, + "error":"", + "result":{} +} +``` + +Returns on failure: + +```json +{ + "rest api":"2.0", + "code":500, + "error":"TODO", + "result":{} +} +``` + +### /stake/delegators/{delegatorAddr}/validators/{validatorAddr} - GET + +url: /stake/delegators/{delegatorAddr}/validators/{validatorAddr} + +Functionality: Query a validator that a delegator is bonded to + +Returns on success: + +```json +{ + "rest api":"2.0", + "code":200, + "error":"", + "result":{} +} +``` + +Returns on failure: + +```json +{ + "rest api":"2.0", + "code":500, + "error":"TODO", + "result":{} +} +``` + ### /stake/delegators/{delegatorAddr}/txs - GET url: /stake/delegators/{delegatorAddr}/txs diff --git a/docs/light/specification.md b/docs/light/specification.md index d8897b2444a0..15f36b014460 100644 --- a/docs/light/specification.md +++ b/docs/light/specification.md @@ -323,6 +323,14 @@ return KeyOutput{ TODO +### [/stake/delegators/{delegatorAddr}/validators](api.md#stakedelegatorsdelegatorAddrvalidators---get) + +TODO + +### [/stake/delegators/{delegatorAddr}/validators/{validatorAddr}](api.md#stakedelegatorsdelegatorAddrvalidatorsvalidatorAddr---get) + +TODO + ### [/stake/delegators/{delegatorAddr}/txs](api.md#stakedelegatorsdelegatorAddrtxs---get) TODO diff --git a/docs/sdk/clients.md b/docs/sdk/clients.md index 914a6c599c7f..d879db1ba828 100644 --- a/docs/sdk/clients.md +++ b/docs/sdk/clients.md @@ -29,7 +29,7 @@ There are three types of key representations that are used: - `cosmosvalpub` - Generated when the node is created with `gaiad init`. - - Get this value with `gaiad tendermint show_validator` + - Get this value with `gaiad tendermint show-validator` - e.g. `cosmosvalpub1zcjduc3qcyj09qc03elte23zwshdx92jm6ce88fgc90rtqhjx8v0608qh5ssp0w94c` ### Generate Keys @@ -59,7 +59,7 @@ gaiacli keys list View the validator pubkey for your node by typing: ```bash -gaiad tendermint show_validator +gaiad tendermint show-validator ``` ::: danger Warning @@ -120,7 +120,7 @@ On the testnet, we delegate `steak` instead of `atom`. Here's how you can bond t ```bash gaiacli stake delegate \ --amount=10steak \ - --address-validator=$(gaiad tendermint show_validator) \ + --address-validator=$(gaiad tendermint show-validator) \ --name= \ --chain-id=gaia-7005 ``` @@ -137,7 +137,7 @@ If for any reason the validator misbehaves, or you want to unbond a certain amou ```bash gaiacli stake unbond begin \ - --address-validator=$(gaiad tendermint show_validator) \ + --address-validator=$(gaiad tendermint show-validator) \ --shares=MAX \ --name= \ --chain-id=gaia-7005 @@ -152,7 +152,7 @@ gaiacli account gaiacli stake delegation \ --address-delegator= \ - --address-validator=$(gaiad tendermint show_validator) \ + --address-validator=$(gaiad tendermint show-validator) \ --chain-id=gaia-7005 ``` diff --git a/docs/validators/validator-setup.md b/docs/validators/validator-setup.md index 837471bf2ac9..bf009dd90b9b 100644 --- a/docs/validators/validator-setup.md +++ b/docs/validators/validator-setup.md @@ -19,7 +19,7 @@ If you want to become a validator for the Hub's `mainnet`, you should [research Your `cosmosvalpub` can be used to create a new validator by staking tokens. You can find your validator pubkey by running: ```bash -gaiad tendermint show_validator +gaiad tendermint show-validator ``` Next, craft your `gaiacli stake create-validator` command: @@ -31,7 +31,7 @@ Don't use more `steak` thank you have! You can always get more by using the [Fau ```bash gaiacli stake create-validator \ --amount=5steak \ - --pubkey=$(gaiad tendermint show_validator) \ + --pubkey=$(gaiad tendermint show-validator) \ --address-validator= --moniker="choose a moniker" \ --chain-id=gaia-7005 \ @@ -70,7 +70,7 @@ gaiacli stake validator \ Your validator is active if the following command returns anything: ```bash -gaiacli advanced tendermint validator-set | grep "$(gaiad tendermint show_validator)" +gaiacli advanced tendermint validator-set | grep "$(gaiad tendermint show-validator)" ``` You should also be able to see your validator on the [Explorer](https://explorecosmos.network/validators). You are looking for the `bech32` encoded `address` in the `~/.gaiad/config/priv_validator.json` file. diff --git a/examples/README.md b/examples/README.md index 8625cead6ce1..33af1b328447 100644 --- a/examples/README.md +++ b/examples/README.md @@ -179,7 +179,7 @@ starting this tutorial again or trying something new), the following commands are run: ``` -basecoind unsafe_reset_all +basecoind unsafe-reset-all rm -rf ~/.basecoind rm -rf ~/.basecli ``` diff --git a/networks/remote/ansible/roles/upgrade-gaiad/tasks/main.yml b/networks/remote/ansible/roles/upgrade-gaiad/tasks/main.yml index 03bdf40e09e5..ad705ada5d23 100644 --- a/networks/remote/ansible/roles/upgrade-gaiad/tasks/main.yml +++ b/networks/remote/ansible/roles/upgrade-gaiad/tasks/main.yml @@ -24,6 +24,6 @@ - name: Reset network when: UNSAFE_RESET_ALL | default(false) | bool - command: "sudo -u gaiad gaiad unsafe_reset_all" + command: "sudo -u gaiad gaiad unsafe-reset-all" notify: restart gaiad diff --git a/server/tm_cmds.go b/server/tm_cmds.go index 25d417a666f2..f852b4029ab6 100644 --- a/server/tm_cmds.go +++ b/server/tm_cmds.go @@ -16,7 +16,7 @@ import ( // ShowNodeIDCmd - ported from Tendermint, dump node ID to stdout func ShowNodeIDCmd(ctx *Context) *cobra.Command { return &cobra.Command{ - Use: "show_node_id", + Use: "show-node-id", Short: "Show this node's ID", RunE: func(cmd *cobra.Command, args []string) error { cfg := ctx.Config @@ -34,7 +34,7 @@ func ShowNodeIDCmd(ctx *Context) *cobra.Command { func ShowValidatorCmd(ctx *Context) *cobra.Command { flagJSON := "json" cmd := cobra.Command{ - Use: "show_validator", + Use: "show-validator", Short: "Show this node's tendermint validator info", RunE: func(cmd *cobra.Command, args []string) error { @@ -68,7 +68,7 @@ func ShowValidatorCmd(ctx *Context) *cobra.Command { // UnsafeResetAllCmd - extension of the tendermint command, resets initialization func UnsafeResetAllCmd(ctx *Context) *cobra.Command { return &cobra.Command{ - Use: "unsafe_reset_all", + Use: "unsafe-reset-all", Short: "Reset blockchain database, priv_validator.json file, and the logger", RunE: func(cmd *cobra.Command, args []string) error { cfg := ctx.Config diff --git a/x/stake/client/cli/query.go b/x/stake/client/cli/query.go index 5ac303f9fe51..015d6ffcf3a6 100644 --- a/x/stake/client/cli/query.go +++ b/x/stake/client/cli/query.go @@ -312,11 +312,11 @@ func GetCmdQueryUnbondingDelegations(storeName string, cdc *wire.Codec) *cobra.C } // GetCmdQueryRedelegation implements the command to query a single -// unbonding-delegation record. +// redelegation record. func GetCmdQueryRedelegation(storeName string, cdc *wire.Codec) *cobra.Command { cmd := &cobra.Command{ - Use: "unbonding-delegation", - Short: "Query an unbonding-delegation record based on delegator and validator address", + Use: "redelegation", + Short: "Query a redelegation record based on delegator and a source and destination validator address", RunE: func(cmd *cobra.Command, args []string) error { valSrcAddr, err := sdk.AccAddressFromBech32(viper.GetString(FlagAddressValidatorSrc)) if err != nil { @@ -373,11 +373,11 @@ func GetCmdQueryRedelegation(storeName string, cdc *wire.Codec) *cobra.Command { } // GetCmdQueryRedelegations implements the command to query all the -// unbonding-delegation records for a delegator. +// redelegation records for a delegator. func GetCmdQueryRedelegations(storeName string, cdc *wire.Codec) *cobra.Command { cmd := &cobra.Command{ - Use: "unbonding-delegations [delegator-addr]", - Short: "Query all unbonding-delegations records for one delegator", + Use: "redelegations [delegator-addr]", + Short: "Query all redelegations records for one delegator", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { delegatorAddr, err := sdk.AccAddressFromBech32(args[0]) diff --git a/x/stake/client/rest/query.go b/x/stake/client/rest/query.go index ac660f98f66b..1741f88234b7 100644 --- a/x/stake/client/rest/query.go +++ b/x/stake/client/rest/query.go @@ -20,41 +20,54 @@ const storeName = "stake" func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *wire.Codec) { - // GET /stake/delegators/{delegatorAddr} // Get all delegations (delegation, undelegation and redelegation) from a delegator + // Get all delegations (delegation, undelegation and redelegation) from a delegator r.HandleFunc( "/stake/delegators/{delegatorAddr}", delegatorHandlerFn(cliCtx, cdc), ).Methods("GET") - // GET /stake/delegators/{delegatorAddr}/txs?type= // Get all staking txs (i.e msgs) from a delegator + // Get all staking txs (i.e msgs) from a delegator r.HandleFunc( "/stake/delegators/{delegatorAddr}/txs", delegatorTxsHandlerFn(cliCtx, cdc), ).Methods("GET") - // GET /stake/delegators/{delegatorAddr}/delegations/{validatorAddr} // Query a delegation between a delegator and a validator + // Query all validators that a delegator is bonded to + r.HandleFunc( + "/stake/delegators/{delegatorAddr}/validators", + delegatorValidatorsHandlerFn(cliCtx, cdc), + ).Methods("GET") + + // Query a validator that a delegator is bonded to + r.HandleFunc( + "/stake/delegators/{delegatorAddr}/validators/{validatorAddr}", + delegatorValidatorHandlerFn(cliCtx, cdc), + ).Methods("GET") + + // Query a delegation between a delegator and a validator r.HandleFunc( "/stake/delegators/{delegatorAddr}/delegations/{validatorAddr}", delegationHandlerFn(cliCtx, cdc), ).Methods("GET") - // GET /stake/delegators/{delegatorAddr}/unbonding_delegations/{validatorAddr} // Query all unbonding_delegations between a delegator and a validator + // Query all unbonding_delegations between a delegator and a validator r.HandleFunc( "/stake/delegators/{delegatorAddr}/unbonding_delegations/{validatorAddr}", unbondingDelegationsHandlerFn(cliCtx, cdc), ).Methods("GET") - // GET /stake/validators/ + // Get all validators r.HandleFunc( "/stake/validators", validatorsHandlerFn(cliCtx, cdc), ).Methods("GET") - // GET /stake/validators/{addr} + // Get a single validator info r.HandleFunc( "/stake/validators/{addr}", validatorHandlerFn(cliCtx, cdc), ).Methods("GET") + } // already resolve the rational shares to not handle this in the client diff --git a/x/stake/client/rest/utils.go b/x/stake/client/rest/utils.go index 86e714662861..da00eda0bd56 100644 --- a/x/stake/client/rest/utils.go +++ b/x/stake/client/rest/utils.go @@ -29,7 +29,6 @@ func contains(stringSlice []string, txType string) bool { func getDelegatorValidator(cliCtx context.CLIContext, cdc *wire.Codec, delegatorAddr sdk.AccAddress, validatorAccAddr sdk.AccAddress) ( validator types.BechValidator, httpStatusCode int, errMsg string, err error) { - // check if the delegator is bonded or redelegated to the validator keyDel := stake.GetDelegationKey(delegatorAddr, validatorAccAddr) res, err := cliCtx.QueryStore(keyDel, storeName) @@ -46,7 +45,6 @@ func getDelegatorValidator(cliCtx context.CLIContext, cdc *wire.Codec, delegator return types.BechValidator{}, http.StatusInternalServerError, "Error: ", err } if len(kvs) == 0 { - // the query will return empty if there are no delegations return types.BechValidator{}, http.StatusNoContent, "", nil } @@ -65,7 +63,6 @@ func getDelegatorDelegations(cliCtx context.CLIContext, cdc *wire.Codec, delegat return DelegationWithoutRat{}, http.StatusInternalServerError, "couldn't query delegation. Error: ", err } - // the query will return empty if there is no data for this record if len(marshalledDelegation) == 0 { return DelegationWithoutRat{}, http.StatusNoContent, "", nil } @@ -93,7 +90,6 @@ func getDelegatorUndelegations(cliCtx context.CLIContext, cdc *wire.Codec, deleg return types.UnbondingDelegation{}, http.StatusInternalServerError, "couldn't query unbonding-delegation. Error: ", err } - // the query will return empty if there is no data for this record if len(marshalledUnbondingDelegation) == 0 { return types.UnbondingDelegation{}, http.StatusNoContent, "", nil }