diff --git a/channeldb/payments.go b/channeldb/payments.go index 800c877e1..c2d32ee8a 100644 --- a/channeldb/payments.go +++ b/channeldb/payments.go @@ -1157,6 +1157,10 @@ func serializeHop(w io.Writer, h *route.Hop) error { )) } + if h.AMP != nil { + records = append(records, h.AMP.Record()) + } + if h.Metadata != nil { records = append(records, record.NewMetadataRecord(&h.Metadata)) } @@ -1301,7 +1305,23 @@ func deserializeHop(r io.Reader) (*route.Hop, error) { } } - // If the metatdata type is present, remove it from the tlv map and + ampType := uint64(record.AMPOnionType) + if ampBytes, ok := tlvMap[ampType]; ok { + delete(tlvMap, ampType) + + var ( + amp = &record.AMP{} + ampRec = amp.Record() + r = bytes.NewReader(ampBytes) + ) + err := ampRec.Decode(r, uint64(len(ampBytes))) + if err != nil { + return nil, err + } + h.AMP = amp + } + + // If the metadata type is present, remove it from the tlv map and // populate directly on the hop. metadataType := uint64(record.MetadataOnionType) if metadata, ok := tlvMap[metadataType]; ok { diff --git a/channeldb/payments_test.go b/channeldb/payments_test.go index 8507268e4..37a7e30e7 100644 --- a/channeldb/payments_test.go +++ b/channeldb/payments_test.go @@ -44,11 +44,25 @@ var ( LegacyPayload: true, } + testHop3 = &route.Hop{ + PubKeyBytes: route.NewVertex(pub), + ChannelID: 12345, + OutgoingTimeLock: 111, + AmtToForward: 555, + CustomRecords: record.CustomSet{ + 65536: []byte{}, + 80001: []byte{}, + }, + AMP: record.NewAMP([32]byte{0x69}, [32]byte{0x42}, 1), + Metadata: []byte{1, 2, 3}, + } + testRoute = route.Route{ TotalTimeLock: 123, TotalAmount: 1234567, SourcePubKey: vertex, Hops: []*route.Hop{ + testHop3, testHop2, testHop1, }, diff --git a/docs/release-notes/release-notes-0.18.0.md b/docs/release-notes/release-notes-0.18.0.md index 0d48ab63f..d9884c2d8 100644 --- a/docs/release-notes/release-notes-0.18.0.md +++ b/docs/release-notes/release-notes-0.18.0.md @@ -53,6 +53,8 @@ walletrpc endpoint `RemoveTransaction` is introduced which let one easily remove unconfirmed transaction manually. +* The AMP struct in payment hops will [now be populated](https://github.com/lightningnetwork/lnd/pull/7976) when the AMP TLV is set. + # New Features ## Functional Enhancements @@ -203,6 +205,7 @@ * Amin Bashiri * Andras Banki-Horvath +* BitcoinerCoderBob * Carla Kirk-Cohen * Elle Mouton * ErikEk @@ -210,6 +213,8 @@ * Marcos Fernandez Perez * Matt Morehouse * Slyghtning +* Tee8z * Turtle * Ononiwu Maureen Chiamaka +* w3irdrobot * Yong Yu