mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-29 07:00:55 +02:00
lnwire: add convenience functions for protocol validation
This commit is contained in:
committed by
yyforyongyu
parent
42089b19d6
commit
36f53d74ab
@@ -318,3 +318,87 @@ func (dp *DynPropose) MsgType() MessageType {
|
||||
func (dp *DynPropose) SerializedSize() (uint32, error) {
|
||||
return MessageSerializedSize(dp)
|
||||
}
|
||||
|
||||
// SerializeTlvData takes just the TLV data of DynPropose (which covers all of
|
||||
// the parameters on deck for changing) and serializes just this component. The
|
||||
// main purpose of this is to make it easier to validate the DynAck signature.
|
||||
func (dp *DynPropose) SerializeTlvData() ([]byte, error) {
|
||||
var tlvRecords []tlv.Record
|
||||
dp.DustLimit.WhenSome(func(dl btcutil.Amount) {
|
||||
protoSats := uint64(dl)
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPDustLimitSatoshis, &protoSats,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.MaxValueInFlight.WhenSome(func(max MilliSatoshi) {
|
||||
protoSats := uint64(max)
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPMaxHtlcValueInFlightMsat, &protoSats,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.ChannelReserve.WhenSome(func(min btcutil.Amount) {
|
||||
channelReserve := uint64(min)
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPChannelReserveSatoshis, &channelReserve,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.CsvDelay.WhenSome(func(wait uint16) {
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPToSelfDelay, &wait,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.MaxAcceptedHTLCs.WhenSome(func(max uint16) {
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPMaxAcceptedHtlcs, &max,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.FundingKey.WhenSome(func(key btcec.PublicKey) {
|
||||
keyScratch := &key
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPFundingPubkey, &keyScratch,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.ChannelType.WhenSome(func(ty ChannelType) {
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakeDynamicRecord(
|
||||
DPChannelType, &ty,
|
||||
ty.featureBitLen,
|
||||
channelTypeEncoder, channelTypeDecoder,
|
||||
),
|
||||
)
|
||||
})
|
||||
dp.KickoffFeerate.WhenSome(func(kickoffFeerate chainfee.SatPerKWeight) {
|
||||
protoSats := uint32(kickoffFeerate)
|
||||
tlvRecords = append(
|
||||
tlvRecords, tlv.MakePrimitiveRecord(
|
||||
DPKickoffFeerate, &protoSats,
|
||||
),
|
||||
)
|
||||
})
|
||||
tlv.SortRecords(tlvRecords)
|
||||
|
||||
tlvStream, err := tlv.NewStream(tlvRecords...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var outBuf bytes.Buffer
|
||||
err = tlvStream.Encode(&outBuf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return outBuf.Bytes(), nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user