From 03822d52aa6f84114541a6ddcec338313e7d12a0 Mon Sep 17 00:00:00 2001
From: Aaron Craelius <aaron@regen.network>
Date: Mon, 12 Oct 2020 12:31:51 -0400
Subject: [PATCH] Refactor RegisterQueryServices -> RegisterServices (#7518)

* Refactor RegisterQueryServices -> RegisterServices

* Fix tests
---
 simapp/app.go                         |  2 +-
 tests/mocks/types_module_module.go    | 26 +++++++++++++-------------
 types/module/configurator.go          | 27 +++++++++++++++++++++++++++
 types/module/module.go                | 15 +++++++--------
 types/module/module_test.go           | 11 ++++++-----
 x/auth/module.go                      |  5 ++---
 x/auth/vesting/module.go              |  3 +--
 x/bank/module.go                      |  5 ++---
 x/capability/module.go                |  3 +--
 x/crisis/module.go                    |  3 +--
 x/distribution/module.go              |  5 ++---
 x/evidence/module.go                  |  5 ++---
 x/gov/module.go                       |  5 ++---
 x/ibc/applications/transfer/module.go |  5 ++---
 x/ibc/core/module.go                  |  5 ++---
 x/ibc/testing/mock/mock.go            |  5 +++--
 x/mint/module.go                      |  5 ++---
 x/params/module.go                    |  5 ++---
 x/slashing/module.go                  |  5 ++---
 x/staking/module.go                   |  5 ++---
 x/upgrade/module.go                   |  5 ++---
 21 files changed, 84 insertions(+), 71 deletions(-)
 create mode 100644 types/module/configurator.go

diff --git a/simapp/app.go b/simapp/app.go
index 9ba94183cd65..6f26547a4f8d 100644
--- a/simapp/app.go
+++ b/simapp/app.go
@@ -358,7 +358,7 @@ func NewSimApp(
 
 	app.mm.RegisterInvariants(&app.CrisisKeeper)
 	app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
-	app.mm.RegisterQueryServices(app.GRPCQueryRouter())
+	app.mm.RegisterServices(module.NewConfigurator(app.GRPCQueryRouter()))
 
 	// add test gRPC service for testing gRPC queries in isolation
 	testdata.RegisterTestServiceServer(app.GRPCQueryRouter(), testdata.TestServiceImpl{})
diff --git a/tests/mocks/types_module_module.go b/tests/mocks/types_module_module.go
index 816a486b2ec7..b03b3580949b 100644
--- a/tests/mocks/types_module_module.go
+++ b/tests/mocks/types_module_module.go
@@ -10,10 +10,10 @@ import (
 	codec "github.com/cosmos/cosmos-sdk/codec"
 	types "github.com/cosmos/cosmos-sdk/codec/types"
 	types0 "github.com/cosmos/cosmos-sdk/types"
-	grpc "github.com/gogo/protobuf/grpc"
+	module "github.com/cosmos/cosmos-sdk/types/module"
 	gomock "github.com/golang/mock/gomock"
 	mux "github.com/gorilla/mux"
-	"github.com/grpc-ecosystem/grpc-gateway/runtime"
+	runtime "github.com/grpc-ecosystem/grpc-gateway/runtime"
 	cobra "github.com/spf13/cobra"
 	types1 "github.com/tendermint/tendermint/abci/types"
 	reflect "reflect"
@@ -264,7 +264,7 @@ func (mr *MockAppModuleGenesisMockRecorder) RegisterRESTRoutes(arg0, arg1 interf
 // RegisterGRPCRoutes mocks base method
 func (m *MockAppModuleGenesis) RegisterGRPCRoutes(arg0 client.Context, arg1 *runtime.ServeMux) {
 	m.ctrl.T.Helper()
-	m.ctrl.Call(m, "RegisterRESTRoutes", arg0, arg1)
+	m.ctrl.Call(m, "RegisterGRPCRoutes", arg0, arg1)
 }
 
 // RegisterGRPCRoutes indicates an expected call of RegisterGRPCRoutes
@@ -539,29 +539,29 @@ func (mr *MockAppModuleMockRecorder) QuerierRoute() *gomock.Call {
 }
 
 // LegacyQuerierHandler mocks base method
-func (m *MockAppModule) LegacyQuerierHandler(*codec.LegacyAmino) types0.Querier {
+func (m *MockAppModule) LegacyQuerierHandler(arg0 *codec.LegacyAmino) types0.Querier {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "LegacyQuerierHandler")
+	ret := m.ctrl.Call(m, "LegacyQuerierHandler", arg0)
 	ret0, _ := ret[0].(types0.Querier)
 	return ret0
 }
 
 // LegacyQuerierHandler indicates an expected call of LegacyQuerierHandler
-func (mr *MockAppModuleMockRecorder) NewQuerierHandler() *gomock.Call {
+func (mr *MockAppModuleMockRecorder) LegacyQuerierHandler(arg0 interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LegacyQuerierHandler", reflect.TypeOf((*MockAppModule)(nil).LegacyQuerierHandler))
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LegacyQuerierHandler", reflect.TypeOf((*MockAppModule)(nil).LegacyQuerierHandler), arg0)
 }
 
-// RegisterQueryService mocks base method
-func (m *MockAppModule) RegisterQueryService(arg0 grpc.Server) {
+// RegisterServices mocks base method
+func (m *MockAppModule) RegisterServices(arg0 module.Configurator) {
 	m.ctrl.T.Helper()
-	m.ctrl.Call(m, "RegisterQueryService", arg0)
+	m.ctrl.Call(m, "RegisterServices", arg0)
 }
 
-// RegisterQueryService indicates an expected call of RegisterQueryService
-func (mr *MockAppModuleMockRecorder) RegisterQueryService(arg0 interface{}) *gomock.Call {
+// RegisterServices indicates an expected call of RegisterServices
+func (mr *MockAppModuleMockRecorder) RegisterServices(arg0 interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterQueryService", reflect.TypeOf((*MockAppModule)(nil).RegisterQueryService), arg0)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterServices", reflect.TypeOf((*MockAppModule)(nil).RegisterServices), arg0)
 }
 
 // BeginBlock mocks base method
diff --git a/types/module/configurator.go b/types/module/configurator.go
new file mode 100644
index 000000000000..efa83607de14
--- /dev/null
+++ b/types/module/configurator.go
@@ -0,0 +1,27 @@
+package module
+
+import "github.com/gogo/protobuf/grpc"
+
+// Configurator provides the hooks to allow modules to configure and register
+// their services in the RegisterServices method. It is designed to eventually
+// support module object capabilities isolation as described in
+// https://github.com/cosmos/cosmos-sdk/issues/7093
+type Configurator interface {
+	QueryServer() grpc.Server
+}
+
+type configurator struct {
+	queryServer grpc.Server
+}
+
+// NewConfigurator returns a new Configurator instance
+func NewConfigurator(queryServer grpc.Server) Configurator {
+	return configurator{queryServer: queryServer}
+}
+
+var _ Configurator = configurator{}
+
+// QueryServer implements the Configurator.QueryServer method
+func (c configurator) QueryServer() grpc.Server {
+	return c.queryServer
+}
diff --git a/types/module/module.go b/types/module/module.go
index d02b9b25682a..ec9c1c77b5d3 100644
--- a/types/module/module.go
+++ b/types/module/module.go
@@ -31,7 +31,6 @@ package module
 import (
 	"encoding/json"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -173,8 +172,8 @@ type AppModule interface {
 	// Deprecated: use RegisterQueryService
 	LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier
 
-	// RegisterQueryService allows a module to register a gRPC query service
-	RegisterQueryService(grpc.Server)
+	// RegisterServices allows a module to register services
+	RegisterServices(Configurator)
 
 	// ABCI
 	BeginBlock(sdk.Context, abci.RequestBeginBlock)
@@ -207,8 +206,8 @@ func (GenesisOnlyAppModule) QuerierRoute() string { return "" }
 // LegacyQuerierHandler returns an empty module querier
 func (gam GenesisOnlyAppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier { return nil }
 
-// RegisterQueryService registers all gRPC query services.
-func (gam GenesisOnlyAppModule) RegisterQueryService(grpc.Server) {}
+// RegisterServices registers all services.
+func (gam GenesisOnlyAppModule) RegisterServices(Configurator) {}
 
 // BeginBlock returns an empty module begin-block
 func (gam GenesisOnlyAppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) {}
@@ -288,10 +287,10 @@ func (m *Manager) RegisterRoutes(router sdk.Router, queryRouter sdk.QueryRouter,
 	}
 }
 
-// RegisterQueryServices registers all module query services
-func (m *Manager) RegisterQueryServices(grpcRouter grpc.Server) {
+// RegisterServices registers all module services
+func (m *Manager) RegisterServices(cfg Configurator) {
 	for _, module := range m.Modules {
-		module.RegisterQueryService(grpcRouter)
+		module.RegisterServices(cfg)
 	}
 }
 
diff --git a/types/module/module_test.go b/types/module/module_test.go
index 6dc3665043f2..67eac1695587 100644
--- a/types/module/module_test.go
+++ b/types/module/module_test.go
@@ -162,10 +162,10 @@ func TestManager_RegisterRoutes(t *testing.T) {
 	mockAppModule1.EXPECT().QuerierRoute().Times(2).Return("querierRoute1")
 	mockAppModule2.EXPECT().QuerierRoute().Times(1).Return("")
 	handler3 := sdk.Querier(nil)
-	mockAppModule1.EXPECT().NewQuerierHandler().Times(1).Return(handler3)
+	amino := codec.NewLegacyAmino()
+	mockAppModule1.EXPECT().LegacyQuerierHandler(amino).Times(1).Return(handler3)
 	queryRouter.EXPECT().AddRoute(gomock.Eq("querierRoute1"), gomock.Eq(handler3)).Times(1)
 
-	amino := codec.NewLegacyAmino()
 	mm.RegisterRoutes(router, queryRouter, amino)
 }
 
@@ -182,10 +182,11 @@ func TestManager_RegisterQueryServices(t *testing.T) {
 	require.Equal(t, 2, len(mm.Modules))
 
 	queryRouter := mocks.NewMockServer(mockCtrl)
-	mockAppModule1.EXPECT().RegisterQueryService(queryRouter).Times(1)
-	mockAppModule2.EXPECT().RegisterQueryService(queryRouter).Times(1)
+	cfg := module.NewConfigurator(queryRouter)
+	mockAppModule1.EXPECT().RegisterServices(cfg).Times(1)
+	mockAppModule2.EXPECT().RegisterServices(cfg).Times(1)
 
-	mm.RegisterQueryServices(queryRouter)
+	mm.RegisterServices(cfg)
 }
 
 func TestManager_InitGenesis(t *testing.T) {
diff --git a/x/auth/module.go b/x/auth/module.go
index 80a738551bfd..21e43bef262b 100644
--- a/x/auth/module.go
+++ b/x/auth/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -128,8 +127,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.accountKeeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.accountKeeper)
 }
 
 // InitGenesis performs genesis initialization for the auth module. It returns
diff --git a/x/auth/vesting/module.go b/x/auth/vesting/module.go
index 026b9858bbe9..b4997d60e4bd 100644
--- a/x/auth/vesting/module.go
+++ b/x/auth/vesting/module.go
@@ -3,7 +3,6 @@ package vesting
 import (
 	"encoding/json"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -102,7 +101,7 @@ func (am AppModule) Route() sdk.Route {
 func (AppModule) QuerierRoute() string { return "" }
 
 // RegisterQueryService performs a no-op.
-func (am AppModule) RegisterQueryService(_ grpc.Server) {}
+func (am AppModule) RegisterServices(_ module.Configurator) {}
 
 // LegacyQuerierHandler performs a no-op.
 func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier {
diff --git a/x/bank/module.go b/x/bank/module.go
index 6bbf0e7dc382..1b3d68f4607d 100644
--- a/x/bank/module.go
+++ b/x/bank/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -97,8 +96,8 @@ type AppModule struct {
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // NewAppModule creates a new AppModule object
diff --git a/x/capability/module.go b/x/capability/module.go
index 1f5e17df3272..cc1d6272eb0f 100644
--- a/x/capability/module.go
+++ b/x/capability/module.go
@@ -5,7 +5,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -114,7 +113,7 @@ func (am AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier { retur
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(grpc.Server) {}
+func (am AppModule) RegisterServices(module.Configurator) {}
 
 // RegisterInvariants registers the capability module's invariants.
 func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}
diff --git a/x/crisis/module.go b/x/crisis/module.go
index cc0beac0637a..fdc2ffb03d6f 100644
--- a/x/crisis/module.go
+++ b/x/crisis/module.go
@@ -4,7 +4,6 @@ import (
 	"encoding/json"
 	"fmt"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -115,7 +114,7 @@ func (AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier { return n
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(grpc.Server) {}
+func (am AppModule) RegisterServices(module.Configurator) {}
 
 // InitGenesis performs genesis initialization for the crisis module. It returns
 // no validator updates.
diff --git a/x/distribution/module.go b/x/distribution/module.go
index efd6bcc739a2..9c53d5619170 100644
--- a/x/distribution/module.go
+++ b/x/distribution/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -142,8 +141,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis performs genesis initialization for the distribution module. It returns
diff --git a/x/evidence/module.go b/x/evidence/module.go
index 078cd6e2c925..1ac32c2148b7 100644
--- a/x/evidence/module.go
+++ b/x/evidence/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -151,8 +150,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // RegisterInvariants registers the evidence module's invariants.
diff --git a/x/gov/module.go b/x/gov/module.go
index 033bae0a3f28..31c0e5c05d80 100644
--- a/x/gov/module.go
+++ b/x/gov/module.go
@@ -8,7 +8,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -158,8 +157,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis performs genesis initialization for the gov module. It returns
diff --git a/x/ibc/applications/transfer/module.go b/x/ibc/applications/transfer/module.go
index 9e8830c1c75d..4d73f693cd2a 100644
--- a/x/ibc/applications/transfer/module.go
+++ b/x/ibc/applications/transfer/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -123,8 +122,8 @@ func (am AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier {
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis performs genesis initialization for the ibc-transfer module. It returns
diff --git a/x/ibc/core/module.go b/x/ibc/core/module.go
index 3f82bfcd9ddb..35a734ccf959 100644
--- a/x/ibc/core/module.go
+++ b/x/ibc/core/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -132,8 +131,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 }
 
 // RegisterQueryService registers the gRPC query service for the ibc module.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryService(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryService(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis performs genesis initialization for the ibc module. It returns
diff --git a/x/ibc/testing/mock/mock.go b/x/ibc/testing/mock/mock.go
index 27613773619c..89ed2a4dd468 100644
--- a/x/ibc/testing/mock/mock.go
+++ b/x/ibc/testing/mock/mock.go
@@ -3,7 +3,8 @@ package mock
 import (
 	"encoding/json"
 
-	"github.com/gogo/protobuf/grpc"
+	"github.com/cosmos/cosmos-sdk/types/module"
+
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -102,7 +103,7 @@ func (am AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier {
 }
 
 // RegisterQueryService implements the AppModule interface.
-func (am AppModule) RegisterQueryService(server grpc.Server) {}
+func (am AppModule) RegisterServices(module.Configurator) {}
 
 // InitGenesis implements the AppModule interface.
 func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate {
diff --git a/x/mint/module.go b/x/mint/module.go
index b483696b9228..0a29598add2c 100644
--- a/x/mint/module.go
+++ b/x/mint/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -126,8 +125,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a gRPC query service to respond to the
 // module-specific gRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis performs genesis initialization for the mint module. It returns
diff --git a/x/params/module.go b/x/params/module.go
index 0c947938311d..b95f76947ddb 100644
--- a/x/params/module.go
+++ b/x/params/module.go
@@ -5,7 +5,6 @@ import (
 	"encoding/json"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -112,8 +111,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a gRPC query service to respond to the
 // module-specific gRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	proposal.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	proposal.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // ProposalContents returns all the params content functions used to
diff --git a/x/slashing/module.go b/x/slashing/module.go
index 21fa5e336090..f74c4a84dfd2 100644
--- a/x/slashing/module.go
+++ b/x/slashing/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -140,8 +139,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis performs genesis initialization for the slashing module. It returns
diff --git a/x/staking/module.go b/x/staking/module.go
index f91d0eee7617..6a344265b74a 100644
--- a/x/staking/module.go
+++ b/x/staking/module.go
@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"math/rand"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 
 	"github.com/gorilla/mux"
@@ -136,9 +135,9 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
+func (am AppModule) RegisterServices(cfg module.Configurator) {
 	querier := keeper.Querier{Keeper: am.keeper}
-	types.RegisterQueryServer(server, querier)
+	types.RegisterQueryServer(cfg.QueryServer(), querier)
 }
 
 // InitGenesis performs genesis initialization for the staking module. It returns
diff --git a/x/upgrade/module.go b/x/upgrade/module.go
index bc44a497426e..df5e23a2f4f2 100644
--- a/x/upgrade/module.go
+++ b/x/upgrade/module.go
@@ -4,7 +4,6 @@ import (
 	"context"
 	"encoding/json"
 
-	"github.com/gogo/protobuf/grpc"
 	"github.com/gorilla/mux"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/spf13/cobra"
@@ -97,8 +96,8 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
 
 // RegisterQueryService registers a GRPC query service to respond to the
 // module-specific GRPC queries.
-func (am AppModule) RegisterQueryService(server grpc.Server) {
-	types.RegisterQueryServer(server, am.keeper)
+func (am AppModule) RegisterServices(cfg module.Configurator) {
+	types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
 }
 
 // InitGenesis is ignored, no sense in serializing future upgrades