From c221d7f1de96ab3b74a8f64dcdd7566dc90ebf66 Mon Sep 17 00:00:00 2001 From: Marko Date: Sun, 2 Oct 2022 15:03:03 +0200 Subject: [PATCH] chore: minor cleanup of types (#13430) --- CHANGELOG.md | 1 + docs/basics/query-lifecycle.md | 2 - docs/building-modules/module-manager.md | 3 - docs/building-modules/query-services.md | 27 --- testutil/mock/types_router.go | 31 ---- types/errors/abci.go | 26 --- types/kv/list.go | 235 ------------------------ types/module/module.go | 3 - types/queryable.go | 9 - types/router.go | 6 - x/evidence/keeper/keeper_test.go | 3 +- x/feegrant/module/module.go | 5 - 12 files changed, 2 insertions(+), 349 deletions(-) delete mode 100644 types/kv/list.go delete mode 100644 types/queryable.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 7de6291c85d2..3126c32f7043 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -149,6 +149,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/staking) [#12973](https://github.com/cosmos/cosmos-sdk/pull/12973) Removed `stakingkeeper.RandomValidator`. Use `testutil.RandSliceElem(r, sk.GetAllValidators(ctx))` instead. * (x/gov) [13160](https://github.com/cosmos/cosmos-sdk/pull/13160) Remove custom marshaling of proposl and voteoption. * (x/auth) [13411](https://github.com/cosmos/cosmos-sdk/pull/13411) Change account id to use uint64 in `AccountAddressByID` grpc query. +* (types) [13430](https://github.com/cosmos/cosmos-sdk/pull/13430) Remove unused code `ResponseCheckTx` and `ResponseDeliverTx` ### CLI Breaking Changes diff --git a/docs/basics/query-lifecycle.md b/docs/basics/query-lifecycle.md index 5aca3e345374..441bf71f13b4 100644 --- a/docs/basics/query-lifecycle.md +++ b/docs/basics/query-lifecycle.md @@ -115,8 +115,6 @@ Read more about ABCI Clients and Tendermint RPC in the [Tendermint documentation When a query is received by the full-node after it has been relayed from the underlying consensus engine, it is now being handled within an environment that understands application-specific types and has a copy of the state. [`baseapp`](../core/baseapp.md) implements the ABCI [`Query()`](../core/baseapp.md#query) function and handles gRPC queries. The query route is parsed, and it matches the fully-qualified service method name of an existing service method (most likely in one of the modules), then `baseapp` will relay the request to the relevant module. -Apart from gRPC routes, `baseapp` also handles four different types of queries: `app`, `store`, `p2p`, and `custom`. The first three types (`app`, `store`, `p2p`) are purely application-level and thus directly handled by `baseapp` or the stores, but the `custom` query type requires `baseapp` to route the query to a module's [legacy queriers](../building-modules/query-services.md#legacy-queriers). To learn more about these queries, please refer to [this guide](../core/grpc_rest.md#tendermint-rpc). - Since `MyQuery` has a Protobuf fully-qualified service method name from the `staking` module (recall `/cosmos.staking.v1beta1.Query/Delegations`), `baseapp` first parses the path, then uses its own internal `GRPCQueryRouter` to retrieve the corresponding gRPC handler, and routes the query to the module. The gRPC handler is responsible for recognizing this query, retrieving the appropriate values from the application's stores, and returning a response. Read more about query services [here](../building-modules/query-services.md). Once a result is received from the querier, `baseapp` begins the process of returning a response to the user. diff --git a/docs/building-modules/module-manager.md b/docs/building-modules/module-manager.md index 666af7a7930c..f94ba84229a2 100644 --- a/docs/building-modules/module-manager.md +++ b/docs/building-modules/module-manager.md @@ -68,9 +68,6 @@ The `AppModule` interface defines the inter-dependent methods that modules need Let us go through the methods of `AppModule`: * `RegisterInvariants(sdk.InvariantRegistry)`: Registers the [`invariants`](./invariants.md) of the module. If an invariant deviates from its predicted value, the [`InvariantRegistry`](./invariants.md#registry) triggers appropriate logic (most often the chain will be halted). -* `Route()` (deprecated): Returns the route for [`message`s](./messages-and-queries.md#messages) to be routed to the module by [`BaseApp`](../core/baseapp.md#message-routing). -* `QuerierRoute()` (deprecated): Returns the name of the module's query route, for [`queries`](./messages-and-queries.md#queries) to be routes to the module by [`BaseApp`](../core/baseapp.md#query-routing). -* `LegacyQuerierHandler(*codec.LegacyAmino)` (deprecated): Returns a [`querier`](./query-services.md#legacy-queriers) given the query `path`, in order to process the `query`. * `RegisterServices(Configurator)`: Allows a module to register services. * `BeginBlock(sdk.Context, abci.RequestBeginBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the beginning of each block. Implement empty if no logic needs to be triggered at the beginning of each block for this module. * `EndBlock(sdk.Context, abci.RequestEndBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the end of each block. This is also where the module can inform the underlying consensus engine of validator set changes (e.g. the `staking` module). Implement empty if no logic needs to be triggered at the end of each block for this module. diff --git a/docs/building-modules/query-services.md b/docs/building-modules/query-services.md index a0ea91932ca7..7bb9d93c9478 100644 --- a/docs/building-modules/query-services.md +++ b/docs/building-modules/query-services.md @@ -45,33 +45,6 @@ Here's an example implementation for the bank module: +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0/x/bank/keeper/grpc_query.go -### Legacy Queriers - -Module legacy `querier`s are typically implemented in a `./keeper/querier.go` file inside the module's folder. The [module manager](./module-manager.md) is used to add the module's `querier`s to the [application's `queryRouter`](../core/baseapp.md#query-routing) via the `NewQuerier()` method. Typically, the manager's `NewQuerier()` method simply calls a `NewQuerier()` method defined in `keeper/querier.go`, which looks like the following: - -```go -func NewQuerier(keeper Keeper) sdk.Querier { - return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { - switch path[0] { - case QueryType1: - return queryType1(ctx, path[1:], req, keeper) - - case QueryType2: - return queryType2(ctx, path[1:], req, keeper) - - default: - return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) - } - } -} -``` - -This simple switch returns a `querier` function specific to the type of the received `query`. At this point of the [query lifecycle](../basics/query-lifecycle.md), the first element of the `path` (`path[0]`) contains the type of the query. The following elements are either empty or contain arguments needed to process the query. - -The `querier` functions themselves are pretty straightforward. They generally fetch a value or values from the state using the [`keeper`](./keeper.md). Then, they marshall the value(s) using the [`codec`](../core/encoding.md) and return the `[]byte` obtained as result. - -For a deeper look at `querier`s, see this [example implementation of a `querier` function](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0/x/gov/keeper/querier.go) from the bank module. - ## Next {hide} Learn about [`BeginBlocker` and `EndBlocker`](./beginblock-endblock.md) {hide} diff --git a/testutil/mock/types_router.go b/testutil/mock/types_router.go index 74b046c8024c..f64d86161771 100644 --- a/testutil/mock/types_router.go +++ b/testutil/mock/types_router.go @@ -5,9 +5,6 @@ package mock import ( - reflect "reflect" - - types "github.com/cosmos/cosmos-sdk/types" gomock "github.com/golang/mock/gomock" ) @@ -33,31 +30,3 @@ func NewMockQueryRouter(ctrl *gomock.Controller) *MockQueryRouter { func (m *MockQueryRouter) EXPECT() *MockQueryRouterMockRecorder { return m.recorder } - -// AddRoute mocks base method. -func (m *MockQueryRouter) AddRoute(r string, h types.Querier) types.QueryRouter { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddRoute", r, h) - ret0, _ := ret[0].(types.QueryRouter) - return ret0 -} - -// AddRoute indicates an expected call of AddRoute. -func (mr *MockQueryRouterMockRecorder) AddRoute(r, h interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddRoute", reflect.TypeOf((*MockQueryRouter)(nil).AddRoute), r, h) -} - -// Route mocks base method. -func (m *MockQueryRouter) Route(path string) types.Querier { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Route", path) - ret0, _ := ret[0].(types.Querier) - return ret0 -} - -// Route indicates an expected call of Route. -func (mr *MockQueryRouterMockRecorder) Route(path interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Route", reflect.TypeOf((*MockQueryRouter)(nil).Route), path) -} diff --git a/types/errors/abci.go b/types/errors/abci.go index 729e3c554085..ccee41aeac39 100644 --- a/types/errors/abci.go +++ b/types/errors/abci.go @@ -4,19 +4,6 @@ import ( abci "github.com/tendermint/tendermint/abci/types" ) -// ResponseCheckTx returns an ABCI ResponseCheckTx object with fields filled in -// from the given error and gas values. -func ResponseCheckTx(err error, gw, gu uint64, debug bool) abci.ResponseCheckTx { - space, code, log := ABCIInfo(err, debug) - return abci.ResponseCheckTx{ - Codespace: space, - Code: code, - Log: log, - GasWanted: int64(gw), - GasUsed: int64(gu), - } -} - // ResponseCheckTxWithEvents returns an ABCI ResponseCheckTx object with fields filled in // from the given error, gas values and events. func ResponseCheckTxWithEvents(err error, gw, gu uint64, events []abci.Event, debug bool) abci.ResponseCheckTx { @@ -31,19 +18,6 @@ func ResponseCheckTxWithEvents(err error, gw, gu uint64, events []abci.Event, de } } -// ResponseDeliverTx returns an ABCI ResponseDeliverTx object with fields filled in -// from the given error and gas values. -func ResponseDeliverTx(err error, gw, gu uint64, debug bool) abci.ResponseDeliverTx { - space, code, log := ABCIInfo(err, debug) - return abci.ResponseDeliverTx{ - Codespace: space, - Code: code, - Log: log, - GasWanted: int64(gw), - GasUsed: int64(gu), - } -} - // ResponseDeliverTxWithEvents returns an ABCI ResponseDeliverTx object with fields filled in // from the given error, gas values and events. func ResponseDeliverTxWithEvents(err error, gw, gu uint64, events []abci.Event, debug bool) abci.ResponseDeliverTx { diff --git a/types/kv/list.go b/types/kv/list.go deleted file mode 100644 index f038ccfa0ec0..000000000000 --- a/types/kv/list.go +++ /dev/null @@ -1,235 +0,0 @@ -package kv - -// This code was copied from pkg.go.dev/container/list, but specially adapted -// for use with kv.Pair to avoid the type assertion CPU expense of using Value with -// an interface, per https://github.com/cosmos/cosmos-sdk/issues/8810 -// -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Element is an element of a linked list. -type Element struct { - // Next and previous pointers in the doubly-linked list of elements. - // To simplify the implementation, internally a list l is implemented - // as a ring, such that &l.root is both the next element of the last - // list element (l.Back()) and the previous element of the first list - // element (l.Front()). - next, prev *Element - - // The list to which this element belongs. - list *List - - // The value stored with this element. - Value *Pair -} - -// Next returns the next list element or nil. -func (e *Element) Next() *Element { - if p := e.next; e.list != nil && p != &e.list.root { - return p - } - return nil -} - -// Prev returns the previous list element or nil. -func (e *Element) Prev() *Element { - if p := e.prev; e.list != nil && p != &e.list.root { - return p - } - return nil -} - -// List represents a doubly linked list. -// The zero value for List is an empty list ready to use. -type List struct { - root Element // sentinel list element, only &root, root.prev, and root.next are used - len int // current list length excluding (this) sentinel element -} - -// Init initializes or clears list l. -func (l *List) Init() *List { - l.root.next = &l.root - l.root.prev = &l.root - l.len = 0 - return l -} - -// NewList returns an initialized list. -func NewList() *List { return new(List).Init() } - -// Len returns the number of elements of list l. -// The complexity is O(1). -func (l *List) Len() int { return l.len } - -// Front returns the first element of list l or nil if the list is empty. -func (l *List) Front() *Element { - if l.len == 0 { - return nil - } - return l.root.next -} - -// Back returns the last element of list l or nil if the list is empty. -func (l *List) Back() *Element { - if l.len == 0 { - return nil - } - return l.root.prev -} - -// lazyInit lazily initializes a zero List value. -func (l *List) lazyInit() { - if l.root.next == nil { - l.Init() - } -} - -// insert inserts e after at, increments l.len, and returns e. -func (l *List) insert(e, at *Element) *Element { - e.prev = at - e.next = at.next - e.prev.next = e - e.next.prev = e - e.list = l - l.len++ - return e -} - -// insertValue is a convenience wrapper for insert(&Element{Value: v}, at). -func (l *List) insertValue(v *Pair, at *Element) *Element { - return l.insert(&Element{Value: v}, at) -} - -// remove removes e from its list, decrements l.len, and returns e. -func (l *List) remove(e *Element) *Element { - e.prev.next = e.next - e.next.prev = e.prev - e.next = nil // avoid memory leaks - e.prev = nil // avoid memory leaks - e.list = nil - l.len-- - return e -} - -// move moves e to next to at and returns e. -func (l *List) move(e, at *Element) *Element { - if e == at { - return e - } - e.prev.next = e.next - e.next.prev = e.prev - - e.prev = at - e.next = at.next - e.prev.next = e - e.next.prev = e - - return e -} - -// Remove removes e from l if e is an element of list l. -// It returns the element value e.Value. -// The element must not be nil. -func (l *List) Remove(e *Element) *Pair { - if e.list == l { - // if e.list == l, l must have been initialized when e was inserted - // in l or l == nil (e is a zero Element) and l.remove will crash - l.remove(e) - } - return e.Value -} - -// PushFront inserts a new element e with value v at the front of list l and returns e. -func (l *List) PushFront(v *Pair) *Element { - l.lazyInit() - return l.insertValue(v, &l.root) -} - -// PushBack inserts a new element e with value v at the back of list l and returns e. -func (l *List) PushBack(v *Pair) *Element { - l.lazyInit() - return l.insertValue(v, l.root.prev) -} - -// InsertBefore inserts a new element e with value v immediately before mark and returns e. -// If mark is not an element of l, the list is not modified. -// The mark must not be nil. -func (l *List) InsertBefore(v *Pair, mark *Element) *Element { - if mark.list != l { - return nil - } - // see comment in List.Remove about initialization of l - return l.insertValue(v, mark.prev) -} - -// InsertAfter inserts a new element e with value v immediately after mark and returns e. -// If mark is not an element of l, the list is not modified. -// The mark must not be nil. -func (l *List) InsertAfter(v *Pair, mark *Element) *Element { - if mark.list != l { - return nil - } - // see comment in List.Remove about initialization of l - return l.insertValue(v, mark) -} - -// MoveToFront moves element e to the front of list l. -// If e is not an element of l, the list is not modified. -// The element must not be nil. -func (l *List) MoveToFront(e *Element) { - if e.list != l || l.root.next == e { - return - } - // see comment in List.Remove about initialization of l - l.move(e, &l.root) -} - -// MoveToBack moves element e to the back of list l. -// If e is not an element of l, the list is not modified. -// The element must not be nil. -func (l *List) MoveToBack(e *Element) { - if e.list != l || l.root.prev == e { - return - } - // see comment in List.Remove about initialization of l - l.move(e, l.root.prev) -} - -// MoveBefore moves element e to its new position before mark. -// If e or mark is not an element of l, or e == mark, the list is not modified. -// The element and mark must not be nil. -func (l *List) MoveBefore(e, mark *Element) { - if e.list != l || e == mark || mark.list != l { - return - } - l.move(e, mark.prev) -} - -// MoveAfter moves element e to its new position after mark. -// If e or mark is not an element of l, or e == mark, the list is not modified. -// The element and mark must not be nil. -func (l *List) MoveAfter(e, mark *Element) { - if e.list != l || e == mark || mark.list != l { - return - } - l.move(e, mark) -} - -// PushBackList inserts a copy of another list at the back of list l. -// The lists l and other may be the same. They must not be nil. -func (l *List) PushBackList(other *List) { - l.lazyInit() - for i, e := other.Len(), other.Front(); i > 0; i, e = i-1, e.Next() { - l.insertValue(e.Value, l.root.prev) - } -} - -// PushFrontList inserts a copy of another list at the front of list l. -// The lists l and other may be the same. They must not be nil. -func (l *List) PushFrontList(other *List) { - l.lazyInit() - for i, e := other.Len(), other.Back(); i > 0; i, e = i-1, e.Prev() { - l.insertValue(e.Value, &l.root) - } -} diff --git a/types/module/module.go b/types/module/module.go index b03bb4c4f7c7..2955fcbbd0cd 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -195,9 +195,6 @@ func (GenesisOnlyAppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} // QuerierRoute returns an empty module querier route func (GenesisOnlyAppModule) QuerierRoute() string { return "" } -// LegacyQuerierHandler returns an empty module querier -func (gam GenesisOnlyAppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier { return nil } - // RegisterServices registers all services. func (gam GenesisOnlyAppModule) RegisterServices(Configurator) {} diff --git a/types/queryable.go b/types/queryable.go deleted file mode 100644 index f89965906af8..000000000000 --- a/types/queryable.go +++ /dev/null @@ -1,9 +0,0 @@ -package types - -import ( - abci "github.com/tendermint/tendermint/abci/types" -) - -// Querier defines a function type that a module querier must implement to handle -// custom client queries. -type Querier = func(ctx Context, path []string, req abci.RequestQuery) ([]byte, error) diff --git a/types/router.go b/types/router.go index b8a1da2ae742..07e81f646dcb 100644 --- a/types/router.go +++ b/types/router.go @@ -25,9 +25,3 @@ var ( // characters only. IsNumeric = regexp.MustCompile(`^[0-9]+$`).MatchString ) - -// QueryRouter provides queryables for each query path. -type QueryRouter interface { - AddRoute(r string, h Querier) QueryRouter - Route(path string) Querier -} diff --git a/x/evidence/keeper/keeper_test.go b/x/evidence/keeper/keeper_test.go index 8f6ea80087fc..4bbc9932fd78 100644 --- a/x/evidence/keeper/keeper_test.go +++ b/x/evidence/keeper/keeper_test.go @@ -72,8 +72,7 @@ func testEquivocationHandler(_ interface{}) types.Handler { type KeeperTestSuite struct { suite.Suite - ctx sdk.Context - querier sdk.Querier + ctx sdk.Context evidenceKeeper keeper.Keeper bankKeeper *evidencetestutil.MockBankKeeper diff --git a/x/feegrant/module/module.go b/x/feegrant/module/module.go index 766173e1e9f2..6e1ed2e2fbb7 100644 --- a/x/feegrant/module/module.go +++ b/x/feegrant/module/module.go @@ -69,11 +69,6 @@ func (AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) { feegrant.RegisterInterfaces(registry) } -// LegacyQuerierHandler returns the feegrant module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // DefaultGenesis returns default genesis state as raw bytes for the feegrant // module. func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {