11package cmd
22
33import (
4+ "context"
45 "errors"
56 "fmt"
67 "strings"
78 "time"
89
910 "github.com/cosmos/cosmos-sdk/client/flags"
11+ sdk "github.com/cosmos/cosmos-sdk/types"
1012 clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
1113 chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
1214 "github.com/cosmos/ibc-go/v8/modules/core/exported"
@@ -15,6 +17,7 @@ import (
1517 "github.com/spf13/cobra"
1618 "github.com/spf13/pflag"
1719 "github.com/spf13/viper"
20+ "golang.org/x/sync/errgroup"
1821)
1922
2023// transactionCmd represents the tx command
@@ -411,6 +414,23 @@ func channelUpgradeCancelCmd(ctx *config.Context) *cobra.Command {
411414 return & cmd
412415}
413416
417+ func relayMsgs (ctx context.Context , st core.StrategyI , src , dst * core.ProvableChain , isSrcToDst bool , packets core.PacketInfoList , sh core.SyncHeaders , doExecuteRelay , doExecuteAck , doRefresh bool ) ([]sdk.Msg , error ) {
418+ var msgs []sdk.Msg
419+
420+ if m , err := st .UpdateClients (ctx , src , dst , isSrcToDst , doExecuteRelay , doExecuteAck , sh , doRefresh ); err != nil {
421+ return nil , err
422+ } else {
423+ msgs = append (msgs , m ... )
424+ }
425+
426+ if m , err := st .RelayPackets (ctx , src , dst , isSrcToDst , packets , sh , doExecuteRelay ); err != nil {
427+ return nil , err
428+ } else {
429+ msgs = append (msgs , m ... )
430+ }
431+ return msgs , nil
432+ }
433+
414434func relayMsgsCmd (ctx * config.Context ) * cobra.Command {
415435 const (
416436 flagDoRefresh = "do-refresh"
@@ -458,22 +478,35 @@ func relayMsgsCmd(ctx *config.Context) *cobra.Command {
458478 }
459479
460480 msgs := core .NewRelayMsgs ()
461-
462- doExecuteRelaySrc := len (sp .Dst ) > 0
463- doExecuteRelayDst := len (sp .Src ) > 0
464- doExecuteAckSrc := false
465- doExecuteAckDst := false
466-
467- if m , err := st .UpdateClients (cmd .Context (), c [src ], c [dst ], doExecuteRelaySrc , doExecuteRelayDst , doExecuteAckSrc , doExecuteAckDst , sh , viper .GetBool (flagDoRefresh )); err != nil {
468- return err
469- } else {
470- msgs .Merge (m )
471- }
472-
473- if m , err := st .RelayPackets (cmd .Context (), c [src ], c [dst ], sp , sh , doExecuteRelaySrc , doExecuteRelayDst ); err != nil {
474- return err
475- } else {
476- msgs .Merge (m )
481+ {
482+ var eg = new (errgroup.Group )
483+
484+ doExecuteRelaySrc := len (sp .Dst ) > 0
485+ doExecuteRelayDst := len (sp .Src ) > 0
486+ doExecuteAckSrc := false
487+ doExecuteAckDst := false
488+ doRefresh := viper .GetBool (flagDoRefresh )
489+
490+ eg .Go (func () error {
491+ m , err := relayMsgs (cmd .Context (), st , c [src ], c [dst ], true , sp .Src , sh , doExecuteRelayDst , doExecuteAckDst , doRefresh )
492+ if err != nil {
493+ return err
494+ }
495+ msgs .Dst = m
496+ return nil
497+ })
498+ eg .Go (func () error {
499+ m , err := relayMsgs (cmd .Context (), st , c [src ], c [dst ], false , sp .Dst , sh , doExecuteRelaySrc , doExecuteAckSrc , doRefresh )
500+ if err != nil {
501+ return err
502+ }
503+ msgs .Src = m
504+ return nil
505+ })
506+
507+ if err := eg .Wait (); err != nil {
508+ return err
509+ }
477510 }
478511
479512 st .Send (cmd .Context (), c [src ], c [dst ], msgs )
@@ -488,6 +521,23 @@ func relayMsgsCmd(ctx *config.Context) *cobra.Command {
488521 return cmd
489522}
490523
524+ func relayAcks (ctx context.Context , st core.StrategyI , src , dst * core.ProvableChain , isSrcToDst bool , acks core.PacketInfoList , sh core.SyncHeaders , doExecuteRelay , doExecuteAck , doRefresh bool ) ([]sdk.Msg , error ) {
525+ var msgs []sdk.Msg
526+
527+ if m , err := st .UpdateClients (ctx , src , dst , isSrcToDst , doExecuteRelay , doExecuteAck , sh , doRefresh ); err != nil {
528+ return nil , err
529+ } else {
530+ msgs = append (msgs , m ... )
531+ }
532+
533+ if m , err := st .RelayAcknowledgements (ctx , src , dst , isSrcToDst , acks , sh , doExecuteAck ); err != nil {
534+ return nil , err
535+ } else {
536+ msgs = append (msgs , m ... )
537+ }
538+ return msgs , nil
539+ }
540+
491541func relayAcksCmd (ctx * config.Context ) * cobra.Command {
492542 const (
493543 flagDoRefresh = "do-refresh"
@@ -533,22 +583,35 @@ func relayAcksCmd(ctx *config.Context) *cobra.Command {
533583 }
534584
535585 msgs := core .NewRelayMsgs ()
536-
537- doExecuteRelaySrc := false
538- doExecuteRelayDst := false
539- doExecuteAckSrc := len (sp .Dst ) > 0
540- doExecuteAckDst := len (sp .Src ) > 0
541-
542- if m , err := st .UpdateClients (cmd .Context (), c [src ], c [dst ], doExecuteRelaySrc , doExecuteRelayDst , doExecuteAckSrc , doExecuteAckDst , sh , viper .GetBool (flagDoRefresh )); err != nil {
543- return err
544- } else {
545- msgs .Merge (m )
546- }
547-
548- if m , err := st .RelayAcknowledgements (cmd .Context (), c [src ], c [dst ], sp , sh , doExecuteAckSrc , doExecuteAckDst ); err != nil {
549- return err
550- } else {
551- msgs .Merge (m )
586+ {
587+ var eg = new (errgroup.Group )
588+
589+ doExecuteRelaySrc := false
590+ doExecuteRelayDst := false
591+ doExecuteAckSrc := len (sp .Dst ) > 0
592+ doExecuteAckDst := len (sp .Src ) > 0
593+ doRefresh := viper .GetBool (flagDoRefresh )
594+
595+ eg .Go (func () error {
596+ m , err := relayAcks (cmd .Context (), st , c [src ], c [dst ], true , sp .Src , sh , doExecuteRelayDst , doExecuteAckDst , doRefresh )
597+ if err != nil {
598+ return err
599+ }
600+ msgs .Dst = m
601+ return nil
602+ })
603+ eg .Go (func () error {
604+ m , err := relayAcks (cmd .Context (), st , c [src ], c [dst ], false , sp .Dst , sh , doExecuteRelaySrc , doExecuteAckSrc , doRefresh )
605+ if err != nil {
606+ return err
607+ }
608+ msgs .Src = m
609+ return nil
610+ })
611+
612+ if err := eg .Wait (); err != nil {
613+ return err
614+ }
552615 }
553616
554617 st .Send (cmd .Context (), c [src ], c [dst ], msgs )
0 commit comments