From 5b7b6ab9b06902e533f1c3fcdf24121a02332a7c Mon Sep 17 00:00:00 2001 From: carla Date: Thu, 22 Apr 2021 19:39:37 +0200 Subject: [PATCH] multi: send channel update for failed interceptor packets --- htlcswitch/interceptable_switch.go | 11 ++++++++++- lntest/itest/lnd_forward_interceptor_test.go | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/htlcswitch/interceptable_switch.go b/htlcswitch/interceptable_switch.go index 834ca2b2..f6d0d2ef 100644 --- a/htlcswitch/interceptable_switch.go +++ b/htlcswitch/interceptable_switch.go @@ -139,7 +139,16 @@ func (f *interceptedForward) Resume() error { // Fail forward a failed packet to the switch. func (f *interceptedForward) Fail() error { - reason, err := f.packet.obfuscator.EncryptFirstHop(lnwire.NewTemporaryChannelFailure(nil)) + update, err := f.htlcSwitch.cfg.FetchLastChannelUpdate( + f.packet.incomingChanID, + ) + if err != nil { + return err + } + + reason, err := f.packet.obfuscator.EncryptFirstHop( + lnwire.NewTemporaryChannelFailure(update), + ) if err != nil { return fmt.Errorf("failed to encrypt failure reason %v", err) } diff --git a/lntest/itest/lnd_forward_interceptor_test.go b/lntest/itest/lnd_forward_interceptor_test.go index 4dbc29af..46fdadf3 100644 --- a/lntest/itest/lnd_forward_interceptor_test.go +++ b/lntest/itest/lnd_forward_interceptor_test.go @@ -128,6 +128,15 @@ func testForwardInterceptor(net *lntest.NetworkHarness, t *harnessTest) { require.Equal(t.t, lnrpc.HTLCAttempt_FAILED, attempt.Status, "expected payment to fail") + // Assert that we get a temporary channel + // failure which has a channel update. + require.NotNil(t.t, attempt.Failure) + require.NotNil(t.t, attempt.Failure.ChannelUpdate) + + require.Equal(t.t, + lnrpc.Failure_TEMPORARY_CHANNEL_FAILURE, + attempt.Failure.Code) + // For settle and resume we make sure the payment is successful. case routerrpc.ResolveHoldForwardAction_SETTLE: fallthrough