From 40cff0b5e81ab593dddb259766eb55b96cddcedc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 27 Jan 2022 22:55:01 +0100 Subject: [PATCH] Fix query against the latest state in light client (#7642) (#7717) --- light/rpc/client.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/light/rpc/client.go b/light/rpc/client.go index 5e70dd5fd..1852297c7 100644 --- a/light/rpc/client.go +++ b/light/rpc/client.go @@ -127,12 +127,24 @@ func (c *Client) ABCIQuery(ctx context.Context, path string, data tmbytes.HexByt } // ABCIQueryWithOptions returns an error if opts.Prove is false. +// ABCIQueryWithOptions returns the result for the given height (opts.Height). +// If no height is provided, the results of the block preceding the latest are returned. func (c *Client) ABCIQueryWithOptions(ctx context.Context, path string, data tmbytes.HexBytes, opts rpcclient.ABCIQueryOptions) (*coretypes.ResultABCIQuery, error) { // always request the proof opts.Prove = true + // Can't return the latest block results because we won't be able to + // prove them. Return the results for the previous block instead. + if opts.Height == 0 { + res, err := c.next.Status(ctx) + if err != nil { + return nil, fmt.Errorf("can't get latest height: %w", err) + } + opts.Height = res.SyncInfo.LatestBlockHeight - 1 + } + res, err := c.next.ABCIQueryWithOptions(ctx, path, data, opts) if err != nil { return nil, err