Add panic handler on queries (#8039)

* Add test that panics

* Add panic in abci query

* Move proto gen files to correct place

* Add panic handler in grpc server

* Fix test

* Fix build

* Use %v

* Better panic message

* Fix tests

Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
This commit is contained in:
Amaury 2020-11-30 17:59:35 +01:00 committed by GitHub
parent bcb3240d06
commit 7ad2aab2c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 175 additions and 129 deletions

View File

@ -379,9 +379,17 @@ func (app *BaseApp) snapshot(height int64) {
// Query implements the ABCI interface. It delegates to CommitMultiStore if it
// implements Queryable.
func (app *BaseApp) Query(req abci.RequestQuery) abci.ResponseQuery {
func (app *BaseApp) Query(req abci.RequestQuery) (res abci.ResponseQuery) {
defer telemetry.MeasureSince(time.Now(), "abci", "query")
// Add panic recovery for all queries.
// ref: https://github.com/cosmos/cosmos-sdk/pull/8039
defer func() {
if r := recover(); r != nil {
res = sdkerrors.QueryResult(sdkerrors.Wrapf(sdkerrors.ErrPanic, "%v", r))
}
}()
// when a client did not provide a query height, manually inject the latest
if req.Height == 0 {
req.Height = app.LastBlockHeight()

View File

@ -5,6 +5,8 @@ import (
"strconv"
gogogrpc "github.com/gogo/protobuf/grpc"
grpcmiddleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpcrecovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
@ -74,7 +76,10 @@ func (app *BaseApp) RegisterGRPCServer(server gogogrpc.Server) {
newMethods[i] = grpc.MethodDesc{
MethodName: method.MethodName,
Handler: func(srv interface{}, ctx context.Context, dec func(interface{}) error, _ grpc.UnaryServerInterceptor) (interface{}, error) {
return methodHandler(srv, ctx, dec, interceptor)
return methodHandler(srv, ctx, dec, grpcmiddleware.ChainUnaryServer(
grpcrecovery.UnaryServerInterceptor(),
interceptor,
))
},
}
}

View File

@ -1,11 +1,12 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: cosmos/base/tendermint/v1beta1/query.proto
package query
package tmservice
import (
context "context"
fmt "fmt"
query "github.com/cosmos/cosmos-sdk/types/query"
_ "github.com/gogo/protobuf/gogoproto"
grpc1 "github.com/gogo/protobuf/grpc"
proto "github.com/gogo/protobuf/proto"
@ -35,7 +36,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
type GetValidatorSetByHeightRequest struct {
Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
// pagination defines an pagination for the request.
Pagination *PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"`
Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"`
}
func (m *GetValidatorSetByHeightRequest) Reset() { *m = GetValidatorSetByHeightRequest{} }
@ -78,7 +79,7 @@ func (m *GetValidatorSetByHeightRequest) GetHeight() int64 {
return 0
}
func (m *GetValidatorSetByHeightRequest) GetPagination() *PageRequest {
func (m *GetValidatorSetByHeightRequest) GetPagination() *query.PageRequest {
if m != nil {
return m.Pagination
}
@ -90,7 +91,7 @@ type GetValidatorSetByHeightResponse struct {
BlockHeight int64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"`
Validators []*Validator `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators,omitempty"`
// pagination defines an pagination for the response.
Pagination *PageResponse `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"`
Pagination *query.PageResponse `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"`
}
func (m *GetValidatorSetByHeightResponse) Reset() { *m = GetValidatorSetByHeightResponse{} }
@ -140,7 +141,7 @@ func (m *GetValidatorSetByHeightResponse) GetValidators() []*Validator {
return nil
}
func (m *GetValidatorSetByHeightResponse) GetPagination() *PageResponse {
func (m *GetValidatorSetByHeightResponse) GetPagination() *query.PageResponse {
if m != nil {
return m.Pagination
}
@ -150,7 +151,7 @@ func (m *GetValidatorSetByHeightResponse) GetPagination() *PageResponse {
// GetLatestValidatorSetRequest is the request type for the Query/GetValidatorSetByHeight RPC method.
type GetLatestValidatorSetRequest struct {
// pagination defines an pagination for the request.
Pagination *PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"`
Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"`
}
func (m *GetLatestValidatorSetRequest) Reset() { *m = GetLatestValidatorSetRequest{} }
@ -186,7 +187,7 @@ func (m *GetLatestValidatorSetRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_GetLatestValidatorSetRequest proto.InternalMessageInfo
func (m *GetLatestValidatorSetRequest) GetPagination() *PageRequest {
func (m *GetLatestValidatorSetRequest) GetPagination() *query.PageRequest {
if m != nil {
return m.Pagination
}
@ -198,7 +199,7 @@ type GetLatestValidatorSetResponse struct {
BlockHeight int64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"`
Validators []*Validator `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators,omitempty"`
// pagination defines an pagination for the response.
Pagination *PageResponse `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"`
Pagination *query.PageResponse `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"`
}
func (m *GetLatestValidatorSetResponse) Reset() { *m = GetLatestValidatorSetResponse{} }
@ -248,7 +249,7 @@ func (m *GetLatestValidatorSetResponse) GetValidators() []*Validator {
return nil
}
func (m *GetLatestValidatorSetResponse) GetPagination() *PageResponse {
func (m *GetLatestValidatorSetResponse) GetPagination() *query.PageResponse {
if m != nil {
return m.Pagination
}
@ -864,72 +865,72 @@ func init() {
}
var fileDescriptor_40c93fb3ef485c5d = []byte{
// 1031 bytes of a gzipped FileDescriptorProto
// 1040 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x6f, 0x1b, 0x45,
0x14, 0xcf, 0xc6, 0x6d, 0x1c, 0x3f, 0x57, 0x90, 0x4c, 0x4a, 0xb3, 0xb5, 0x52, 0x37, 0xec, 0xa1,
0x4d, 0x88, 0xb2, 0x2b, 0x3b, 0x84, 0x82, 0xf8, 0x27, 0x85, 0x40, 0x1a, 0x15, 0xaa, 0x68, 0x83,
0x38, 0x20, 0xa4, 0xd5, 0xd8, 0x3b, 0xd9, 0x8c, 0x62, 0xef, 0x4c, 0x77, 0xc6, 0x41, 0x16, 0xaa,
0x40, 0xfd, 0x00, 0x08, 0x89, 0xaf, 0xc0, 0x85, 0x2f, 0xc0, 0x11, 0x71, 0xe4, 0x46, 0x25, 0x24,
0xe8, 0x11, 0x25, 0x7c, 0x0a, 0x4e, 0x68, 0x67, 0x66, 0xed, 0xdd, 0x26, 0xa9, 0xed, 0x1c, 0x90,
0x38, 0x79, 0xf6, 0xbd, 0xf7, 0x7b, 0xf3, 0xfb, 0xbd, 0x79, 0x33, 0x7e, 0xf0, 0x5a, 0x9b, 0x89,
0x2e, 0x13, 0x5e, 0x0b, 0x0b, 0xe2, 0x49, 0x12, 0x87, 0x24, 0xe9, 0xd2, 0x58, 0x7a, 0xc7, 0x8d,
0x16, 0x91, 0xb8, 0xe1, 0x3d, 0xea, 0x91, 0xa4, 0xef, 0xf2, 0x84, 0x49, 0x86, 0xea, 0x3a, 0xd6,
0x4d, 0x63, 0xdd, 0x61, 0xac, 0x6b, 0x62, 0x6b, 0xd7, 0x23, 0x16, 0x31, 0x15, 0xea, 0xa5, 0x2b,
0x8d, 0xaa, 0x2d, 0x45, 0x8c, 0x45, 0x1d, 0xe2, 0x61, 0x4e, 0x3d, 0x1c, 0xc7, 0x4c, 0x62, 0x49,
0x59, 0x2c, 0x8c, 0xb7, 0x96, 0xdb, 0x93, 0x37, 0xb9, 0x27, 0xfb, 0x9c, 0x64, 0xbe, 0xa5, 0x9c,
0x4f, 0xd9, 0xbd, 0x56, 0x87, 0xb5, 0x8f, 0x2e, 0xf4, 0xe6, 0xb1, 0x05, 0x5d, 0x4a, 0xc4, 0x40,
0x12, 0xc7, 0x11, 0x8d, 0x15, 0x09, 0x1d, 0xeb, 0x7c, 0x63, 0x41, 0x7d, 0x87, 0xc8, 0xcf, 0x70,
0x87, 0x86, 0x58, 0xb2, 0x64, 0x9f, 0xc8, 0xad, 0xfe, 0x7d, 0x42, 0xa3, 0x43, 0xe9, 0x93, 0x47,
0x3d, 0x22, 0x24, 0xba, 0x01, 0x33, 0x87, 0xca, 0x60, 0x5b, 0xcb, 0xd6, 0x4a, 0xc9, 0x37, 0x5f,
0xe8, 0x23, 0x80, 0x61, 0x3a, 0x7b, 0x7a, 0xd9, 0x5a, 0xa9, 0x36, 0xef, 0xb8, 0xf9, 0x3a, 0xe9,
0x02, 0x9a, 0xbd, 0xdd, 0x3d, 0x1c, 0x11, 0x93, 0xd3, 0xcf, 0x21, 0x9d, 0x67, 0x16, 0xdc, 0xbe,
0x90, 0x82, 0xe0, 0x2c, 0x16, 0x04, 0xbd, 0x0a, 0xd7, 0x94, 0xfe, 0xa0, 0xc0, 0xa4, 0xaa, 0x6c,
0x3a, 0x14, 0xed, 0x02, 0x1c, 0x67, 0x29, 0x84, 0x3d, 0xbd, 0x5c, 0x5a, 0xa9, 0x36, 0x57, 0xdd,
0x17, 0x1f, 0x9b, 0x3b, 0xd8, 0xd4, 0xcf, 0x81, 0xd1, 0x4e, 0x41, 0x59, 0x49, 0x29, 0xbb, 0x3b,
0x52, 0x99, 0xa6, 0x5a, 0x90, 0x76, 0x00, 0x4b, 0x3b, 0x44, 0x7e, 0x8c, 0x25, 0x11, 0x05, 0x7d,
0x59, 0x69, 0x8b, 0x25, 0xb4, 0x2e, 0x5d, 0xc2, 0x3f, 0x2c, 0xb8, 0x75, 0xc1, 0x46, 0xff, 0xef,
0x02, 0x7e, 0x6b, 0x41, 0x65, 0xb0, 0x05, 0xb2, 0xa1, 0x8c, 0xc3, 0x30, 0x21, 0x42, 0x28, 0xfe,
0xd7, 0xfc, 0xec, 0x13, 0x2d, 0x42, 0x99, 0xf7, 0x5a, 0xc1, 0x11, 0xe9, 0xab, 0x46, 0xac, 0xf8,
0x33, 0xbc, 0xd7, 0x7a, 0x40, 0xfa, 0xa9, 0xee, 0x63, 0x26, 0x69, 0x1c, 0x05, 0x9c, 0x7d, 0x49,
0x12, 0xc5, 0xa5, 0xe4, 0x57, 0xb5, 0x6d, 0x2f, 0x35, 0xa1, 0x35, 0x98, 0xe7, 0x09, 0xe3, 0x4c,
0x90, 0x24, 0xe0, 0x09, 0x65, 0x09, 0x95, 0x7d, 0xfb, 0x8a, 0x8a, 0x9b, 0xcb, 0x1c, 0x7b, 0xc6,
0xee, 0x34, 0x60, 0x71, 0x87, 0xc8, 0xad, 0xb4, 0x6c, 0x63, 0xde, 0x13, 0xe7, 0x6b, 0xb0, 0xcf,
0x42, 0xcc, 0xb1, 0xbc, 0x0e, 0xb3, 0xfa, 0x58, 0x68, 0x68, 0x8e, 0xff, 0x66, 0xbe, 0xca, 0xfa,
0x56, 0x2b, 0xe8, 0xee, 0xb6, 0x5f, 0x56, 0xa1, 0xbb, 0x21, 0x5a, 0x87, 0xab, 0x6a, 0x69, 0x2e,
0xdd, 0xe2, 0x05, 0x10, 0x5f, 0x47, 0x39, 0x8b, 0xf0, 0xca, 0xa0, 0x39, 0xb4, 0x43, 0x33, 0x76,
0x1e, 0xc3, 0x8d, 0xe7, 0x1d, 0xff, 0x25, 0xaf, 0x05, 0x98, 0xdf, 0x21, 0x72, 0xbf, 0x1f, 0xb7,
0x69, 0x1c, 0x65, 0x9c, 0x5c, 0x40, 0x79, 0xa3, 0xe1, 0x63, 0x43, 0x59, 0x68, 0x93, 0xa2, 0x33,
0xeb, 0x67, 0x9f, 0xce, 0x75, 0x15, 0xff, 0x90, 0x85, 0x64, 0x37, 0x3e, 0x60, 0x59, 0x96, 0x5f,
0x2c, 0x58, 0x28, 0x98, 0x4d, 0x9e, 0x07, 0x30, 0x1f, 0x92, 0x03, 0xdc, 0xeb, 0xc8, 0x20, 0x66,
0x21, 0x09, 0x68, 0x7c, 0xc0, 0x8c, 0xc0, 0xdb, 0x79, 0xb6, 0xbc, 0xc9, 0xdd, 0x6d, 0x1d, 0x38,
0xc8, 0xf1, 0x72, 0x58, 0x34, 0xa0, 0x2f, 0x60, 0x01, 0x73, 0xde, 0xa1, 0x6d, 0xd5, 0xab, 0xc1,
0x31, 0x49, 0xc4, 0xf0, 0x25, 0x5c, 0x1b, 0x79, 0x73, 0x74, 0xb8, 0x4a, 0x8d, 0x72, 0x79, 0x8c,
0xdd, 0xf9, 0xc7, 0x82, 0x6a, 0x2e, 0x06, 0x21, 0xb8, 0x12, 0xe3, 0x2e, 0x51, 0x6c, 0x2b, 0xbe,
0x5a, 0xa3, 0x9b, 0x30, 0x8b, 0x39, 0x0f, 0x94, 0x5d, 0xf7, 0x7d, 0x19, 0x73, 0xfe, 0x30, 0x75,
0xd9, 0x50, 0xce, 0x08, 0x95, 0xb4, 0xc7, 0x7c, 0xa2, 0x5b, 0x00, 0x11, 0x95, 0x41, 0x9b, 0x75,
0xbb, 0x54, 0xaa, 0x46, 0xaf, 0xf8, 0x95, 0x88, 0xca, 0x0f, 0x94, 0x21, 0x75, 0xb7, 0x7a, 0xb4,
0x13, 0x06, 0x12, 0x47, 0xc2, 0xbe, 0xaa, 0xdd, 0xca, 0xf2, 0x29, 0x8e, 0x84, 0x42, 0xb3, 0x81,
0xd6, 0x19, 0x83, 0x66, 0x86, 0x29, 0xfa, 0x30, 0x43, 0x87, 0x84, 0x0b, 0xbb, 0xac, 0x1e, 0x91,
0x3b, 0xa3, 0x4a, 0xf1, 0x09, 0x0b, 0x7b, 0x1d, 0x62, 0x76, 0xd9, 0x26, 0x5c, 0x38, 0xf7, 0x61,
0x46, 0x1b, 0x53, 0xd9, 0x1c, 0xcb, 0xc3, 0x4c, 0x76, 0xba, 0xce, 0x6b, 0x9b, 0x2e, 0x6a, 0x9b,
0x83, 0x92, 0xe8, 0x75, 0x8d, 0xe2, 0x74, 0xd9, 0x7c, 0x52, 0x81, 0xf2, 0x3e, 0x49, 0x8e, 0x69,
0x9b, 0xa0, 0x1f, 0x2d, 0xa8, 0xe6, 0xba, 0x02, 0x35, 0x47, 0x11, 0x3b, 0xdb, 0x59, 0xb5, 0x8d,
0x89, 0x30, 0xba, 0xed, 0x9c, 0xc6, 0x93, 0xdf, 0xff, 0xfe, 0x7e, 0x7a, 0x0d, 0xad, 0x7a, 0x23,
0x46, 0x8e, 0x41, 0x53, 0xa2, 0x1f, 0x2c, 0x80, 0xe1, 0x45, 0x40, 0x8d, 0x31, 0xb6, 0x2d, 0xde,
0xa4, 0x5a, 0x73, 0x12, 0x88, 0x21, 0xea, 0x29, 0xa2, 0xab, 0xe8, 0xee, 0x28, 0xa2, 0xe6, 0xfa,
0xa1, 0x9f, 0x2c, 0x78, 0xa9, 0xf8, 0x86, 0xa0, 0xcd, 0x31, 0xf6, 0x3d, 0xfb, 0x18, 0xd5, 0xde,
0x98, 0x14, 0x66, 0x28, 0x6f, 0x2a, 0xca, 0x1e, 0x5a, 0x1f, 0x45, 0x59, 0x3d, 0x3a, 0xc2, 0xeb,
0xa8, 0x1c, 0xe8, 0x67, 0x0b, 0xe6, 0x9e, 0x7f, 0x96, 0xd1, 0xbd, 0x31, 0x38, 0x9c, 0xf7, 0xf6,
0xd7, 0xde, 0x9c, 0x1c, 0x68, 0xe8, 0xdf, 0x53, 0xf4, 0x1b, 0xc8, 0x1b, 0x93, 0xfe, 0x57, 0xfa,
0x5f, 0xe5, 0x31, 0xfa, 0xcd, 0xca, 0x3d, 0xeb, 0xf9, 0xff, 0x7c, 0xf4, 0xce, 0xd8, 0x95, 0x3c,
0x67, 0x26, 0xa9, 0xbd, 0x7b, 0x49, 0xb4, 0xd1, 0xf3, 0x96, 0xd2, 0xb3, 0x81, 0x1a, 0xa3, 0xf4,
0x0c, 0xc7, 0x85, 0xec, 0x48, 0xfe, 0xb4, 0xd4, 0x9f, 0xeb, 0x79, 0x83, 0x20, 0x7a, 0x6f, 0x0c,
0x56, 0x2f, 0x18, 0x62, 0x6b, 0xef, 0x5f, 0x1a, 0x6f, 0x74, 0xbd, 0xad, 0x74, 0x6d, 0xa2, 0x8d,
0x09, 0x74, 0x65, 0x67, 0xb5, 0xb5, 0xf5, 0xeb, 0x49, 0xdd, 0x7a, 0x7a, 0x52, 0xb7, 0xfe, 0x3a,
0xa9, 0x5b, 0xdf, 0x9d, 0xd6, 0xa7, 0x9e, 0x9e, 0xd6, 0xa7, 0x9e, 0x9d, 0xd6, 0xa7, 0x3e, 0x5f,
0x89, 0xa8, 0x3c, 0xec, 0xb5, 0xdc, 0x36, 0xeb, 0x66, 0x89, 0xf5, 0xcf, 0xba, 0x08, 0x8f, 0xcc,
0x6c, 0xaf, 0x66, 0xa5, 0xd6, 0x8c, 0x1a, 0xd8, 0x37, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x20,
0x61, 0xbc, 0x54, 0xb6, 0x0c, 0x00, 0x00,
0x14, 0xcf, 0xc6, 0xad, 0x1d, 0x3f, 0x57, 0x90, 0x4c, 0x4a, 0xb3, 0xb5, 0x52, 0x37, 0xec, 0xa1,
0x4d, 0x88, 0xb2, 0x2b, 0x3b, 0x84, 0x82, 0xf8, 0x27, 0x85, 0x80, 0x1b, 0xb5, 0x54, 0xd1, 0x06,
0x71, 0x40, 0x48, 0xab, 0xb5, 0x77, 0xb2, 0x19, 0xc5, 0xde, 0x99, 0xee, 0x8c, 0x8d, 0x2c, 0x54,
0x81, 0xfa, 0x01, 0x10, 0x12, 0x5f, 0x81, 0x0b, 0x5f, 0x80, 0x23, 0xe2, 0xc8, 0x8d, 0x4a, 0x48,
0xd0, 0x23, 0x4a, 0xf8, 0x14, 0x9c, 0xd0, 0xce, 0xcc, 0xda, 0xbb, 0xcd, 0x1f, 0xdb, 0x39, 0x20,
0xf5, 0xe4, 0xd9, 0xf7, 0xde, 0xef, 0xcd, 0xef, 0xf7, 0xe6, 0xcd, 0xf3, 0xc0, 0x1b, 0x6d, 0xca,
0xbb, 0x94, 0x3b, 0x2d, 0x9f, 0x63, 0x47, 0xe0, 0x28, 0xc0, 0x71, 0x97, 0x44, 0xc2, 0xe9, 0xd7,
0x5b, 0x58, 0xf8, 0x75, 0xe7, 0x71, 0x0f, 0xc7, 0x03, 0x9b, 0xc5, 0x54, 0x50, 0x54, 0x53, 0xb1,
0x76, 0x12, 0x6b, 0x8f, 0x62, 0x6d, 0x1d, 0x5b, 0xbd, 0x1e, 0xd2, 0x90, 0xca, 0x50, 0x27, 0x59,
0x29, 0x54, 0x75, 0x39, 0xa4, 0x34, 0xec, 0x60, 0xc7, 0x67, 0xc4, 0xf1, 0xa3, 0x88, 0x0a, 0x5f,
0x10, 0x1a, 0x71, 0xed, 0xad, 0x66, 0xf6, 0x64, 0x0d, 0xe6, 0x88, 0x01, 0xc3, 0xa9, 0x6f, 0x39,
0xe3, 0x93, 0x76, 0xa7, 0xd5, 0xa1, 0xed, 0xa3, 0x73, 0xbd, 0x59, 0x6c, 0x4e, 0x97, 0x14, 0x31,
0x94, 0xc4, 0xfc, 0x90, 0x44, 0x92, 0x84, 0x8a, 0xb5, 0xbe, 0x35, 0xa0, 0xd6, 0xc4, 0xe2, 0x73,
0xbf, 0x43, 0x02, 0x5f, 0xd0, 0x78, 0x1f, 0x8b, 0xed, 0xc1, 0x7d, 0x4c, 0xc2, 0x43, 0xe1, 0xe2,
0xc7, 0x3d, 0xcc, 0x05, 0xba, 0x01, 0xc5, 0x43, 0x69, 0x30, 0x8d, 0x15, 0x63, 0xb5, 0xe0, 0xea,
0x2f, 0xf4, 0x09, 0xc0, 0x28, 0x9d, 0x39, 0xbb, 0x62, 0xac, 0x56, 0x1a, 0x77, 0xec, 0x6c, 0x9d,
0x54, 0x01, 0xf5, 0xde, 0xf6, 0x9e, 0x1f, 0x62, 0x9d, 0xd3, 0xcd, 0x20, 0xad, 0xe7, 0x06, 0xdc,
0x3e, 0x97, 0x02, 0x67, 0x34, 0xe2, 0x18, 0xbd, 0x0e, 0xd7, 0xa4, 0x7e, 0x2f, 0xc7, 0xa4, 0x22,
0x6d, 0x2a, 0x14, 0xed, 0x02, 0xf4, 0xd3, 0x14, 0xdc, 0x9c, 0x5d, 0x29, 0xac, 0x56, 0x1a, 0x6b,
0xf6, 0xc5, 0xc7, 0x66, 0x0f, 0x37, 0x75, 0x33, 0x60, 0xd4, 0xcc, 0x29, 0x2b, 0x48, 0x65, 0x77,
0xc7, 0x2a, 0x53, 0x54, 0x73, 0xd2, 0x0e, 0x60, 0xb9, 0x89, 0xc5, 0x43, 0x5f, 0x60, 0x9e, 0xd3,
0x97, 0x96, 0x36, 0x5f, 0x42, 0xe3, 0xd2, 0x25, 0xfc, 0xd3, 0x80, 0x5b, 0xe7, 0x6c, 0xf4, 0x72,
0x17, 0xf0, 0x3b, 0x03, 0xca, 0xc3, 0x2d, 0x90, 0x09, 0x25, 0x3f, 0x08, 0x62, 0xcc, 0xb9, 0xe4,
0x7f, 0xcd, 0x4d, 0x3f, 0xd1, 0x12, 0x94, 0x58, 0xaf, 0xe5, 0x1d, 0xe1, 0x81, 0x6c, 0xc4, 0xb2,
0x5b, 0x64, 0xbd, 0xd6, 0x03, 0x3c, 0x48, 0x74, 0xf7, 0xa9, 0x20, 0x51, 0xe8, 0x31, 0xfa, 0x15,
0x8e, 0x25, 0x97, 0x82, 0x5b, 0x51, 0xb6, 0xbd, 0xc4, 0x84, 0xd6, 0x61, 0x81, 0xc5, 0x94, 0x51,
0x8e, 0x63, 0x8f, 0xc5, 0x84, 0xc6, 0x44, 0x0c, 0xcc, 0x2b, 0x32, 0x6e, 0x3e, 0x75, 0xec, 0x69,
0xbb, 0x55, 0x87, 0xa5, 0x26, 0x16, 0xdb, 0x49, 0xd9, 0x26, 0xbc, 0x27, 0xd6, 0x37, 0x60, 0x9e,
0x86, 0xe8, 0x63, 0x79, 0x13, 0xe6, 0xd4, 0xb1, 0x90, 0x40, 0x1f, 0xff, 0xcd, 0x6c, 0x95, 0xd5,
0xad, 0x96, 0xd0, 0xdd, 0x1d, 0xb7, 0x24, 0x43, 0x77, 0x03, 0xb4, 0x01, 0x57, 0xe5, 0x52, 0x5f,
0xba, 0xa5, 0x73, 0x20, 0xae, 0x8a, 0xb2, 0x96, 0xe0, 0xb5, 0x61, 0x73, 0x28, 0x87, 0x62, 0x6c,
0x3d, 0x81, 0x1b, 0x2f, 0x3a, 0xfe, 0x4f, 0x5e, 0x8b, 0xb0, 0xd0, 0xc4, 0x62, 0x7f, 0x10, 0xb5,
0x49, 0x14, 0xa6, 0x9c, 0x6c, 0x40, 0x59, 0xa3, 0xe6, 0x63, 0x42, 0x89, 0x2b, 0x93, 0xa4, 0x33,
0xe7, 0xa6, 0x9f, 0xd6, 0x75, 0x19, 0xff, 0x88, 0x06, 0x78, 0x37, 0x3a, 0xa0, 0x69, 0x96, 0x5f,
0x0d, 0x58, 0xcc, 0x99, 0x75, 0x9e, 0x07, 0xb0, 0x10, 0xe0, 0x03, 0xbf, 0xd7, 0x11, 0x5e, 0x44,
0x03, 0xec, 0x91, 0xe8, 0x80, 0x6a, 0x81, 0xb7, 0xb3, 0x6c, 0x59, 0x83, 0xd9, 0x3b, 0x2a, 0x70,
0x98, 0xe3, 0xd5, 0x20, 0x6f, 0x40, 0x5f, 0xc2, 0xa2, 0xcf, 0x58, 0x87, 0xb4, 0x65, 0xaf, 0x7a,
0x7d, 0x1c, 0xf3, 0xd1, 0x24, 0x5c, 0x1f, 0x7b, 0x73, 0x54, 0xb8, 0x4c, 0x8d, 0x32, 0x79, 0xb4,
0xdd, 0xfa, 0xd7, 0x80, 0x4a, 0x26, 0x06, 0x21, 0xb8, 0x12, 0xf9, 0x5d, 0x2c, 0xd9, 0x96, 0x5d,
0xb9, 0x46, 0x37, 0x61, 0xce, 0x67, 0xcc, 0x93, 0x76, 0xd5, 0xf7, 0x25, 0x9f, 0xb1, 0x47, 0x89,
0xcb, 0x84, 0x52, 0x4a, 0xa8, 0xa0, 0x3c, 0xfa, 0x13, 0xdd, 0x02, 0x08, 0x89, 0xf0, 0xda, 0xb4,
0xdb, 0x25, 0x42, 0x36, 0x7a, 0xd9, 0x2d, 0x87, 0x44, 0x7c, 0x24, 0x0d, 0x89, 0xbb, 0xd5, 0x23,
0x9d, 0xc0, 0x13, 0x7e, 0xc8, 0xcd, 0xab, 0xca, 0x2d, 0x2d, 0x9f, 0xf9, 0x21, 0x97, 0x68, 0x3a,
0xd4, 0x5a, 0xd4, 0x68, 0xaa, 0x99, 0xa2, 0x8f, 0x53, 0x74, 0x80, 0x19, 0x37, 0x4b, 0x72, 0x88,
0xdc, 0x19, 0x57, 0x8a, 0x4f, 0x69, 0xd0, 0xeb, 0x60, 0xbd, 0xcb, 0x0e, 0x66, 0xdc, 0xba, 0x0f,
0x45, 0x65, 0x4c, 0x64, 0x33, 0x5f, 0x1c, 0xa6, 0xb2, 0x93, 0x75, 0x56, 0xdb, 0x6c, 0x5e, 0xdb,
0x3c, 0x14, 0x78, 0xaf, 0xab, 0x15, 0x27, 0xcb, 0xc6, 0xd3, 0x32, 0x94, 0xf6, 0x71, 0xdc, 0x27,
0x6d, 0x8c, 0x7e, 0x32, 0xa0, 0x92, 0xe9, 0x0a, 0xd4, 0x18, 0x47, 0xec, 0x74, 0x67, 0x55, 0x37,
0xa7, 0xc2, 0xa8, 0xb6, 0xb3, 0xea, 0x4f, 0xff, 0xf8, 0xe7, 0x87, 0xd9, 0x75, 0xb4, 0xe6, 0x8c,
0x79, 0x72, 0x0c, 0x9b, 0x12, 0xfd, 0x68, 0x00, 0x8c, 0x2e, 0x02, 0xaa, 0x4f, 0xb0, 0x6d, 0xfe,
0x26, 0x55, 0x1b, 0xd3, 0x40, 0x34, 0x51, 0x47, 0x12, 0x5d, 0x43, 0x77, 0xc7, 0x11, 0xd5, 0xd7,
0x0f, 0xfd, 0x6c, 0xc0, 0x2b, 0xf9, 0x19, 0x82, 0xb6, 0x26, 0xd8, 0xf7, 0xf4, 0x30, 0xaa, 0xbe,
0x35, 0x2d, 0x4c, 0x53, 0xde, 0x92, 0x94, 0x1d, 0xb4, 0x31, 0x8e, 0xb2, 0x1c, 0x3a, 0xdc, 0xe9,
0xc8, 0x1c, 0xe8, 0x17, 0x03, 0xe6, 0x5f, 0x1c, 0xcb, 0xe8, 0xde, 0x04, 0x1c, 0xce, 0x9a, 0xfd,
0xd5, 0xb7, 0xa7, 0x07, 0x6a, 0xfa, 0xf7, 0x24, 0xfd, 0x3a, 0x72, 0x26, 0xa4, 0xff, 0xb5, 0xfa,
0x57, 0x79, 0x82, 0x7e, 0x37, 0x32, 0x63, 0x3d, 0xfb, 0x9f, 0x8f, 0xde, 0x9b, 0xb8, 0x92, 0x67,
0xbc, 0x49, 0xaa, 0xef, 0x5f, 0x12, 0xad, 0xf5, 0xbc, 0x23, 0xf5, 0x6c, 0xa2, 0xfa, 0x38, 0x3d,
0xa3, 0xe7, 0x42, 0x7a, 0x24, 0x7f, 0x19, 0xf2, 0xcf, 0xf5, 0xac, 0x87, 0x20, 0xfa, 0x60, 0x02,
0x56, 0x17, 0x3c, 0x62, 0xab, 0x1f, 0x5e, 0x1a, 0xaf, 0x75, 0xbd, 0x2b, 0x75, 0x6d, 0xa1, 0xcd,
0x29, 0x74, 0xa5, 0x67, 0xb5, 0xfd, 0xf0, 0xb7, 0xe3, 0x9a, 0xf1, 0xec, 0xb8, 0x66, 0xfc, 0x7d,
0x5c, 0x33, 0xbe, 0x3f, 0xa9, 0xcd, 0x3c, 0x3b, 0xa9, 0xcd, 0x3c, 0x3f, 0xa9, 0xcd, 0x7c, 0xd1,
0x08, 0x89, 0x38, 0xec, 0xb5, 0xec, 0x36, 0xed, 0xa6, 0x89, 0xd5, 0xcf, 0x06, 0x0f, 0x8e, 0x9c,
0x76, 0x87, 0xe0, 0x48, 0x38, 0x61, 0xcc, 0xda, 0x8e, 0xe8, 0x72, 0x35, 0xc6, 0x5a, 0x45, 0xf9,
0x74, 0xdf, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x82, 0x6b, 0xb0, 0xbd, 0xc0, 0x0c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -2181,7 +2182,7 @@ func (m *GetValidatorSetByHeightRequest) Unmarshal(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Pagination == nil {
m.Pagination = &PageRequest{}
m.Pagination = &query.PageRequest{}
}
if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
@ -2323,7 +2324,7 @@ func (m *GetValidatorSetByHeightResponse) Unmarshal(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Pagination == nil {
m.Pagination = &PageResponse{}
m.Pagination = &query.PageResponse{}
}
if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
@ -2412,7 +2413,7 @@ func (m *GetLatestValidatorSetRequest) Unmarshal(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Pagination == nil {
m.Pagination = &PageRequest{}
m.Pagination = &query.PageRequest{}
}
if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
@ -2554,7 +2555,7 @@ func (m *GetLatestValidatorSetResponse) Unmarshal(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Pagination == nil {
m.Pagination = &PageResponse{}
m.Pagination = &query.PageResponse{}
}
if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err

View File

@ -2,11 +2,11 @@
// source: cosmos/base/tendermint/v1beta1/query.proto
/*
Package query is a reverse proxy.
Package tmservice is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package query
package tmservice
import (
"context"

View File

@ -21,10 +21,10 @@ type queryServer struct {
interfaceRegistry codectypes.InterfaceRegistry
}
var _ qtypes.ServiceServer = queryServer{}
var _ ServiceServer = queryServer{}
// NewQueryServer creates a new tendermint query server.
func NewQueryServer(clientCtx client.Context, interfaceRegistry codectypes.InterfaceRegistry) qtypes.ServiceServer {
func NewQueryServer(clientCtx client.Context, interfaceRegistry codectypes.InterfaceRegistry) ServiceServer {
return queryServer{
clientCtx: clientCtx,
interfaceRegistry: interfaceRegistry,
@ -32,18 +32,18 @@ func NewQueryServer(clientCtx client.Context, interfaceRegistry codectypes.Inter
}
// GetSyncing implements ServiceServer.GetSyncing
func (s queryServer) GetSyncing(_ context.Context, _ *qtypes.GetSyncingRequest) (*qtypes.GetSyncingResponse, error) {
func (s queryServer) GetSyncing(_ context.Context, _ *GetSyncingRequest) (*GetSyncingResponse, error) {
status, err := getNodeStatus(s.clientCtx)
if err != nil {
return nil, err
}
return &qtypes.GetSyncingResponse{
return &GetSyncingResponse{
Syncing: status.SyncInfo.CatchingUp,
}, nil
}
// GetLatestBlock implements ServiceServer.GetLatestBlock
func (s queryServer) GetLatestBlock(context.Context, *qtypes.GetLatestBlockRequest) (*qtypes.GetLatestBlockResponse, error) {
func (s queryServer) GetLatestBlock(context.Context, *GetLatestBlockRequest) (*GetLatestBlockResponse, error) {
status, err := getBlock(s.clientCtx, nil)
if err != nil {
return nil, err
@ -55,14 +55,14 @@ func (s queryServer) GetLatestBlock(context.Context, *qtypes.GetLatestBlockReque
return nil, err
}
return &qtypes.GetLatestBlockResponse{
return &GetLatestBlockResponse{
BlockId: &protoBlockID,
Block: protoBlock,
}, nil
}
// GetBlockByHeight implements ServiceServer.GetBlockByHeight
func (s queryServer) GetBlockByHeight(_ context.Context, req *qtypes.GetBlockByHeightRequest) (*qtypes.GetBlockByHeightResponse, error) {
func (s queryServer) GetBlockByHeight(_ context.Context, req *GetBlockByHeightRequest) (*GetBlockByHeightResponse, error) {
chainHeight, err := rpc.GetChainHeight(s.clientCtx)
if err != nil {
return nil, err
@ -81,14 +81,14 @@ func (s queryServer) GetBlockByHeight(_ context.Context, req *qtypes.GetBlockByH
if err != nil {
return nil, err
}
return &qtypes.GetBlockByHeightResponse{
return &GetBlockByHeightResponse{
BlockId: &protoBlockID,
Block: protoBlock,
}, nil
}
// GetLatestValidatorSet implements ServiceServer.GetLatestValidatorSet
func (s queryServer) GetLatestValidatorSet(ctx context.Context, req *qtypes.GetLatestValidatorSetRequest) (*qtypes.GetLatestValidatorSetResponse, error) {
func (s queryServer) GetLatestValidatorSet(ctx context.Context, req *GetLatestValidatorSetRequest) (*GetLatestValidatorSetResponse, error) {
page, limit, err := qtypes.ParsePagination(req.Pagination)
if err != nil {
return nil, err
@ -99,13 +99,13 @@ func (s queryServer) GetLatestValidatorSet(ctx context.Context, req *qtypes.GetL
return nil, err
}
outputValidatorsRes := &qtypes.GetLatestValidatorSetResponse{
outputValidatorsRes := &GetLatestValidatorSetResponse{
BlockHeight: validatorsRes.BlockHeight,
Validators: make([]*qtypes.Validator, len(validatorsRes.Validators)),
Validators: make([]*Validator, len(validatorsRes.Validators)),
}
for i, validator := range validatorsRes.Validators {
outputValidatorsRes.Validators[i] = &qtypes.Validator{
outputValidatorsRes.Validators[i] = &Validator{
Address: validator.Address,
ProposerPriority: validator.ProposerPriority,
PubKey: validator.PubKey,
@ -116,7 +116,7 @@ func (s queryServer) GetLatestValidatorSet(ctx context.Context, req *qtypes.GetL
}
// GetValidatorSetByHeight implements ServiceServer.GetValidatorSetByHeight
func (s queryServer) GetValidatorSetByHeight(ctx context.Context, req *qtypes.GetValidatorSetByHeightRequest) (*qtypes.GetValidatorSetByHeightResponse, error) {
func (s queryServer) GetValidatorSetByHeight(ctx context.Context, req *GetValidatorSetByHeightRequest) (*GetValidatorSetByHeightResponse, error) {
page, limit, err := qtypes.ParsePagination(req.Pagination)
if err != nil {
return nil, err
@ -136,13 +136,13 @@ func (s queryServer) GetValidatorSetByHeight(ctx context.Context, req *qtypes.Ge
return nil, err
}
outputValidatorsRes := &qtypes.GetValidatorSetByHeightResponse{
outputValidatorsRes := &GetValidatorSetByHeightResponse{
BlockHeight: validatorsRes.BlockHeight,
Validators: make([]*qtypes.Validator, len(validatorsRes.Validators)),
Validators: make([]*Validator, len(validatorsRes.Validators)),
}
for i, validator := range validatorsRes.Validators {
outputValidatorsRes.Validators[i] = &qtypes.Validator{
outputValidatorsRes.Validators[i] = &Validator{
Address: validator.Address,
ProposerPriority: validator.ProposerPriority,
PubKey: validator.PubKey,
@ -153,7 +153,7 @@ func (s queryServer) GetValidatorSetByHeight(ctx context.Context, req *qtypes.Ge
}
// GetNodeInfo implements ServiceServer.GetNodeInfo
func (s queryServer) GetNodeInfo(ctx context.Context, req *qtypes.GetNodeInfoRequest) (*qtypes.GetNodeInfoResponse, error) {
func (s queryServer) GetNodeInfo(ctx context.Context, req *GetNodeInfoRequest) (*GetNodeInfoResponse, error) {
status, err := getNodeStatus(s.clientCtx)
if err != nil {
return nil, err
@ -162,19 +162,19 @@ func (s queryServer) GetNodeInfo(ctx context.Context, req *qtypes.GetNodeInfoReq
protoNodeInfo := status.NodeInfo.ToProto()
nodeInfo := version.NewInfo()
deps := make([]*qtypes.Module, len(nodeInfo.BuildDeps))
deps := make([]*Module, len(nodeInfo.BuildDeps))
for i, dep := range nodeInfo.BuildDeps {
deps[i] = &qtypes.Module{
deps[i] = &Module{
Path: dep.Path,
Sum: dep.Sum,
Version: dep.Version,
}
}
resp := qtypes.GetNodeInfoResponse{
resp := GetNodeInfoResponse{
DefaultNodeInfo: protoNodeInfo,
ApplicationVersion: &qtypes.VersionInfo{
ApplicationVersion: &VersionInfo{
AppName: nodeInfo.AppName,
Name: nodeInfo.Name,
GitCommit: nodeInfo.GitCommit,
@ -193,7 +193,7 @@ func RegisterTendermintService(
clientCtx client.Context,
interfaceRegistry codectypes.InterfaceRegistry,
) {
qtypes.RegisterServiceServer(
RegisterServiceServer(
qrt,
NewQueryServer(clientCtx, interfaceRegistry),
)
@ -202,5 +202,5 @@ func RegisterTendermintService(
// RegisterGRPCGatewayRoutes mounts the tendermint service's GRPC-gateway routes on the
// given Mux.
func RegisterGRPCGatewayRoutes(clientConn gogogrpc.ClientConn, mux *runtime.ServeMux) {
qtypes.RegisterServiceHandlerClient(context.Background(), mux, qtypes.NewServiceClient(clientConn))
RegisterServiceHandlerClient(context.Background(), mux, NewServiceClient(clientConn))
}

View File

@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/suite"
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
"github.com/cosmos/cosmos-sdk/testutil/network"
qtypes "github.com/cosmos/cosmos-sdk/types/query"
"github.com/cosmos/cosmos-sdk/types/rest"
@ -19,7 +20,7 @@ type IntegrationTestSuite struct {
cfg network.Config
network *network.Network
queryClient qtypes.ServiceClient
queryClient tmservice.ServiceClient
}
func (s *IntegrationTestSuite) SetupSuite() {
@ -36,7 +37,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
_, err := s.network.WaitForHeight(1)
s.Require().NoError(err)
s.queryClient = qtypes.NewServiceClient(s.network.Validators[0].ClientCtx)
s.queryClient = tmservice.NewServiceClient(s.network.Validators[0].ClientCtx)
}
func (s *IntegrationTestSuite) TearDownSuite() {
@ -47,13 +48,13 @@ func (s *IntegrationTestSuite) TearDownSuite() {
func (s IntegrationTestSuite) TestQueryNodeInfo() {
val := s.network.Validators[0]
res, err := s.queryClient.GetNodeInfo(context.Background(), &qtypes.GetNodeInfoRequest{})
res, err := s.queryClient.GetNodeInfo(context.Background(), &tmservice.GetNodeInfoRequest{})
s.Require().NoError(err)
s.Require().Equal(res.ApplicationVersion.AppName, version.NewInfo().AppName)
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/base/tendermint/v1beta1/node_info", val.APIAddress))
s.Require().NoError(err)
var getInfoRes qtypes.GetNodeInfoResponse
var getInfoRes tmservice.GetNodeInfoResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &getInfoRes))
s.Require().Equal(getInfoRes.ApplicationVersion.AppName, version.NewInfo().AppName)
}
@ -61,35 +62,35 @@ func (s IntegrationTestSuite) TestQueryNodeInfo() {
func (s IntegrationTestSuite) TestQuerySyncing() {
val := s.network.Validators[0]
_, err := s.queryClient.GetSyncing(context.Background(), &qtypes.GetSyncingRequest{})
_, err := s.queryClient.GetSyncing(context.Background(), &tmservice.GetSyncingRequest{})
s.Require().NoError(err)
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/base/tendermint/v1beta1/syncing", val.APIAddress))
s.Require().NoError(err)
var syncingRes qtypes.GetSyncingResponse
var syncingRes tmservice.GetSyncingResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &syncingRes))
}
func (s IntegrationTestSuite) TestQueryLatestBlock() {
val := s.network.Validators[0]
_, err := s.queryClient.GetLatestBlock(context.Background(), &qtypes.GetLatestBlockRequest{})
_, err := s.queryClient.GetLatestBlock(context.Background(), &tmservice.GetLatestBlockRequest{})
s.Require().NoError(err)
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/base/tendermint/v1beta1/blocks/latest", val.APIAddress))
s.Require().NoError(err)
var blockInfoRes qtypes.GetLatestBlockResponse
var blockInfoRes tmservice.GetLatestBlockResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &blockInfoRes))
}
func (s IntegrationTestSuite) TestQueryBlockByHeight() {
val := s.network.Validators[0]
_, err := s.queryClient.GetBlockByHeight(context.Background(), &qtypes.GetBlockByHeightRequest{Height: 1})
_, err := s.queryClient.GetBlockByHeight(context.Background(), &tmservice.GetBlockByHeightRequest{Height: 1})
s.Require().NoError(err)
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/base/tendermint/v1beta1/blocks/%d", val.APIAddress, 1))
s.Require().NoError(err)
var blockInfoRes qtypes.GetBlockByHeightResponse
var blockInfoRes tmservice.GetBlockByHeightResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &blockInfoRes))
}
@ -97,13 +98,13 @@ func (s IntegrationTestSuite) TestQueryLatestValidatorSet() {
val := s.network.Validators[0]
// nil pagination
_, err := s.queryClient.GetLatestValidatorSet(context.Background(), &qtypes.GetLatestValidatorSetRequest{
_, err := s.queryClient.GetLatestValidatorSet(context.Background(), &tmservice.GetLatestValidatorSetRequest{
Pagination: nil,
})
s.Require().NoError(err)
//with pagination
_, err = s.queryClient.GetLatestValidatorSet(context.Background(), &qtypes.GetLatestValidatorSetRequest{Pagination: &qtypes.PageRequest{
_, err = s.queryClient.GetLatestValidatorSet(context.Background(), &tmservice.GetLatestValidatorSetRequest{Pagination: &qtypes.PageRequest{
Offset: 0,
Limit: 10,
}})
@ -116,7 +117,7 @@ func (s IntegrationTestSuite) TestQueryLatestValidatorSet() {
// rest request with pagination
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/base/tendermint/v1beta1/validators/latest?pagination.offset=%d&pagination.limit=%d", val.APIAddress, 0, 1))
s.Require().NoError(err)
var validatorSetRes qtypes.GetLatestValidatorSetResponse
var validatorSetRes tmservice.GetLatestValidatorSetResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &validatorSetRes))
}
@ -124,13 +125,13 @@ func (s IntegrationTestSuite) TestQueryValidatorSetByHeight() {
val := s.network.Validators[0]
// nil pagination
_, err := s.queryClient.GetValidatorSetByHeight(context.Background(), &qtypes.GetValidatorSetByHeightRequest{
_, err := s.queryClient.GetValidatorSetByHeight(context.Background(), &tmservice.GetValidatorSetByHeightRequest{
Height: 1,
Pagination: nil,
})
s.Require().NoError(err)
_, err = s.queryClient.GetValidatorSetByHeight(context.Background(), &qtypes.GetValidatorSetByHeightRequest{
_, err = s.queryClient.GetValidatorSetByHeight(context.Background(), &tmservice.GetValidatorSetByHeightRequest{
Height: 1,
Pagination: &qtypes.PageRequest{
Offset: 0,
@ -144,7 +145,7 @@ func (s IntegrationTestSuite) TestQueryValidatorSetByHeight() {
// rest query with pagination
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/base/tendermint/v1beta1/validators/%d?pagination.offset=%d&pagination.limit=%d", val.APIAddress, 1, 0, 1))
var validatorSetRes qtypes.GetValidatorSetByHeightResponse
var validatorSetRes tmservice.GetValidatorSetByHeightResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &validatorSetRes))
}

1
go.mod
View File

@ -23,6 +23,7 @@ require (
github.com/golang/snappy v0.0.2 // indirect
github.com/gorilla/handlers v1.5.1
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/hashicorp/golang-lru v0.5.4
github.com/magiconair/properties v1.8.4

1
go.sum
View File

@ -247,6 +247,7 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0=
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=

View File

@ -8,7 +8,7 @@ import "tendermint/types/block.proto";
import "tendermint/types/types.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
option go_package = "github.com/cosmos/cosmos-sdk/types/query";
option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/tmservice";
// Service defines the gRPC querier service for tendermint queries.
service Service {

View File

@ -11,13 +11,14 @@ import (
"github.com/stretchr/testify/suite"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
"github.com/cosmos/cosmos-sdk/testutil/network"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
"github.com/cosmos/cosmos-sdk/types/tx"
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
)
@ -99,6 +100,19 @@ func (s *IntegrationTestSuite) TestGRPCServer() {
}
// Make sure the following services are present
s.Require().True(servicesMap["cosmos.bank.v1beta1.Query"])
// Query the tx via gRPC without pagination. This used to panic, see
// https://github.com/cosmos/cosmos-sdk/issues/8038.
txServiceClient := txtypes.NewServiceClient(conn)
_, err = txServiceClient.GetTxsEvent(
context.Background(),
&tx.GetTxsEventRequest{
Event: "message.action=send",
},
)
// TODO Once https://github.com/cosmos/cosmos-sdk/pull/8029 is merged, this
// should not error anymore.
s.Require().Error(err)
}
// Test and enforce that we upfront reject any connections to baseapp containing

View File

@ -151,12 +151,14 @@ func errIsNil(err error) bool {
return false
}
var errPanicWithMsg = Wrapf(ErrPanic, "panic message redacted to hide potentially sensitive system info")
// Redact replaces an error that is not initialized as an ABCI Error with a
// generic internal error instance. If the error is an ABCI Error, that error is
// simply returned.
func Redact(err error) error {
if ErrPanic.Is(err) {
return ErrPanic
return errPanicWithMsg
}
if abciCode(err) == internalABCICode {
return errInternal

View File

@ -171,7 +171,7 @@ func (s *abciTestSuite) TestRedact() {
}{
"panic looses message": {
err: Wrap(ErrPanic, "some secret stack trace"),
changed: ErrPanic,
changed: errPanicWithMsg,
},
"sdk errors untouched": {
err: Wrap(ErrUnauthorized, "cannot drop db"),
@ -233,7 +233,7 @@ func (s *abciTestSuite) TestABCIInfoSerializeErr() {
},
"redact in default encoder": {
src: myPanic,
exp: "panic",
exp: "panic message redacted to hide potentially sensitive system info: panic",
},
"do not redact in debug encoder": {
src: myPanic,

View File

@ -127,7 +127,8 @@ func (s IntegrationTestSuite) TestGetTxEvents() {
// Query the tx via gRPC.
grpcRes, err := s.queryClient.GetTxsEvent(
context.Background(),
&tx.GetTxsEventRequest{Event: "message.action=send",
&tx.GetTxsEventRequest{
Event: "message.action=send",
Pagination: &query.PageRequest{
CountTotal: false,
Offset: 0,
@ -139,14 +140,26 @@ func (s IntegrationTestSuite) TestGetTxEvents() {
s.Require().Equal(len(grpcRes.Txs), 1)
s.Require().Equal("foobar", grpcRes.Txs[0].Body.Memo)
// Query the tx via gRPC without pagination. This used to panic, see
// https://github.com/cosmos/cosmos-sdk/issues/8038.
grpcRes, err = s.queryClient.GetTxsEvent(
context.Background(),
&tx.GetTxsEventRequest{
Event: "message.action=send",
},
)
// TODO Once https://github.com/cosmos/cosmos-sdk/pull/8029 is merged, this
// should not error anymore.
s.Require().Error(err)
// Query the tx via grpc-gateway.
restRes, err := rest.GetRequest(fmt.Sprintf("%s/cosmos/tx/v1beta1/txs?event=%s&pagination.offset=%d&pagination.limit=%d", val.APIAddress, "message.action=send", 0, 1))
s.Require().NoError(err)
var getTxRes tx.GetTxsEventResponse
s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(restRes, &getTxRes))
s.Require().Equal(len(grpcRes.Txs), 1)
s.Require().Equal(len(getTxRes.Txs), 1)
s.Require().Equal("foobar", getTxRes.Txs[0].Body.Memo)
s.Require().NotZero(grpcRes.TxResponses[0].Height)
s.Require().NotZero(getTxRes.TxResponses[0].Height)
}
func (s IntegrationTestSuite) TestGetTx() {