Skip to content

Commit 8d380ba

Browse files
authored
feat: grpc query total ack fees (#1032)
* adding query for total packet recv fees to proto query server * adding total packet recv fee query impl and tests * updating doc comments * adding protos and codegen * adding total ack fees query and tests * fixing protodoc comment
1 parent 4623772 commit 8d380ba

File tree

6 files changed

+750
-45
lines changed

6 files changed

+750
-45
lines changed

docs/ibc/proto-docs.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
- [QueryIncentivizedPacketResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketResponse)
5050
- [QueryIncentivizedPacketsRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketsRequest)
5151
- [QueryIncentivizedPacketsResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketsResponse)
52+
- [QueryTotalAckFeesRequest](#ibc.applications.fee.v1.QueryTotalAckFeesRequest)
53+
- [QueryTotalAckFeesResponse](#ibc.applications.fee.v1.QueryTotalAckFeesResponse)
5254
- [QueryTotalRecvFeesRequest](#ibc.applications.fee.v1.QueryTotalRecvFeesRequest)
5355
- [QueryTotalRecvFeesResponse](#ibc.applications.fee.v1.QueryTotalRecvFeesResponse)
5456

@@ -986,6 +988,36 @@ QueryIncentivizedPacketsResponse is the response type for the incentivized packe
986988

987989

988990

991+
<a name="ibc.applications.fee.v1.QueryTotalAckFeesRequest"></a>
992+
993+
### QueryTotalAckFeesRequest
994+
QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc
995+
996+
997+
| Field | Type | Label | Description |
998+
| ----- | ---- | ----- | ----------- |
999+
| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | the packet identifier for the associated fees |
1000+
1001+
1002+
1003+
1004+
1005+
1006+
<a name="ibc.applications.fee.v1.QueryTotalAckFeesResponse"></a>
1007+
1008+
### QueryTotalAckFeesResponse
1009+
QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc
1010+
1011+
1012+
| Field | Type | Label | Description |
1013+
| ----- | ---- | ----- | ----------- |
1014+
| `ack_fees` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the total packet acknowledgement fees |
1015+
1016+
1017+
1018+
1019+
1020+
9891021
<a name="ibc.applications.fee.v1.QueryTotalRecvFeesRequest"></a>
9901022

9911023
### QueryTotalRecvFeesRequest
@@ -1032,6 +1064,7 @@ Query provides defines the gRPC querier service.
10321064
| `IncentivizedPackets` | [QueryIncentivizedPacketsRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketsRequest) | [QueryIncentivizedPacketsResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketsResponse) | Gets all incentivized packets | GET|/ibc/apps/fee/v1/incentivized_packets|
10331065
| `IncentivizedPacket` | [QueryIncentivizedPacketRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketRequest) | [QueryIncentivizedPacketResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketResponse) | Gets the fees expected for submitting the ReceivePacket, AcknowledgementPacket, and TimeoutPacket messages for the given packet | GET|/ibc/apps/fee/v1/incentivized_packet/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}|
10341066
| `TotalRecvFees` | [QueryTotalRecvFeesRequest](#ibc.applications.fee.v1.QueryTotalRecvFeesRequest) | [QueryTotalRecvFeesResponse](#ibc.applications.fee.v1.QueryTotalRecvFeesResponse) | TotalRecvFees returns the total receive fees for a packet given its identifier | GET|/ibc/apps/fee/v1/total_recv_fees/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}|
1067+
| `TotalAckFees` | [QueryTotalAckFeesRequest](#ibc.applications.fee.v1.QueryTotalAckFeesRequest) | [QueryTotalAckFeesResponse](#ibc.applications.fee.v1.QueryTotalAckFeesResponse) | TotalAckFees returns the total acknowledgement fees for a packet given its identifier | GET|/ibc/apps/fee/v1/total_ack_fees/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}|
10351068

10361069
<!-- end services -->
10371070

modules/apps/29-fee/keeper/grpc_query.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,29 @@ func (k Keeper) TotalRecvFees(goCtx context.Context, req *types.QueryTotalRecvFe
9191
RecvFees: recvFees,
9292
}, nil
9393
}
94+
95+
// TotalAckFees implements the Query/TotalAckFees gRPC method
96+
func (k Keeper) TotalAckFees(goCtx context.Context, req *types.QueryTotalAckFeesRequest) (*types.QueryTotalAckFeesResponse, error) {
97+
if req == nil {
98+
return nil, status.Error(codes.InvalidArgument, "empty request")
99+
}
100+
101+
ctx := sdk.UnwrapSDKContext(goCtx)
102+
103+
feesInEscrow, found := k.GetFeesInEscrow(ctx, req.PacketId)
104+
if !found {
105+
return nil, status.Errorf(
106+
codes.NotFound,
107+
sdkerrors.Wrapf(types.ErrFeeNotFound, "channel: %s, port: %s, sequence: %d", req.PacketId.ChannelId, req.PacketId.PortId, req.PacketId.Sequence).Error(),
108+
)
109+
}
110+
111+
var ackFees sdk.Coins
112+
for _, packetFee := range feesInEscrow.PacketFees {
113+
ackFees = ackFees.Add(packetFee.Fee.AckFee...)
114+
}
115+
116+
return &types.QueryTotalAckFeesResponse{
117+
AckFees: ackFees,
118+
}, nil
119+
}

modules/apps/29-fee/keeper/grpc_query_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,3 +203,67 @@ func (suite *KeeperTestSuite) TestQueryTotalRecvFees() {
203203
})
204204
}
205205
}
206+
207+
func (suite *KeeperTestSuite) TestQueryTotalAckFees() {
208+
var (
209+
req *types.QueryTotalAckFeesRequest
210+
)
211+
212+
testCases := []struct {
213+
name string
214+
malleate func()
215+
expPass bool
216+
}{
217+
{
218+
"success",
219+
func() {},
220+
true,
221+
},
222+
{
223+
"packet not found",
224+
func() {
225+
req.PacketId = channeltypes.NewPacketId(ibctesting.FirstChannelID, ibctesting.MockFeePort, 100)
226+
},
227+
false,
228+
},
229+
}
230+
231+
for _, tc := range testCases {
232+
suite.Run(tc.name, func() {
233+
suite.SetupTest() // reset
234+
235+
suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID)
236+
237+
packetID := channeltypes.NewPacketId(ibctesting.FirstChannelID, ibctesting.MockFeePort, 1)
238+
239+
fee := types.NewFee(defaultReceiveFee, defaultAckFee, defaultTimeoutFee)
240+
packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), []string(nil))
241+
242+
for i := 0; i < 3; i++ {
243+
// escrow three packet fees for the same packet
244+
err := suite.chainA.GetSimApp().IBCFeeKeeper.EscrowPacketFee(suite.chainA.GetContext(), packetID, packetFee)
245+
suite.Require().NoError(err)
246+
}
247+
248+
req = &types.QueryTotalAckFeesRequest{
249+
PacketId: packetID,
250+
}
251+
252+
tc.malleate()
253+
254+
ctx := sdk.WrapSDKContext(suite.chainA.GetContext())
255+
res, err := suite.queryClient.TotalAckFees(ctx, req)
256+
257+
if tc.expPass {
258+
suite.Require().NoError(err)
259+
suite.Require().NotNil(res)
260+
261+
// expected total is three times the default acknowledgement fee
262+
expectedFees := defaultAckFee.Add(defaultAckFee...).Add(defaultAckFee...)
263+
suite.Require().Equal(expectedFees, res.AckFees)
264+
} else {
265+
suite.Require().Error(err)
266+
}
267+
})
268+
}
269+
}

0 commit comments

Comments
 (0)