From 235aa6c091aa66d6108be3faf99b8bb93e41b626 Mon Sep 17 00:00:00 2001 From: Gerry Agbobada <10496163+gagbo@users.noreply.github.com> Date: Mon, 17 Feb 2020 10:17:34 +0100 Subject: [PATCH] Merge PR #5648: Add min-height and max-height filters to TxSearch --- CHANGELOG.md | 3 +++ client/lcd/swagger-ui/swagger.yaml | 10 ++++++++++ types/rest/rest.go | 6 ++++++ types/rest/rest_test.go | 3 +++ 4 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa10acf3c1..5c6b57be3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,6 +100,9 @@ for JSON encoding. * (types) [\#5585](https://github.com/cosmos/cosmos-sdk/pull/5585) IBC additions: * `Coin` denomination max lenght has been increased to 32. * Added `CapabilityKey` alias for `StoreKey` to match IBC spec. +* (rest) [\#5648](https://github.com/cosmos/cosmos-sdk/pull/5648) Enhance /txs usability: + * Add `tx.minheight` key to filter transaction with an inclusive minimum block height + * Add `tx.maxheight` key to filter transaction with an inclusive maximum block height ## [v0.38.1] - 2020-02-11 diff --git a/client/lcd/swagger-ui/swagger.yaml b/client/lcd/swagger-ui/swagger.yaml index c802f42a8e..0b246d4b46 100644 --- a/client/lcd/swagger-ui/swagger.yaml +++ b/client/lcd/swagger-ui/swagger.yaml @@ -268,6 +268,16 @@ paths: description: Maximum number of items per page type: integer x-example: 1 + - in: query + name: tx.minheight + type: integer + description: "transactions on blocks with height greater or equal this value" + x-example: 25 + - in: query + name: tx.maxheight + type: integer + description: "transactions on blocks with height less than or equal this value" + x-example: 800000 responses: 200: description: All txs matching the provided events diff --git a/types/rest/rest.go b/types/rest/rest.go index a58a562525..0a2f6486a8 100644 --- a/types/rest/rest.go +++ b/types/rest/rest.go @@ -22,6 +22,8 @@ import ( const ( DefaultPage = 1 DefaultLimit = 30 // should be consistent with tendermint/tendermint/rpc/core/pipe.go:19 + TxMinHeightKey = "tx.minheight" // Inclusive minimum height filter + TxMaxHeightKey = "tx.maxheight" // Inclusive maximum height filter ) // ResponseWithHeight defines a response object type that wraps an original @@ -337,6 +339,10 @@ func ParseHTTPArgsWithLimit(r *http.Request, defaultLimit int) (tags []string, p var tag string if key == types.TxHeightKey { tag = fmt.Sprintf("%s=%s", key, value) + } else if key == TxMinHeightKey { + tag = fmt.Sprintf("%s>=%s", types.TxHeightKey, value) + } else if key == TxMaxHeightKey { + tag = fmt.Sprintf("%s<=%s", types.TxHeightKey, value) } else { tag = fmt.Sprintf("%s='%s'", key, value) } diff --git a/types/rest/rest_test.go b/types/rest/rest_test.go index 4c283a90e2..e23766cdd3 100644 --- a/types/rest/rest_test.go +++ b/types/rest/rest_test.go @@ -71,6 +71,8 @@ func TestParseHTTPArgs(t *testing.T) { reqE2 := mustNewRequest(t, "", "/?limit=-1", nil) req4 := mustNewRequest(t, "", "/?foo=faa", nil) + reqTxH := mustNewRequest(t, "", "/?tx.minheight=12&tx.maxheight=14", nil) + tests := []struct { name string req *http.Request @@ -89,6 +91,7 @@ func TestParseHTTPArgs(t *testing.T) { {"error limit 0", reqE2, httptest.NewRecorder(), []string{}, DefaultPage, DefaultLimit, true}, {"tags", req4, httptest.NewRecorder(), []string{"foo='faa'"}, DefaultPage, DefaultLimit, false}, + {"tags", reqTxH, httptest.NewRecorder(), []string{"tx.height>=12", "tx.height<=14"}, DefaultPage, DefaultLimit, false}, } for _, tt := range tests { tt := tt