mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-01 18:27:43 +02:00
channeldb+routing: persist first hop custom data for route
This commit is contained in:
@@ -1096,6 +1096,25 @@ func serializeHTLCAttemptInfo(w io.Writer, a *HTLCAttemptInfo) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Merge the fixed/known records together with the custom records to
|
||||
// serialize them as a single blob. We can't do this in SerializeRoute
|
||||
// because we're in the middle of the byte stream there. We can only do
|
||||
// TLV serialization at the end of the stream, since EOF is allowed for
|
||||
// a stream if no more data is expected.
|
||||
producers := []tlv.RecordProducer{
|
||||
&a.Route.FirstHopAmount,
|
||||
}
|
||||
tlvData, err := lnwire.MergeAndEncode(
|
||||
producers, nil, a.Route.FirstHopWireCustomRecords,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := w.Write(tlvData); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1133,6 +1152,22 @@ func deserializeHTLCAttemptInfo(r io.Reader) (*HTLCAttemptInfo, error) {
|
||||
|
||||
a.Hash = &hash
|
||||
|
||||
// Read any remaining data (if any) and parse it into the known records
|
||||
// and custom records.
|
||||
extraData, err := io.ReadAll(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
customRecords, _, _, err := lnwire.ParseAndExtractCustomRecords(
|
||||
extraData, &a.Route.FirstHopAmount,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
a.Route.FirstHopWireCustomRecords = customRecords
|
||||
|
||||
return a, nil
|
||||
}
|
||||
|
||||
@@ -1398,6 +1433,8 @@ func SerializeRoute(w io.Writer, r route.Route) error {
|
||||
}
|
||||
}
|
||||
|
||||
// Any new/extra TLV data is encoded in serializeHTLCAttemptInfo!
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1431,5 +1468,7 @@ func DeserializeRoute(r io.Reader) (route.Route, error) {
|
||||
}
|
||||
rt.Hops = hops
|
||||
|
||||
// Any new/extra TLV data is decoded in deserializeHTLCAttemptInfo!
|
||||
|
||||
return rt, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user