diff --git a/x/crosschain/keeper/cctx.go b/x/crosschain/keeper/cctx.go index f2234362f0..0c633345b8 100644 --- a/x/crosschain/keeper/cctx.go +++ b/x/crosschain/keeper/cctx.go @@ -81,6 +81,23 @@ func (k Keeper) GetCrossChainTx(ctx sdk.Context, index string) (val types.CrossC return val, true } +// GetCrossChainTxError returns the error message for a given cctx index. +func (k Keeper) GetCrossChainTxError(ctx sdk.Context, index string) (errMsg string, found bool) { + var cctx types.CrossChainTx + + p := types.KeyPrefix(fmt.Sprintf("%s", types.CCTXKey)) + store := prefix.NewStore(ctx.KVStore(k.storeKey), p) + + b := store.Get(types.KeyPrefix(index)) + if b == nil { + return "", false + } + + k.cdc.MustUnmarshal(b, &cctx) + + return cctx.CctxStatus.ErrorMessage, true +} + // GetAllCrossChainTx returns all cctxs func (k Keeper) GetAllCrossChainTx(ctx sdk.Context) (list []types.CrossChainTx) { p := types.KeyPrefix(fmt.Sprintf("%s", types.CCTXKey)) diff --git a/x/crosschain/keeper/cctx_test.go b/x/crosschain/keeper/cctx_test.go index 8a51b4cf2a..10a70883d5 100644 --- a/x/crosschain/keeper/cctx_test.go +++ b/x/crosschain/keeper/cctx_test.go @@ -169,6 +169,9 @@ func TestCCTXs(t *testing.T) { send, found := keeper.GetCrossChainTx(ctx, s.Index) require.True(t, found) require.Equal(t, s, send) + err, found := keeper.GetCrossChainTxError(ctx, s.Index) + require.True(t, found) + require.Equal(t, "", err) } })