Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing RPC function and make proto file readable #1081

Merged
merged 5 commits into from
Aug 23, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 32 additions & 77 deletions proto/secret/compute/v1beta1/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -15,134 +15,86 @@ option (gogoproto.equal_all) = true;
// Query provides defines the gRPC querier service
service Query {
// Query contract
rpc ContractInfo (QueryContractInfoRequest) returns (QueryContractInfoResponse) {
rpc ContractInfo (QueryByAddressRequest) returns (QueryContractInfoResponse) {
option (google.api.http).get = "/compute/v1beta1/contract/{address}";
}
// Query contract
rpc ContractsByCode (QueryContractsByCodeRequest) returns (QueryContractsByCodeResponse) {
rpc ContractsByCode (QueryByIDRequest) returns (QueryContractsByCodeResponse) {
option (google.api.http).get = "/compute/v1beta1/code/{code_id}/contracts";
}
// Query contract
rpc SmartContractState (QuerySmartContractStateRequest) returns (QuerySmartContractStateResponse) {
option (google.api.http).get = "/compute/v1beta1/contract/{address}/smart";
}
// Query a specific contract code
rpc Code (QueryCodeRequest) returns (QueryCodeResponse) {
rpc Code (QueryByIDRequest) returns (QueryCodeResponse) {
option (google.api.http).get = "/compute/v1beta1/code/{code_id}";
}
// Query all contract codes on-chain
rpc Codes (google.protobuf.Empty) returns (QueryCodesResponse) {
option (google.api.http).get = "/compute/v1beta1/code";
}
// Query contract hash by address
rpc ContractHash (QueryContractHashRequest) returns (QueryContractHashResponse) {
rpc ContractHash (QueryByAddressRequest) returns (QueryContractHashResponse) {
option (google.api.http).get = "/compute/v1beta1/hash/address/{address}";
}
// Query contract hash by code id
rpc ContractHashByID (QueryContractHashByIDRequest) returns (QueryContractHashResponse) {
rpc ContractHashByID (QueryByIDRequest) returns (QueryContractHashResponse) {
option (google.api.http).get = "/compute/v1beta1/hash/id/{code_id}";
}
// Query contract key by address
rpc ContractKey(QueryContractKeyRequest) returns (QueryContractKeyResponse) {
rpc ContractKey(QueryByAddressRequest) returns (QueryContractKeyResponse) {
option (google.api.http).get = "/compute/v1beta1/key/{address}";
}
// Query contract label by address
rpc LabelByAddress(QueryByAddressRequest) returns (QueryContractLabelResponse) {
option (google.api.http).get = "/compute/v1beta1/label/address/{address}";
}
// Query contract address by label
rpc AddressByLabel(QueryContractAddressByLabelRequest) returns (QueryContractAddressByLabelResponse) {
rpc AddressByLabel(QueryByLabelRequest) returns (QueryContractAddressResponse) {
option (google.api.http).get = "/compute/v1beta1/address/label/{label}";
}


}

// QueryContractInfoRequest is the request type for the Query/ContractInfo RPC method
message QueryContractInfoRequest {
// address is the canonical address of the contract to query
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
}
// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC method
message QueryContractInfoResponse {
message QuerySmartContractStateRequest {
// address is the canonical address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
ContractInfo ContractInfo = 2 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""];
}

message QueryContractHistoryRequest {
// address is the canonical address of the contract to query
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
}

/*
message QueryContractHistoryResponse {
repeated ContractCodeHistoryEntry entries = 1 [(gogoproto.nullable) = false];
bytes query_data = 2;
}
*/

message QueryContractsByCodeRequest {
uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID
message QueryByLabelRequest {
string label = 1;
}

// ContractInfoWithAddress adds the address (key) to the ContractInfo representation
message ContractInfoWithAddress {
message QueryByAddressRequest {
// address is the canonical address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
ContractInfo ContractInfo = 2 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""];
}

message QueryContractsByCodeResponse {
repeated ContractInfoWithAddress contract_infos = 1 [(gogoproto.nullable) = false];
}

/*
message QueryAllContractStateRequest {
// address is the address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
}

message QueryAllContractStateResponse {
repeated Model models = 1 [(gogoproto.nullable) = false];
}

message QueryRawContractStateRequest {
// address is the address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
bytes query_data = 2;
message QueryByIDRequest {
uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID
}

message QueryRawContractStateResponse {
message QuerySmartContractStateResponse {
bytes data = 1;
}
*/

message QuerySmartContractStateRequest {
// address is the canonical address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
bytes query_data = 2;
}

message QueryContractAddressByLabelRequest {
string label = 1;
}

message QueryContractKeyRequest {
// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC method
message QueryContractInfoResponse {
// address is the canonical address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
ContractInfo ContractInfo = 2 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""];
}

message QueryContractHashRequest {
// ContractInfoWithAddress adds the address (key) to the ContractInfo representation
message ContractInfoWithAddress {
// address is the canonical address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
ContractInfo ContractInfo = 2 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""];
}

message QueryContractHashByIDRequest {
uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID
}

message QuerySmartContractStateResponse {
bytes data = 1;
}

message QueryCodeRequest {
uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID
message QueryContractsByCodeResponse {
repeated ContractInfoWithAddress contract_infos = 1 [(gogoproto.nullable) = false];
}

message CodeInfoResponse {
Expand All @@ -162,13 +114,16 @@ message QueryCodesResponse {
repeated CodeInfoResponse code_infos = 1 [(gogoproto.nullable) = false];
}

message QueryContractAddressByLabelResponse {
message QueryContractAddressResponse {
// address is the canonical address of the contract
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
}

message QueryContractLabelResponse {
string label = 1;
}

message QueryContractKeyResponse {
// address is the address of the contract
bytes key = 1 [(gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes"];
}

Expand Down
113 changes: 29 additions & 84 deletions x/compute/internal/keeper/querier.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func NewQuerier(keeper Keeper) GrpcQuerier {
return GrpcQuerier{keeper: keeper}
}

func (q GrpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInfoRequest) (*types.QueryContractInfoResponse, error) {
func (q GrpcQuerier) ContractInfo(c context.Context, req *types.QueryByAddressRequest) (*types.QueryContractInfoResponse, error) {
if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
}
Expand All @@ -37,25 +37,7 @@ func (q GrpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInf
}, nil
}

/*
func (q GrpcQuerier) ContractHistory(c context.Context, req *types.QueryContractHistoryRequest) (*types.QueryContractHistoryResponse, error) {
if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
}
rsp, err := queryContractHistory(sdk.UnwrapSDKContext(c), req.Address, q.keeper)
switch {
case err != nil:
return nil, err
case rsp == nil:
return nil, types.ErrNotFound
}
return &types.QueryContractHistoryResponse{
Entries: rsp,
}, nil
}
*/

func (q GrpcQuerier) ContractsByCode(c context.Context, req *types.QueryContractsByCodeRequest) (*types.QueryContractsByCodeResponse, error) {
func (q GrpcQuerier) ContractsByCode(c context.Context, req *types.QueryByIDRequest) (*types.QueryContractsByCodeResponse, error) {
if req.CodeId == 0 {
return nil, sdkerrors.Wrap(types.ErrInvalid, "code id")
}
Expand All @@ -71,40 +53,6 @@ func (q GrpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract
}, nil
}

/*
func (q GrpcQuerier) AllContractState(c context.Context, req *types.QueryAllContractStateRequest) (*types.QueryAllContractStateResponse, error) {
if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
}
ctx := sdk.UnwrapSDKContext(c)
if !q.keeper.containsContractInfo(ctx, req.Address) {
return nil, types.ErrNotFound
}
var resultData []types.Model
for iter := q.keeper.GetContractState(ctx, req.Address); iter.Valid(); iter.Next() {
resultData = append(resultData, types.Model{
Key: iter.Key(),
Value: iter.Value(),
})
}
return &types.QueryAllContractStateResponse{Models: resultData}, nil
}

func (q GrpcQuerier) RawContractState(c context.Context, req *types.QueryRawContractStateRequest) (*types.QueryRawContractStateResponse, error) {
ctx := sdk.UnwrapSDKContext(c)

if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
}

if !q.keeper.containsContractInfo(ctx, req.Address) {
return nil, types.ErrNotFound
}
rsp := q.keeper.QueryRaw(ctx, req.Address, req.QueryData)
return &types.QueryRawContractStateResponse{Data: rsp}, nil
}
*/

func (q GrpcQuerier) SmartContractState(c context.Context, req *types.QuerySmartContractStateRequest) (*types.QuerySmartContractStateResponse, error) {
if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
Expand All @@ -120,7 +68,7 @@ func (q GrpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart
return &types.QuerySmartContractStateResponse{Data: rsp}, nil
}

func (q GrpcQuerier) Code(c context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) {
func (q GrpcQuerier) Code(c context.Context, req *types.QueryByIDRequest) (*types.QueryCodeResponse, error) {
if req.CodeId == 0 {
return nil, sdkerrors.Wrap(types.ErrInvalid, "code id")
}
Expand Down Expand Up @@ -148,7 +96,19 @@ func (q GrpcQuerier) Codes(c context.Context, _ *empty.Empty) (*types.QueryCodes
return &types.QueryCodesResponse{CodeInfos: rsp}, nil
}

func (q GrpcQuerier) AddressByLabel(c context.Context, req *types.QueryContractAddressByLabelRequest) (*types.QueryContractAddressByLabelResponse, error) {
func (q GrpcQuerier) LabelByAddress(c context.Context, req *types.QueryByAddressRequest) (*types.QueryContractLabelResponse, error) {
ctx := sdk.UnwrapSDKContext(c).WithGasMeter(sdk.NewGasMeter(q.keeper.queryGasLimit))
rsp, err := queryContractLabel(ctx, req.Address, q.keeper)
switch {
case err != nil:
return nil, err
case rsp == "":
return nil, types.ErrNotFound
}
return &types.QueryContractLabelResponse{Label: rsp}, nil
}

func (q GrpcQuerier) AddressByLabel(c context.Context, req *types.QueryByLabelRequest) (*types.QueryContractAddressResponse, error) {
ctx := sdk.UnwrapSDKContext(c).WithGasMeter(sdk.NewGasMeter(q.keeper.queryGasLimit))
rsp, err := queryContractAddress(ctx, req.Label, q.keeper)
switch {
Expand All @@ -157,10 +117,10 @@ func (q GrpcQuerier) AddressByLabel(c context.Context, req *types.QueryContractA
case rsp == nil:
return nil, types.ErrNotFound
}
return &types.QueryContractAddressByLabelResponse{Address: rsp}, nil
return &types.QueryContractAddressResponse{Address: rsp}, nil
}

func (q GrpcQuerier) ContractKey(c context.Context, req *types.QueryContractKeyRequest) (*types.QueryContractKeyResponse, error) {
func (q GrpcQuerier) ContractKey(c context.Context, req *types.QueryByAddressRequest) (*types.QueryContractKeyResponse, error) {
if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
}
Expand All @@ -175,7 +135,7 @@ func (q GrpcQuerier) ContractKey(c context.Context, req *types.QueryContractKeyR
return &types.QueryContractKeyResponse{Key: rsp}, nil
}

func (q GrpcQuerier) ContractHash(c context.Context, req *types.QueryContractHashRequest) (*types.QueryContractHashResponse, error) {
func (q GrpcQuerier) ContractHash(c context.Context, req *types.QueryByAddressRequest) (*types.QueryContractHashResponse, error) {
if err := sdk.VerifyAddressFormat(req.Address); err != nil {
return nil, err
}
Expand All @@ -190,7 +150,7 @@ func (q GrpcQuerier) ContractHash(c context.Context, req *types.QueryContractHas
return &types.QueryContractHashResponse{CodeHash: rsp}, nil
}

func (q GrpcQuerier) ContractHashByID(c context.Context, req *types.QueryContractHashByIDRequest) (*types.QueryContractHashResponse, error) {
func (q GrpcQuerier) ContractHashByID(c context.Context, req *types.QueryByIDRequest) (*types.QueryContractHashResponse, error) {
ctx := sdk.UnwrapSDKContext(c).WithGasMeter(sdk.NewGasMeter(q.keeper.queryGasLimit))
rsp, err := queryContractHashByID(ctx, req.CodeId, q.keeper)
switch {
Expand Down Expand Up @@ -281,30 +241,6 @@ func queryCodeList(ctx sdk.Context, keeper Keeper) ([]types.CodeInfoResponse, er
return info, nil
}

/*
func queryContractHistory(ctx sdk.Context, bech string, keeper Keeper) ([]byte, error) {
contractAddr, err := sdk.AccAddressFromBech32(bech)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
}
entries := keeper.GetContractHistory(ctx, contractAddr)
if entries == nil {
// nil, nil leads to 404 in rest handler
return nil, nil
}
// redact response
for i := range entries {
entries[i].Updated = nil
}

bz, err := json.MarshalIndent(entries, "", " ")
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return bz, nil
}
*/

func queryContractAddress(ctx sdk.Context, label string, keeper Keeper) (sdk.AccAddress, error) {
res := keeper.GetContractAddress(ctx, label)
if res == nil {
Expand Down Expand Up @@ -332,6 +268,15 @@ func queryContractHash(ctx sdk.Context, address sdk.AccAddress, keeper Keeper) (
return queryContractHashByID(ctx, res.CodeID, keeper)
}

func queryContractLabel(ctx sdk.Context, address sdk.AccAddress, keeper Keeper) (string, error) {
res := keeper.GetContractInfo(ctx, address)
if res == nil {
return "", nil
}

return res.Label, nil
}

func queryContractHashByID(ctx sdk.Context, codeID uint64, keeper Keeper) ([]byte, error) {
codeInfo := keeper.GetCodeInfo(ctx, codeID)

Expand Down
Loading