From 03aac93499111f799314f93ed0e46b2a1d6dfbf4 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 --- client/lcd/swagger-ui/swagger.yaml | 10 ++++++++++ types/rest/rest.go | 6 ++++++ types/rest/rest_test.go | 3 +++ 3 files changed, 19 insertions(+) diff --git a/client/lcd/swagger-ui/swagger.yaml b/client/lcd/swagger-ui/swagger.yaml index 23298942e0d3..173dbd737c89 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 89770c944650..65c1bc094e8a 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 4c283a90e260..e23766cdd342 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