Skip to content

Commit c226f1b

Browse files
authored
Merge pull request #130 from yoshidan/add_seq_opt
Add `src-seqs` and `dst-seqs` option to `tx acks` and `tx relay`
2 parents ae204cd + a042abd commit c226f1b

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

cmd/tx.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ func createChannelCmd(ctx *config.Context) *cobra.Command {
196196
func relayMsgsCmd(ctx *config.Context) *cobra.Command {
197197
const (
198198
flagDoRefresh = "do-refresh"
199+
flagSrcSeqs = "src-seqs"
200+
flagDstSeqs = "dst-seqs"
199201
)
200202
const (
201203
defaultDoRefresh = false
@@ -205,6 +207,7 @@ func relayMsgsCmd(ctx *config.Context) *cobra.Command {
205207
Short: "relay any packets that remain to be relayed on a given path, in both directions",
206208
Args: cobra.ExactArgs(1),
207209
RunE: func(cmd *cobra.Command, args []string) error {
210+
208211
c, src, dst, err := ctx.Config.ChainsFromPath(args[0])
209212
if err != nil {
210213
return err
@@ -230,6 +233,11 @@ func relayMsgsCmd(ctx *config.Context) *cobra.Command {
230233
if err != nil {
231234
return err
232235
}
236+
srcSeq := getUint64Slice(flagSrcSeqs)
237+
dstSeq := getUint64Slice(flagDstSeqs)
238+
if err = tryFilterRelayPackets(sp, srcSeq, dstSeq); err != nil {
239+
return err
240+
}
233241

234242
msgs := core.NewRelayMsgs()
235243

@@ -251,13 +259,17 @@ func relayMsgsCmd(ctx *config.Context) *cobra.Command {
251259
},
252260
}
253261
cmd.Flags().Bool(flagDoRefresh, defaultDoRefresh, "execute light client refresh (updateClient) if required")
262+
cmd.Flags().IntSlice(flagSrcSeqs, nil, "packet filter for src chain")
263+
cmd.Flags().IntSlice(flagDstSeqs, nil, "packet filter for dst chain")
254264
// TODO add option support for strategy
255265
return cmd
256266
}
257267

258268
func relayAcksCmd(ctx *config.Context) *cobra.Command {
259269
const (
260270
flagDoRefresh = "do-refresh"
271+
flagSrcSeqs = "src-seqs"
272+
flagDstSeqs = "dst-seqs"
261273
)
262274
const (
263275
defaultDoRefresh = false
@@ -291,6 +303,11 @@ func relayAcksCmd(ctx *config.Context) *cobra.Command {
291303
if err != nil {
292304
return err
293305
}
306+
srcSeq := getUint64Slice(flagSrcSeqs)
307+
dstSeq := getUint64Slice(flagDstSeqs)
308+
if err = tryFilterRelayPackets(sp, srcSeq, dstSeq); err != nil {
309+
return err
310+
}
294311

295312
msgs := core.NewRelayMsgs()
296313

@@ -312,5 +329,32 @@ func relayAcksCmd(ctx *config.Context) *cobra.Command {
312329
},
313330
}
314331
cmd.Flags().Bool(flagDoRefresh, defaultDoRefresh, "execute light client refresh (updateClient) if required")
332+
cmd.Flags().IntSlice(flagSrcSeqs, nil, "packet filter for src chain")
333+
cmd.Flags().IntSlice(flagDstSeqs, nil, "packet filter for dst chain")
315334
return cmd
316335
}
336+
337+
func tryFilterRelayPackets(sp *core.RelayPackets, srcSeq []uint64, dstSeq []uint64) error {
338+
if len(srcSeq) > 0 {
339+
sp.Src = sp.Src.Filter(srcSeq)
340+
if len(sp.Src) != len(srcSeq) {
341+
return fmt.Errorf("src packet not found packetLength=%d selectedLength=%d", len(sp.Src), len(srcSeq))
342+
}
343+
}
344+
if len(dstSeq) > 0 {
345+
sp.Dst = sp.Dst.Filter(dstSeq)
346+
if len(sp.Dst) != len(dstSeq) {
347+
return fmt.Errorf("dst packet not found packetLength=%d selectedLength=%d", len(sp.Dst), len(dstSeq))
348+
}
349+
}
350+
return nil
351+
}
352+
353+
func getUint64Slice(key string) []uint64 {
354+
org := viper.GetIntSlice(key)
355+
ret := make([]uint64, len(org))
356+
for i, e := range org {
357+
ret[i] = uint64(e)
358+
}
359+
return ret
360+
}

tests/cases/tm2tm/scripts/test-tx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ echo "Before ibc1 balance: $(${RLY} query balance ibc1 ${TM_ADDRESS1})"
1919

2020
${RLY} tx transfer ibc01 ibc0 ibc1 100samoleans ${TM_ADDRESS1}
2121
sleep ${TX_INTERNAL}
22-
${RLY} tx relay --do-refresh ibc01
22+
${RLY} tx relay --do-refresh ibc01 --src-seqs 1
2323
sleep ${TX_INTERNAL}
24-
${RLY} tx acks --do-refresh ibc01
24+
${RLY} tx acks --do-refresh ibc01 --dst-seqs 1
2525
sleep ${TX_INTERNAL}
2626

2727
echo "After ibc0 balance: $(${RLY} query balance ibc0 ${TM_ADDRESS0})"

tests/cases/tmmock2tmmock/scripts/test-tx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ do
3333
done
3434

3535
# relay the packet (recvPacket)
36-
${RLY} tx relay --do-refresh ibc01
36+
${RLY} tx relay --do-refresh ibc01 --src-seqs 1
3737

3838
# wait for the finalization of the recvPacket execution
3939
for i in `seq $RETRY_COUNT`
@@ -48,7 +48,7 @@ do
4848
done
4949

5050
# relay the ack for the packet (acknowledgePacket)
51-
${RLY} tx acks --do-refresh ibc01
51+
${RLY} tx acks --do-refresh ibc01 --dst-seqs 1
5252

5353
# wait for the finalization of the recvPacket execution
5454
for i in `seq $RETRY_COUNT`

0 commit comments

Comments
 (0)