fix!: update ABCI query to use request height (#9879)
This commit is contained in:
parent
e656d5e28a
commit
c04ab50fd0
|
@ -69,6 +69,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||||
|
|
||||||
### Client Breaking Changes
|
### Client Breaking Changes
|
||||||
|
|
||||||
|
* [\#9879](https://github.com/cosmos/cosmos-sdk/pull/9879) Modify ABCI Queries to use `abci.QueryRequest` Height field if it is non-zero, otherwise continue using context height.
|
||||||
* [\#9594](https://github.com/cosmos/cosmos-sdk/pull/9594) Remove legacy REST API. Please see the [REST Endpoints Migration guide](https://docs.cosmos.network/master/migrations/rest.html) to migrate to the new REST endpoints.
|
* [\#9594](https://github.com/cosmos/cosmos-sdk/pull/9594) Remove legacy REST API. Please see the [REST Endpoints Migration guide](https://docs.cosmos.network/master/migrations/rest.html) to migrate to the new REST endpoints.
|
||||||
|
|
||||||
### CLI Breaking Changes
|
### CLI Breaking Changes
|
||||||
|
|
|
@ -112,8 +112,9 @@ func RunGRPCQuery(ctx Context, grpcCtx gocontext.Context, method string, req int
|
||||||
}
|
}
|
||||||
|
|
||||||
abciReq := abci.RequestQuery{
|
abciReq := abci.RequestQuery{
|
||||||
Path: method,
|
Path: method,
|
||||||
Data: reqBz,
|
Data: reqBz,
|
||||||
|
Height: ctx.Height,
|
||||||
}
|
}
|
||||||
|
|
||||||
abciRes, err := ctx.QueryABCI(abciReq)
|
abciRes, err := ctx.QueryABCI(abciReq)
|
||||||
|
|
|
@ -50,7 +50,9 @@ func (ctx Context) QueryStore(key tmbytes.HexBytes, storeName string) ([]byte, i
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryABCI performs a query to a Tendermint node with the provide RequestQuery.
|
// QueryABCI performs a query to a Tendermint node with the provide RequestQuery.
|
||||||
// It returns the ResultQuery obtained from the query.
|
// It returns the ResultQuery obtained from the query. The height used to perform
|
||||||
|
// the query is the RequestQuery Height if it is non-zero, otherwise the context
|
||||||
|
// height is used.
|
||||||
func (ctx Context) QueryABCI(req abci.RequestQuery) (abci.ResponseQuery, error) {
|
func (ctx Context) QueryABCI(req abci.RequestQuery) (abci.ResponseQuery, error) {
|
||||||
return ctx.queryABCI(req)
|
return ctx.queryABCI(req)
|
||||||
}
|
}
|
||||||
|
@ -76,8 +78,16 @@ func (ctx Context) queryABCI(req abci.RequestQuery) (abci.ResponseQuery, error)
|
||||||
return abci.ResponseQuery{}, err
|
return abci.ResponseQuery{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var queryHeight int64
|
||||||
|
if req.Height != 0 {
|
||||||
|
queryHeight = req.Height
|
||||||
|
} else {
|
||||||
|
// fallback on the context height
|
||||||
|
queryHeight = ctx.Height
|
||||||
|
}
|
||||||
|
|
||||||
opts := rpcclient.ABCIQueryOptions{
|
opts := rpcclient.ABCIQueryOptions{
|
||||||
Height: ctx.Height,
|
Height: queryHeight,
|
||||||
Prove: req.Prove,
|
Prove: req.Prove,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
// +build norace
|
||||||
|
|
||||||
|
package client_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
|
||||||
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *IntegrationTestSuite) TestQueryABCIHeight() {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
reqHeight int64
|
||||||
|
ctxHeight int64
|
||||||
|
expHeight int64
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "non zero request height",
|
||||||
|
reqHeight: 3,
|
||||||
|
ctxHeight: 1, // query at height 1 or 2 would cause an error
|
||||||
|
expHeight: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "empty request height - use context height",
|
||||||
|
reqHeight: 0,
|
||||||
|
ctxHeight: 3,
|
||||||
|
expHeight: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "empty request height and context height - use latest height",
|
||||||
|
reqHeight: 0,
|
||||||
|
ctxHeight: 0,
|
||||||
|
expHeight: 4,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
s.Run(tc.name, func() {
|
||||||
|
s.network.WaitForHeight(tc.expHeight)
|
||||||
|
|
||||||
|
val := s.network.Validators[0]
|
||||||
|
|
||||||
|
clientCtx := val.ClientCtx
|
||||||
|
clientCtx = clientCtx.WithHeight(tc.ctxHeight)
|
||||||
|
|
||||||
|
req := abci.RequestQuery{
|
||||||
|
Path: fmt.Sprintf("store/%s/key", banktypes.StoreKey),
|
||||||
|
Height: tc.reqHeight,
|
||||||
|
Data: banktypes.CreateAccountBalancesPrefix(val.Address),
|
||||||
|
Prove: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := clientCtx.QueryABCI(req)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
s.Require().Equal(tc.expHeight, res.Height)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue