Skip to content

Commit

Permalink
feat(cosmic-proto): include ibc-go (#9287)
Browse files Browse the repository at this point in the history
<!-- < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < ☺
v                               ✰  Thanks for creating a PR! ✰
☺ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >  -->

<!-- Most PRs should close a specific Issue. All PRs should at least
reference one or more Issues. Edit and/or delete the following lines as
appropriate (note: you don't need both `refs` and `closes` for the same
one): -->

Like #9284, but also adds `ibc` protos from `ibc-go/v6`. Motivated by
needing `MsgTransfer` for #9193.

closes: #XXXX
refs: #9193

## Description

<!-- Add a description of the changes that this PR introduces and the
files that
are the most critical to review.
-->

### Security Considerations

<!-- Does this change introduce new assumptions or dependencies that, if
violated, could introduce security vulnerabilities? How does this PR
change the boundaries between mutually-suspicious components? What new
authorities are introduced by this change, perhaps by new API calls?
-->

### Scaling Considerations

<!-- Does this change require or encourage significant increase in
consumption of CPU cycles, RAM, on-chain storage, message exchanges, or
other scarce resources? If so, can that be prevented or mitigated? -->

### Documentation Considerations

<!-- Give our docs folks some hints about what needs to be described to
downstream users.

Backwards compatibility: what happens to existing data or deployments
when this code is shipped? Do we need to instruct users to do something
to upgrade their saved data? If there is no upgrade path possible, how
bad will that be for users?

-->

### Testing Considerations

<!-- Every PR should of course come with tests of its own functionality.
What additional tests are still needed beyond those unit tests? How does
this affect CI, other test automation, or the testnet?
-->

Added `ibc` to the snapshot tests for this package.

### Upgrade Considerations

<!-- What aspects of this PR are relevant to upgrading live production
systems, and how should they be addressed? -->

Unlike the `COSMOS_SDK` variable in `update-protos.sh`, `IBC_GO`
contains a version (v6) in the path which may require someone to update
the script when the `cosmos/ibc-go` version is bumped. If someone wants
to suggest a different approach that uses regex, that's more than
welcome.
  • Loading branch information
mergify[bot] authored Apr 25, 2024
2 parents 841f246 + 8124632 commit b78d824
Show file tree
Hide file tree
Showing 79 changed files with 27,665 additions and 29 deletions.
4 changes: 4 additions & 0 deletions packages/cosmic-proto/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
"types": "./dist/codegen/cosmos/staking/v1beta1/tx.d.ts",
"default": "./dist/codegen/cosmos/staking/v1beta1/tx.js"
},
"./ibc/applications/transfer/v1/tx.js": {
"types": "./dist/codegen/ibc/applications/transfer/v1/tx.d.ts",
"default": "./dist/codegen/ibc/applications/transfer/v1/tx.js"
},
"./google/protobuf/any": {
"types": "./dist/codegen/google/protobuf/any.d.ts",
"default": "./dist/codegen/google/protobuf/any.js"
Expand Down
17 changes: 17 additions & 0 deletions packages/cosmic-proto/proto/ibc/applications/fee/v1/ack.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
syntax = "proto3";

package ibc.applications.fee.v1;

option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types";

import "gogoproto/gogo.proto";

// IncentivizedAcknowledgement is the acknowledgement format to be used by applications wrapped in the fee middleware
message IncentivizedAcknowledgement {
// the underlying app acknowledgement bytes
bytes app_acknowledgement = 1 [(gogoproto.moretags) = "yaml:\"app_acknowledgement\""];
// the relayer address which submits the recv packet message
string forward_relayer_address = 2 [(gogoproto.moretags) = "yaml:\"forward_relayer_address\""];
// success flag of the base application callback
bool underlying_app_success = 3 [(gogoproto.moretags) = "yaml:\"underlying_app_successl\""];
}
56 changes: 56 additions & 0 deletions packages/cosmic-proto/proto/ibc/applications/fee/v1/fee.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
syntax = "proto3";

package ibc.applications.fee.v1;

option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types";

import "cosmos/base/v1beta1/coin.proto";
import "gogoproto/gogo.proto";
import "ibc/core/channel/v1/channel.proto";

// Fee defines the ICS29 receive, acknowledgement and timeout fees
message Fee {
// the packet receive fee
repeated cosmos.base.v1beta1.Coin recv_fee = 1 [
(gogoproto.moretags) = "yaml:\"recv_fee\"",
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
];
// the packet acknowledgement fee
repeated cosmos.base.v1beta1.Coin ack_fee = 2 [
(gogoproto.moretags) = "yaml:\"ack_fee\"",
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
];
// the packet timeout fee
repeated cosmos.base.v1beta1.Coin timeout_fee = 3 [
(gogoproto.moretags) = "yaml:\"timeout_fee\"",
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
];
}

// PacketFee contains ICS29 relayer fees, refund address and optional list of permitted relayers
message PacketFee {
// fee encapsulates the recv, ack and timeout fees associated with an IBC packet
Fee fee = 1 [(gogoproto.nullable) = false];
// the refund address for unspent fees
string refund_address = 2 [(gogoproto.moretags) = "yaml:\"refund_address\""];
// optional list of relayers permitted to receive fees
repeated string relayers = 3;
}

// PacketFees contains a list of type PacketFee
message PacketFees {
// list of packet fees
repeated PacketFee packet_fees = 1 [(gogoproto.moretags) = "yaml:\"packet_fees\"", (gogoproto.nullable) = false];
}

// IdentifiedPacketFees contains a list of type PacketFee and associated PacketId
message IdentifiedPacketFees {
// unique packet identifier comprised of the channel ID, port ID and sequence
ibc.core.channel.v1.PacketId packet_id = 1
[(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"packet_id\""];
// list of packet fees
repeated PacketFee packet_fees = 2 [(gogoproto.moretags) = "yaml:\"packet_fees\"", (gogoproto.nullable) = false];
}
66 changes: 66 additions & 0 deletions packages/cosmic-proto/proto/ibc/applications/fee/v1/genesis.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
syntax = "proto3";

package ibc.applications.fee.v1;

option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types";

import "gogoproto/gogo.proto";
import "ibc/applications/fee/v1/fee.proto";
import "ibc/core/channel/v1/channel.proto";

// GenesisState defines the ICS29 fee middleware genesis state
message GenesisState {
// list of identified packet fees
repeated IdentifiedPacketFees identified_fees = 1
[(gogoproto.moretags) = "yaml:\"identified_fees\"", (gogoproto.nullable) = false];
// list of fee enabled channels
repeated FeeEnabledChannel fee_enabled_channels = 2
[(gogoproto.moretags) = "yaml:\"fee_enabled_channels\"", (gogoproto.nullable) = false];
// list of registered payees
repeated RegisteredPayee registered_payees = 3
[(gogoproto.moretags) = "yaml:\"registered_payees\"", (gogoproto.nullable) = false];
// list of registered counterparty payees
repeated RegisteredCounterpartyPayee registered_counterparty_payees = 4
[(gogoproto.moretags) = "yaml:\"registered_counterparty_payees\"", (gogoproto.nullable) = false];
// list of forward relayer addresses
repeated ForwardRelayerAddress forward_relayers = 5
[(gogoproto.moretags) = "yaml:\"forward_relayers\"", (gogoproto.nullable) = false];
}

// FeeEnabledChannel contains the PortID & ChannelID for a fee enabled channel
message FeeEnabledChannel {
// unique port identifier
string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""];
// unique channel identifier
string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""];
}

// RegisteredPayee contains the relayer address and payee address for a specific channel
message RegisteredPayee {
// unique channel identifier
string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""];
// the relayer address
string relayer = 2;
// the payee address
string payee = 3;
}

// RegisteredCounterpartyPayee contains the relayer address and counterparty payee address for a specific channel (used
// for recv fee distribution)
message RegisteredCounterpartyPayee {
// unique channel identifier
string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""];
// the relayer address
string relayer = 2;
// the counterparty payee address
string counterparty_payee = 3 [(gogoproto.moretags) = "yaml:\"counterparty_payee\""];
}

// ForwardRelayerAddress contains the forward relayer address and PacketId used for async acknowledgements
message ForwardRelayerAddress {
// the forward relayer address
string address = 1;
// unique packet identifer comprised of the channel ID, port ID and sequence
ibc.core.channel.v1.PacketId packet_id = 2
[(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"packet_id\""];
}
16 changes: 16 additions & 0 deletions packages/cosmic-proto/proto/ibc/applications/fee/v1/metadata.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
syntax = "proto3";

package ibc.applications.fee.v1;

option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types";

import "gogoproto/gogo.proto";

// Metadata defines the ICS29 channel specific metadata encoded into the channel version bytestring
// See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning
message Metadata {
// fee_version defines the ICS29 fee version
string fee_version = 1 [(gogoproto.moretags) = "yaml:\"fee_version\""];
// app_version defines the underlying application version, which may or may not be a JSON encoded bytestring
string app_version = 2 [(gogoproto.moretags) = "yaml:\"app_version\""];
}
222 changes: 222 additions & 0 deletions packages/cosmic-proto/proto/ibc/applications/fee/v1/query.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
syntax = "proto3";

package ibc.applications.fee.v1;

option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types";

import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "cosmos/base/v1beta1/coin.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "ibc/applications/fee/v1/fee.proto";
import "ibc/applications/fee/v1/genesis.proto";
import "ibc/core/channel/v1/channel.proto";

// Query defines the ICS29 gRPC querier service.
service Query {
// IncentivizedPackets returns all incentivized packets and their associated fees
rpc IncentivizedPackets(QueryIncentivizedPacketsRequest) returns (QueryIncentivizedPacketsResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/incentivized_packets";
}

// IncentivizedPacket returns all packet fees for a packet given its identifier
rpc IncentivizedPacket(QueryIncentivizedPacketRequest) returns (QueryIncentivizedPacketResponse) {
option (google.api.http).get =
"/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/"
"{packet_id.sequence}/incentivized_packet";
}

// Gets all incentivized packets for a specific channel
rpc IncentivizedPacketsForChannel(QueryIncentivizedPacketsForChannelRequest)
returns (QueryIncentivizedPacketsForChannelResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets";
}

// TotalRecvFees returns the total receive fees for a packet given its identifier
rpc TotalRecvFees(QueryTotalRecvFeesRequest) returns (QueryTotalRecvFeesResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/"
"sequences/{packet_id.sequence}/total_recv_fees";
}

// TotalAckFees returns the total acknowledgement fees for a packet given its identifier
rpc TotalAckFees(QueryTotalAckFeesRequest) returns (QueryTotalAckFeesResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/"
"sequences/{packet_id.sequence}/total_ack_fees";
}

// TotalTimeoutFees returns the total timeout fees for a packet given its identifier
rpc TotalTimeoutFees(QueryTotalTimeoutFeesRequest) returns (QueryTotalTimeoutFeesResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/"
"sequences/{packet_id.sequence}/total_timeout_fees";
}

// Payee returns the registered payee address for a specific channel given the relayer address
rpc Payee(QueryPayeeRequest) returns (QueryPayeeResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee";
}

// CounterpartyPayee returns the registered counterparty payee for forward relaying
rpc CounterpartyPayee(QueryCounterpartyPayeeRequest) returns (QueryCounterpartyPayeeResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee";
}

// FeeEnabledChannels returns a list of all fee enabled channels
rpc FeeEnabledChannels(QueryFeeEnabledChannelsRequest) returns (QueryFeeEnabledChannelsResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/fee_enabled";
}

// FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel
rpc FeeEnabledChannel(QueryFeeEnabledChannelRequest) returns (QueryFeeEnabledChannelResponse) {
option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled";
}
}

// QueryIncentivizedPacketsRequest defines the request type for the IncentivizedPackets rpc
message QueryIncentivizedPacketsRequest {
// pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1;
// block height at which to query
uint64 query_height = 2;
}

// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPackets rpc
message QueryIncentivizedPacketsResponse {
// list of identified fees for incentivized packets
repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1 [(gogoproto.nullable) = false];
}

// QueryIncentivizedPacketRequest defines the request type for the IncentivizedPacket rpc
message QueryIncentivizedPacketRequest {
// unique packet identifier comprised of channel ID, port ID and sequence
ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false];
// block height at which to query
uint64 query_height = 2;
}

// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPacket rpc
message QueryIncentivizedPacketResponse {
// the identified fees for the incentivized packet
ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packet = 1 [(gogoproto.nullable) = false];
}

// QueryIncentivizedPacketsForChannelRequest defines the request type for querying for all incentivized packets
// for a specific channel
message QueryIncentivizedPacketsForChannelRequest {
// pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1;
string port_id = 2;
string channel_id = 3;
// Height to query at
uint64 query_height = 4;
}

// QueryIncentivizedPacketsResponse defines the response type for the incentivized packets RPC
message QueryIncentivizedPacketsForChannelResponse {
// Map of all incentivized_packets
repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1;
}

// QueryTotalRecvFeesRequest defines the request type for the TotalRecvFees rpc
message QueryTotalRecvFeesRequest {
// the packet identifier for the associated fees
ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false];
}

// QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees rpc
message QueryTotalRecvFeesResponse {
// the total packet receive fees
repeated cosmos.base.v1beta1.Coin recv_fees = 1 [
(gogoproto.moretags) = "yaml:\"recv_fees\"",
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
];
}

// QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc
message QueryTotalAckFeesRequest {
// the packet identifier for the associated fees
ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false];
}

// QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc
message QueryTotalAckFeesResponse {
// the total packet acknowledgement fees
repeated cosmos.base.v1beta1.Coin ack_fees = 1 [
(gogoproto.moretags) = "yaml:\"ack_fees\"",
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
];
}

// QueryTotalTimeoutFeesRequest defines the request type for the TotalTimeoutFees rpc
message QueryTotalTimeoutFeesRequest {
// the packet identifier for the associated fees
ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false];
}

// QueryTotalTimeoutFeesResponse defines the response type for the TotalTimeoutFees rpc
message QueryTotalTimeoutFeesResponse {
// the total packet timeout fees
repeated cosmos.base.v1beta1.Coin timeout_fees = 1 [
(gogoproto.moretags) = "yaml:\"timeout_fees\"",
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
];
}

// QueryPayeeRequest defines the request type for the Payee rpc
message QueryPayeeRequest {
// unique channel identifier
string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""];
// the relayer address to which the distribution address is registered
string relayer = 2;
}

// QueryPayeeResponse defines the response type for the Payee rpc
message QueryPayeeResponse {
// the payee address to which packet fees are paid out
string payee_address = 1 [(gogoproto.moretags) = "yaml:\"payee_address\""];
}

// QueryCounterpartyPayeeRequest defines the request type for the CounterpartyPayee rpc
message QueryCounterpartyPayeeRequest {
// unique channel identifier
string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""];
// the relayer address to which the counterparty is registered
string relayer = 2;
}

// QueryCounterpartyPayeeResponse defines the response type for the CounterpartyPayee rpc
message QueryCounterpartyPayeeResponse {
// the counterparty payee address used to compensate forward relaying
string counterparty_payee = 1 [(gogoproto.moretags) = "yaml:\"counterparty_payee\""];
}

// QueryFeeEnabledChannelsRequest defines the request type for the FeeEnabledChannels rpc
message QueryFeeEnabledChannelsRequest {
// pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1;
// block height at which to query
uint64 query_height = 2;
}

// QueryFeeEnabledChannelsResponse defines the response type for the FeeEnabledChannels rpc
message QueryFeeEnabledChannelsResponse {
// list of fee enabled channels
repeated ibc.applications.fee.v1.FeeEnabledChannel fee_enabled_channels = 1
[(gogoproto.moretags) = "yaml:\"fee_enabled_channels\"", (gogoproto.nullable) = false];
}

// QueryFeeEnabledChannelRequest defines the request type for the FeeEnabledChannel rpc
message QueryFeeEnabledChannelRequest {
// unique port identifier
string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""];
// unique channel identifier
string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""];
}

// QueryFeeEnabledChannelResponse defines the response type for the FeeEnabledChannel rpc
message QueryFeeEnabledChannelResponse {
// boolean flag representing the fee enabled channel status
bool fee_enabled = 1 [(gogoproto.moretags) = "yaml:\"fee_enabled\""];
}
Loading

0 comments on commit b78d824

Please sign in to comment.