Skip to content

Commit db5cacd

Browse files
committed
return unencrypted failure messages with channel update
1 parent c19e992 commit db5cacd

File tree

4 files changed

+41
-13
lines changed

4 files changed

+41
-13
lines changed

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ require (
103103
github.com/lightningnetwork/lnd/kvdb v1.3.1 // indirect
104104
github.com/lightningnetwork/lnd/ticker v1.1.0 // indirect
105105
github.com/lightningnetwork/lnd/tlv v1.0.3 // indirect
106-
github.com/lightningnetwork/lnd/tor v1.0.1 // indirect
106+
github.com/lightningnetwork/lnd/tor v1.1.0 // indirect
107107
github.com/ltcsuite/ltcd v0.20.1-beta // indirect
108108
github.com/mailru/easyjson v0.7.6 // indirect
109109
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
@@ -182,3 +182,5 @@ require (
182182
)
183183

184184
replace github.com/bottlepay/lnmux/lnmuxrpc => ./lnmuxrpc
185+
186+
replace github.com/lightningnetwork/lnd => /users/Joost.Jager/lightninglabs/lnd

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,6 @@ github.com/lightninglabs/neutrino v0.14.2 h1:yrnZUCYMZ5ECtXhgDrzqPq2oX8awoAN2D/c
507507
github.com/lightninglabs/neutrino v0.14.2/go.mod h1:OICUeTCn+4Tu27YRJIpWvvqySxx4oH4vgdP33Sw9RDc=
508508
github.com/lightningnetwork/lightning-onion v1.0.2-0.20220211021909-bb84a1ccb0c5 h1:TkKwqFcQTGYoI+VEqyxA8rxpCin8qDaYX0AfVRinT3k=
509509
github.com/lightningnetwork/lightning-onion v1.0.2-0.20220211021909-bb84a1ccb0c5/go.mod h1:7dDx73ApjEZA0kcknI799m2O5kkpfg4/gr7N092ojNo=
510-
github.com/lightningnetwork/lnd v0.15.4-beta h1:vO+UZjuA8RqJdDlfwQeS0h2PCocYwwqv5HkX2IXf5/M=
511-
github.com/lightningnetwork/lnd v0.15.4-beta/go.mod h1:6aoOkifcI9tuk8UV5l2rVZSq0681obuP4zvfK+2ZrT0=
512510
github.com/lightningnetwork/lnd/clock v1.0.1/go.mod h1:KnQudQ6w0IAMZi1SgvecLZQZ43ra2vpDNj7H/aasemg=
513511
github.com/lightningnetwork/lnd/clock v1.1.0 h1:/yfVAwtPmdx45aQBoXQImeY7sOIEr7IXlImRMBOZ7GQ=
514512
github.com/lightningnetwork/lnd/clock v1.1.0/go.mod h1:KnQudQ6w0IAMZi1SgvecLZQZ43ra2vpDNj7H/aasemg=
@@ -527,8 +525,8 @@ github.com/lightningnetwork/lnd/tlv v1.0.2/go.mod h1:fICAfsqk1IOsC1J7G9IdsWX1EqW
527525
github.com/lightningnetwork/lnd/tlv v1.0.3 h1:0xBZcPuXagP6f7TY/RnLNR4igE21ov6qUdTr5NyvhhI=
528526
github.com/lightningnetwork/lnd/tlv v1.0.3/go.mod h1:dzR/aZetBri+ZY/fHbwV06fNn/3UID6htQzbHfREFdo=
529527
github.com/lightningnetwork/lnd/tor v1.0.0/go.mod h1:RDtaAdwfAm+ONuPYwUhNIH1RAvKPv+75lHPOegUcz64=
530-
github.com/lightningnetwork/lnd/tor v1.0.1 h1:A11FrpU0Y//g+fA827W4VnjOeoIvExONdchlLX8wYkA=
531-
github.com/lightningnetwork/lnd/tor v1.0.1/go.mod h1:RDtaAdwfAm+ONuPYwUhNIH1RAvKPv+75lHPOegUcz64=
528+
github.com/lightningnetwork/lnd/tor v1.1.0 h1:iXO7fSzjxTI+p88KmtpbuyuRJeNfgtpl9QeaAliILXE=
529+
github.com/lightningnetwork/lnd/tor v1.1.0/go.mod h1:RDtaAdwfAm+ONuPYwUhNIH1RAvKPv+75lHPOegUcz64=
532530
github.com/ltcsuite/ltcd v0.20.1-beta h1:ka9ZwUG7oUPppl+7ptuh5VDxGD7TWEJXu/IOOOz1yfY=
533531
github.com/ltcsuite/ltcd v0.20.1-beta/go.mod h1:ZFQaYdYULIuTQiWqs7AUiHD2XhDFeeHW1IH+UYMdABU=
534532
github.com/ltcsuite/ltcutil v0.0.0-20191227053721-6bec450ea6ad/go.mod h1:8Vg/LTOO0KYa/vlHWJ6XZAevPQThGH5sufO0Hrou/lA=

interceptor.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,11 @@ func (i *interceptor) start(ctx context.Context) error {
156156
ChanId: item.incomingKey.ChanID,
157157
HtlcId: item.incomingKey.HtlcID,
158158
},
159-
Action: item.resp.action,
160-
Preimage: item.resp.preimage[:],
161-
FailureMessage: item.resp.failureMessage,
162-
FailureCode: item.resp.failureCode,
159+
Action: item.resp.action,
160+
Preimage: item.resp.preimage[:],
161+
FailureMessage: item.resp.failureMessage,
162+
FailureCode: item.resp.failureCode,
163+
FailureMessageUnencrypted: item.resp.failureMessageUnencrypted,
163164
}
164165

165166
if err := send(rpcResp); err != nil {

mux.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"context"
66
"fmt"
77
"sync"
8+
"time"
89

910
"github.com/bottlepay/lnmux/lnd"
1011
"github.com/bottlepay/lnmux/types"
@@ -105,10 +106,11 @@ type interceptedHtlc struct {
105106
}
106107

107108
type interceptedHtlcResponse struct {
108-
action routerrpc.ResolveHoldForwardAction
109-
preimage lntypes.Preimage
110-
failureMessage []byte
111-
failureCode lnrpc.Failure_FailureCode
109+
action routerrpc.ResolveHoldForwardAction
110+
preimage lntypes.Preimage
111+
failureMessage []byte
112+
failureCode lnrpc.Failure_FailureCode
113+
failureMessageUnencrypted bool
112114
}
113115

114116
func (p *Mux) Run(mainCtx context.Context) error {
@@ -221,6 +223,31 @@ func (p *Mux) ProcessHtlc(
221223
fail := func(code lnwire.FailCode) error {
222224
logger.Debugw("Failing htlc", "code", code)
223225

226+
if code == lnwire.CodeFeeInsufficient {
227+
wireMsg := lnwire.NewFeeInsufficient(0, lnwire.ChannelUpdate{
228+
ChainHash: *p.lnd.Network().GenesisHash,
229+
ShortChannelID: lnwire.NewShortChanIDFromInt(p.virtualChannel),
230+
Timestamp: uint32(time.Now().Unix()),
231+
// TODO: Set direction!
232+
// MessageFlags: ,
233+
// ChannelFlags: ,
234+
TimeLockDelta: uint16(p.routingPolicy.CltvDelta),
235+
BaseFee: uint32(p.routingPolicy.FeeBaseMsat),
236+
FeeRate: uint32(p.routingPolicy.FeeRatePpm),
237+
})
238+
var w bytes.Buffer
239+
err := lnwire.EncodeFailureMessage(&w, wireMsg, 0)
240+
if err != nil {
241+
return err
242+
}
243+
244+
return htlc.reply(&interceptedHtlcResponse{
245+
action: routerrpc.ResolveHoldForwardAction_FAIL,
246+
failureMessage: w.Bytes(),
247+
failureMessageUnencrypted: true,
248+
})
249+
}
250+
224251
rpcCode, err := marshallFailureCode(code)
225252
if err != nil {
226253
return err

0 commit comments

Comments
 (0)