@@ -17,7 +17,6 @@ import (
17
17
clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types"
18
18
"github.com/cosmos/ibc-go/v9/modules/core/04-channel/v2/types"
19
19
host "github.com/cosmos/ibc-go/v9/modules/core/24-host"
20
- hostv2 "github.com/cosmos/ibc-go/v9/modules/core/24-host/v2"
21
20
)
22
21
23
22
var _ types.QueryServer = (* queryServer )(nil )
@@ -113,7 +112,7 @@ func (q *queryServer) PacketCommitments(ctx context.Context, req *types.QueryPac
113
112
}
114
113
115
114
var commitments []* types.PacketState
116
- store := prefix .NewStore (runtime .KVStoreAdapter (q .storeService .OpenKVStore (ctx )), hostv2 .PacketCommitmentPrefixKey (req .ChannelId ))
115
+ store := prefix .NewStore (runtime .KVStoreAdapter (q .storeService .OpenKVStore (ctx )), types .PacketCommitmentPrefixKey (req .ChannelId ))
117
116
118
117
pageRes , err := query .Paginate (store , req .Pagination , func (key , value []byte ) error {
119
118
keySplit := strings .Split (string (key ), "/" )
@@ -165,6 +164,68 @@ func (q *queryServer) PacketAcknowledgement(ctx context.Context, req *types.Quer
165
164
return types .NewQueryPacketAcknowledgementResponse (acknowledgement , nil , clienttypes .GetSelfHeight (ctx )), nil
166
165
}
167
166
167
+ // PacketAcknowledgements implements the Query/PacketAcknowledgements gRPC method.
168
+ func (q * queryServer ) PacketAcknowledgements (ctx context.Context , req * types.QueryPacketAcknowledgementsRequest ) (* types.QueryPacketAcknowledgementsResponse , error ) {
169
+ if req == nil {
170
+ return nil , status .Error (codes .InvalidArgument , "empty request" )
171
+ }
172
+
173
+ if err := host .ChannelIdentifierValidator (req .ChannelId ); err != nil {
174
+ return nil , status .Error (codes .InvalidArgument , err .Error ())
175
+ }
176
+
177
+ if ! q .HasChannel (ctx , req .ChannelId ) {
178
+ return nil , status .Error (codes .NotFound , errorsmod .Wrapf (types .ErrChannelNotFound , req .ChannelId ).Error ())
179
+ }
180
+
181
+ var acks []* types.PacketState
182
+ store := prefix .NewStore (runtime .KVStoreAdapter (q .storeService .OpenKVStore (ctx )), types .PacketAcknowledgementPrefixKey (req .ChannelId ))
183
+
184
+ // if a list of packet sequences is provided then query for each specific ack and return a list <= len(req.PacketCommitmentSequences)
185
+ // otherwise, maintain previous behaviour and perform paginated query
186
+ for _ , seq := range req .PacketCommitmentSequences {
187
+ acknowledgement := q .GetPacketAcknowledgement (ctx , req .ChannelId , seq )
188
+ if len (acknowledgement ) == 0 {
189
+ continue
190
+ }
191
+
192
+ ack := types .NewPacketState (req .ChannelId , seq , acknowledgement )
193
+ acks = append (acks , & ack )
194
+ }
195
+
196
+ if len (req .PacketCommitmentSequences ) > 0 {
197
+ selfHeight := clienttypes .GetSelfHeight (ctx )
198
+ return & types.QueryPacketAcknowledgementsResponse {
199
+ Acknowledgements : acks ,
200
+ Pagination : nil ,
201
+ Height : selfHeight ,
202
+ }, nil
203
+ }
204
+
205
+ pageRes , err := query .Paginate (store , req .Pagination , func (key , value []byte ) error {
206
+ keySplit := strings .Split (string (key ), "/" )
207
+
208
+ sequence := sdk .BigEndianToUint64 ([]byte (keySplit [len (keySplit )- 1 ]))
209
+ if sequence == 0 {
210
+ return types .ErrInvalidPacket
211
+ }
212
+
213
+ ack := types .NewPacketState (req .ChannelId , sequence , value )
214
+ acks = append (acks , & ack )
215
+
216
+ return nil
217
+ })
218
+ if err != nil {
219
+ return nil , err
220
+ }
221
+
222
+ return & types.QueryPacketAcknowledgementsResponse {
223
+ Acknowledgements : acks ,
224
+ Pagination : pageRes ,
225
+ Height : clienttypes .GetSelfHeight (ctx ),
226
+ }, nil
227
+ }
228
+
168
229
// PacketReceipt implements the Query/PacketReceipt gRPC method.
169
230
func (q * queryServer ) PacketReceipt (ctx context.Context , req * types.QueryPacketReceiptRequest ) (* types.QueryPacketReceiptResponse , error ) {
170
231
if req == nil {
0 commit comments