lnwire: add convenience functions for protocol validation
This commit is contained in:
1 parent
42089b19d6
commit
36f53d74ab
1 file changed
+84
@@ -318,3 +318,87 @@ func (dp *DynPropose) MsgType() MessageType {
|
|||||||
func (dp *DynPropose) SerializedSize() (uint32, error) {
|
func (dp *DynPropose) SerializedSize() (uint32, error) {
|
||||||
return MessageSerializedSize(dp)
|
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