Skip to content

Commit 99cc972

Browse files
committed
wip: untangling htlcswitch dependency part 2
1 parent ef1ec51 commit 99cc972

File tree

7 files changed

+49
-38
lines changed

7 files changed

+49
-38
lines changed

go.mod

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ require (
44
github.com/NebulousLabs/go-upnp v0.0.0-20180202185039-29b680b06c82
55
github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344
66
github.com/andybalholm/brotli v1.0.4
7-
github.com/btcsuite/btcd v0.25.0
7+
github.com/btcsuite/btcd v0.24.3-0.20250318170759-4f4ea81776d6
88
github.com/btcsuite/btcd/btcec/v2 v2.3.6
99
github.com/btcsuite/btcd/btcutil v1.1.5
1010
github.com/btcsuite/btcd/btcutil/psbt v1.1.8
@@ -32,7 +32,7 @@ require (
3232
github.com/kkdai/bstream v1.0.0
3333
github.com/lightninglabs/neutrino v0.16.1
3434
github.com/lightninglabs/neutrino/cache v1.1.2
35-
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9
35+
github.com/lightningnetwork/lightning-onion v1.2.1-0.20251113231738-54355092273f
3636
github.com/lightningnetwork/lnd/cert v1.2.2
3737
github.com/lightningnetwork/lnd/clock v1.1.1
3838
github.com/lightningnetwork/lnd/fn/v2 v2.0.9
@@ -51,7 +51,7 @@ require (
5151
github.com/urfave/cli v1.22.9
5252
go.etcd.io/etcd/client/pkg/v3 v3.5.12
5353
go.etcd.io/etcd/client/v3 v3.5.12
54-
golang.org/x/crypto v0.44.0
54+
golang.org/x/crypto v0.45.0
5555
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8
5656
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028
5757
golang.org/x/sync v0.18.0
@@ -64,8 +64,6 @@ require (
6464
pgregory.net/rapid v1.2.0
6565
)
6666

67-
require github.com/btcsuite/btcd/v2transport v1.0.1 // indirect
68-
6967
require (
7068
dario.cat/mergo v1.0.1 // indirect
7169
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
@@ -183,7 +181,7 @@ require (
183181
go.uber.org/multierr v1.6.0 // indirect
184182
go.uber.org/zap v1.17.0 // indirect
185183
golang.org/x/mod v0.29.0 // indirect
186-
golang.org/x/net v0.46.0 // indirect
184+
golang.org/x/net v0.47.0 // indirect
187185
golang.org/x/sys v0.38.0 // indirect
188186
golang.org/x/text v0.31.0 // indirect
189187
golang.org/x/tools v0.38.0 // indirect

go.sum

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
4242
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
4343
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
4444
github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A=
45-
github.com/btcsuite/btcd v0.25.0 h1:JPbjwvHGpSywBRuorFFqTjaVP4y6Qw69XJ1nQ6MyWJM=
46-
github.com/btcsuite/btcd v0.25.0/go.mod h1:qbPE+pEiR9643E1s1xu57awsRhlCIm1ZIi6FfeRA4KE=
45+
github.com/btcsuite/btcd v0.24.3-0.20250318170759-4f4ea81776d6 h1:8n9k3I7e8DkpdQ5YAP4j8ly/LSsbe6qX9vmVbrUGvVw=
46+
github.com/btcsuite/btcd v0.24.3-0.20250318170759-4f4ea81776d6/go.mod h1:OmM4kFtB0klaG/ZqT86rQiyw/1iyXlJgc3UHClPhhbs=
4747
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
4848
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
4949
github.com/btcsuite/btcd/btcec/v2 v2.3.6 h1:IzlsEr9olcSRKB/n7c4351F3xHKxS2lma+1UFGCYd4E=
@@ -58,8 +58,6 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtyd
5858
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
5959
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ=
6060
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
61-
github.com/btcsuite/btcd/v2transport v1.0.1 h1:pIyyyBCPwd087K3Wdb/9tIvUubAQdzTJghjPgzTQVsE=
62-
github.com/btcsuite/btcd/v2transport v1.0.1/go.mod h1:N6H0HGSElVVJKntzaYHYVbW71DtWDLMw2yhwVRO3ZOE=
6361
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
6462
github.com/btcsuite/btclog v1.0.0 h1:sEkpKJMmfGiyZjADwEIgB1NSwMyfdD1FB8v6+w1T0Ns=
6563
github.com/btcsuite/btclog v1.0.0/go.mod h1:w7xnGOhwT3lmrS4H3b/D1XAXxvh+tbhUm8xeHN2y3TQ=
@@ -370,8 +368,8 @@ github.com/lightninglabs/neutrino/cache v1.1.2 h1:C9DY/DAPaPxbFC+xNNEI/z1SJY9GS3
370368
github.com/lightninglabs/neutrino/cache v1.1.2/go.mod h1:XJNcgdOw1LQnanGjw8Vj44CvguYA25IMKjWFZczwZuo=
371369
github.com/lightninglabs/protobuf-go-hex-display v1.33.0-hex-display h1:Y2WiPkBS/00EiEg0qp0FhehxnQfk3vv8U6Xt3nN+rTY=
372370
github.com/lightninglabs/protobuf-go-hex-display v1.33.0-hex-display/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
373-
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9 h1:6D3LrdagJweLLdFm1JNodZsBk6iU4TTsBBFLQ4yiXfI=
374-
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9/go.mod h1:EDqJ3MuZIbMq0QI1czTIKDJ/GS8S14RXPwapHw8cw6w=
371+
github.com/lightningnetwork/lightning-onion v1.2.1-0.20251113231738-54355092273f h1:gLg51krPAkA7IDtPzr+KqWENSr20DboNn1sPon6N07E=
372+
github.com/lightningnetwork/lightning-onion v1.2.1-0.20251113231738-54355092273f/go.mod h1:nP85zMHG7c0si/eHBbSQpuDCtnIXfSvFrK3tW6YWzmU=
375373
github.com/lightningnetwork/lnd/actor v0.0.3 h1:m+v0UuHdEUg4S82J4aC40pGonScckzsu1K9sdZeAo5Y=
376374
github.com/lightningnetwork/lnd/actor v0.0.3/go.mod h1:RKgQPYHLVHuIRdMF/Q8+NPV2Nva3F66ZsULD2+TskKc=
377375
github.com/lightningnetwork/lnd/cert v1.2.2 h1:71YK6hogeJtxSxw2teq3eGeuy4rHGKcFf0d0Uy4qBjI=
@@ -617,8 +615,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y
617615
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
618616
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
619617
golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
620-
golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
621-
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
618+
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
619+
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
622620
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
623621
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
624622
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
@@ -662,8 +660,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
662660
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
663661
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
664662
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
665-
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
666-
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
663+
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
664+
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
667665
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
668666
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
669667
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=

htlcswitch/hop/fuzz_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,19 @@ func FuzzHopPayload(f *testing.F) {
4545

4646
r := bytes.NewReader(data)
4747

48-
var hopPayload1, hopPayload2 sphinx.HopPayload
48+
var hopPayload1, hopPayload2 *sphinx.HopPayload
49+
tlvGuaranteed := false
4950

50-
if err := hopPayload1.Decode(r); err != nil {
51+
hopPayload1, err := sphinx.DecodeHopPayload(r, tlvGuaranteed)
52+
if err != nil {
5153
return
5254
}
5355

5456
var b bytes.Buffer
5557
require.NoError(t, hopPayload1.Encode(&b))
56-
require.NoError(t, hopPayload2.Decode(&b))
58+
59+
hopPayload2, err = sphinx.DecodeHopPayload(&b, tlvGuaranteed)
60+
require.NoError(t, err)
5761

5862
require.Equal(t, hopPayload1, hopPayload2)
5963
})

onionmessage/endpoint.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func (o *OnionEndpoint) SendMessage(ctx context.Context,
153153
}
154154
// If we have a next hop, forward the message.
155155
if nextNodeID != nil && nextBlindingPoint != nil && nextPacket != nil {
156-
err := forwardMessage(
156+
err := o.forwardMessage(
157157
ctx, nextNodeID, nextBlindingPoint, nextPacket,
158158
)
159159
if err != nil {
@@ -178,9 +178,9 @@ func (o *OnionEndpoint) SendMessage(ctx context.Context,
178178

179179
// If we have a payload (no error), add its contents to our update.
180180
if payload != nil {
181-
update.CustomRecords = payload.CustomRecords()
182-
update.ReplyPath = payload.ReplyPath()
183-
update.EncryptedRecipientData = payload.EncryptedData()
181+
update.CustomRecords = payload.customRecords
182+
update.ReplyPath = payload.replyPath
183+
update.EncryptedRecipientData = payload.encryptedData
184184
}
185185

186186
// Send the update to any subscribers.
@@ -197,7 +197,7 @@ func (o *OnionEndpoint) SendMessage(ctx context.Context,
197197
return true
198198
}
199199

200-
func forwardMessage(ctx context.Context,
200+
func (o *OnionEndpoint) forwardMessage(ctx context.Context,
201201
nextNodeID *btcec.PublicKey, nextBlindingPoint *btcec.PublicKey,
202202
nextPacket []byte) error {
203203

onionmessage/hop.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ type Payload struct {
2727
// in blinded routes.
2828
encryptedData []byte
2929

30-
// blindingPoint is an ephemeral pubkey for use in blinded routes.
31-
blindingPoint *btcec.PublicKey
32-
3330
// replyPath is the blinded route a reply to an onion message should
3431
// take to receive the sender of the original onion message.
3532
replyPath *lnwire.ReplyPath
@@ -40,18 +37,16 @@ func processOnionMessage(router *sphinx.Router,
4037
msg lnwire.OnionMessage) (*Payload, *btcec.PublicKey, *btcec.PublicKey,
4138
[]byte, error) {
4239

43-
onionPkt := &sphinx.OnionPacket{}
40+
var onionPkt sphinx.OnionPacket
4441

4542
err := onionPkt.Decode(bytes.NewReader(msg.OnionBlob))
4643
if err != nil {
4744
return nil, nil, nil, nil, fmt.Errorf("could not decode onion packet: %w", err)
4845
}
4946

50-
var opts []sphinx.ProcessOnionOpt
51-
opts = append(opts, sphinx.WithBlindingPoint(msg.PathKey))
52-
47+
blindingPoint := sphinx.WithBlindingPoint(msg.PathKey)
5348
processedPkt, err := router.ProcessOnionPacket(
54-
onionPkt, nil, 10, opts...,
49+
&onionPkt, nil, 10, blindingPoint,
5550
)
5651
if err != nil {
5752
return nil, nil, nil, nil, fmt.Errorf("%w: could not process onion packet: %w",
@@ -87,7 +82,7 @@ func processOnionMessage(router *sphinx.Router,
8782

8883
// Otherwise, we must be a forwarding node.
8984
decrypted, err := router.DecryptBlindedHopData(
90-
payload.blindingPoint, payload.encryptedData,
85+
msg.PathKey, payload.encryptedData,
9186
)
9287
if err != nil {
9388
return nil, nil, nil, nil, fmt.Errorf("decrypt blinded data: %w", err)
@@ -105,7 +100,7 @@ func processOnionMessage(router *sphinx.Router,
105100
nextEph, err := routeData.NextBlindingOverride.UnwrapOrFuncErr(
106101
func() (tlv.RecordT[tlv.TlvType8, *btcec.PublicKey], error) {
107102
next, err := router.NextEphemeral(
108-
payload.blindingPoint,
103+
msg.PathKey,
109104
)
110105
if err != nil {
111106
return routeData.NextBlindingOverride.Zero(),

peer/brontide.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ type Config struct {
308308

309309
// SphinxRouterNoReplayLog is the router used to decode sphinx onion
310310
// blobs from an onion_message_packet.
311-
sphinxRouterNoReplayLog *sphinx.Router
311+
SphinxRouterNoReplayLog *sphinx.Router
312312

313313
// WitnessBeacon is used when setting up ChannelLinks so they can add any
314314
// preimages that they learn.
@@ -937,7 +937,7 @@ func (p *Brontide) Start() error {
937937
// messages to the endpoint for further processing.
938938
onionMessageEndpoint := onionmessage.NewOnionEndpoint(
939939
p.cfg.ActorSystem.Receptionist(),
940-
p.cfg.sphinxRouterNoReplayLog,
940+
p.cfg.SphinxRouterNoReplayLog,
941941
onionmessage.WithMessageServer(p.cfg.OnionMessageServer),
942942
)
943943

server.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,11 @@ func newServer(ctx context.Context, cfg *Config, listenAddrs []net.Addr,
617617
)
618618
sphinxRouter := sphinx.NewRouter(nodeKeyECDH, replayLog)
619619

620-
sphinxRouterNoReplayLog := sphinx.NewRouter(nodeKeyECDH, nil)
620+
// TODO(gijs): remove the memory replay log once lightning-onion
621+
// supports it.
622+
sphinxRouterNoReplayLog := sphinx.NewRouter(
623+
nodeKeyECDH, sphinx.NewMemoryReplayLog(),
624+
)
621625

622626
writeBufferPool := pool.NewWriteBuffer(
623627
pool.DefaultWriteBufferGCInterval,
@@ -2336,6 +2340,15 @@ func (s *server) Start(ctx context.Context) error {
23362340
return
23372341
}
23382342

2343+
cleanup = cleanup.add(func() error {
2344+
s.sphinxRouterNoReplayLog.Stop()
2345+
return nil
2346+
})
2347+
if err := s.sphinxRouterNoReplayLog.Start(); err != nil {
2348+
startErr = err
2349+
return
2350+
}
2351+
23392352
cleanup = cleanup.add(s.chanStatusMgr.Stop)
23402353
if err := s.chanStatusMgr.Start(); err != nil {
23412354
startErr = err
@@ -2607,6 +2620,9 @@ func (s *server) Stop() error {
26072620
// Shutdown the actor system to stop all actors.
26082621
s.actorSystem.Shutdown()
26092622

2623+
// Shutdown the onion router for onion messaging.
2624+
s.sphinxRouterNoReplayLog.Stop()
2625+
26102626
// Shutdown the wallet, funding manager, and the rpc server.
26112627
if err := s.chanStatusMgr.Stop(); err != nil {
26122628
srvrLog.Warnf("failed to stop chanStatusMgr: %v", err)
@@ -4388,7 +4404,7 @@ func (s *server) peerConnected(conn net.Conn, connReq *connmgr.ConnReq,
43884404
BestBlockView: s.cc.BestBlockTracker,
43894405
RoutingPolicy: s.cc.RoutingPolicy,
43904406
Sphinx: s.sphinx,
4391-
sphinxRouterNoReplayLog: s.sphinxRouterNoReplayLog,
4407+
SphinxRouterNoReplayLog: s.sphinxRouterNoReplayLog,
43924408
WitnessBeacon: s.witnessBeacon,
43934409
Invoices: s.invoices,
43944410
ChannelNotifier: s.channelNotifier,

0 commit comments

Comments
 (0)