channeldb: Serialize/deserialize AMP struct in hop
The AMP struct in a hop was never being set when deserizlied. Also, the AMP TLV record was not being added when the hop was serialized. This sets the TLV record when serializing and correctly sets the AMP struct on the hop when that record is present. Co-authored-by: BitcoinCoderBob <90647227+BitcoinCoderBob@users.noreply.github.com> Co-authored-by: Tee8z <tee8z@protonmail.com>
This commit is contained in:
3 files changed
+40
-1
No files matched your search
+21
-1
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user