Commit Graph
604 Commits
Author SHA1 Message Date
Yong d1d3a82010 Merge pull request #9884 from ellemouton/relaxFeatureBitCheck
multi: use relaxed feature bit `Set` method for peer features
2025-09-10 17:22:16 +08:00
Elle Mouton d61a8af4c4 lnwire: re-usable address descriptor parsers
In this commit, the logic in ReadElements that is used to read a single
address descriptor from a io.Reader is separated out into a new function
so that the logic can be re-used elsewhere.
2025-09-03 08:32:37 +02:00
Elle Mouton f0a20c9d04 netadd: split ValidatenodeAnn into sig and field checks
Check that the node ann doesnt contain more than 1 DNS addr.
This will ensure that we now start rejecting new node announcements
with multiple DNS addrs since this check is called in the gossiper
before persisting a node ann to our local graph.

It also validates the DNS fields according to BOLT #7 specs.
2025-09-03 01:11:34 +00:00
Elle Mouton 670b26ba3d lnwire: add encoding/decoding for DNS addr
Co-authored-by: Elle Mouton <elle.mouton@gmail.com>
2025-09-02 17:51:31 +00:00
Mohamed Awnallah a0057c2026 lnwire: add DNSAddress type 2025-09-02 17:51:31 +00:00
Mohamed AwnallahandElle Mouton 7acd6018c9 lnwire: remove AddrLen helper
In this commit, we remove `AddrLen` as prepration step
before adding DNS address type which will have a var length.

Co-authored-by: Elle Mouton <elle.mouton@gmail.com>
2025-09-02 17:51:31 +00:00
Olaoluwa Osuntokun 47e9f05ddf Merge pull request #10027 from yyforyongyu/dyn-bigsize-msg
Fix `ExtraData` field and use `BigSize` encodine
2025-07-16 10:56:30 -07:00
Elle Mouton ed17574196 lnwire: fix RandNodeAlias to produce valid UTF-8
To ensure that the RandNodeAlias helper can be used elsewhere to
generate random aliases, we adjust it in this test to only produce valid
UTF-8 strings as required by the spec.
2025-07-15 18:06:05 +02:00
yyforyongyu 7a9f197de8 lnwire: simplify dyn decode methods
Remove the unnecessary convertions as suggested by Gemini.
2025-07-11 04:11:31 +03:00
yyforyongyu 91797ad1d2 lnwire: patch test and fix extra data in DynCommit 2025-07-11 04:11:31 +03:00
yyforyongyu e6ab37305c lnwire: add missing record LocalNonce
This record was never added to the `DynCommit`, but it's inherited from
the embedding msg `DynAck`.
2025-07-11 04:11:30 +03:00
yyforyongyu f39c3679f2 lnwire: make LocalNonce an optional tlv record and fix extra data
It should be an optional record instead of an fn option. In addition,
its tlv type is bumped to be 14 as this record is also included in the
`DynCommit`. If we use tlv type 0, it will create a conflict in the msg
`DynCommit`, which is fixed in the following commit.
2025-07-11 04:11:30 +03:00
yyforyongyu b7d2f68ed0 lnwire: patch uint test for DynAck 2025-07-11 04:11:30 +03:00
yyforyongyu 5961f7a1bd lnwire: add method ParseAndExtractExtraData
Similar to `ParseAndExtractCustomRecords`, we now add this helper method
to make sure the extra data is parsed correctly.
2025-07-11 04:11:30 +03:00
yyforyongyu e94ca84449 lnwire: fix encoding of MilliSatoshi
`MilliSatoshi` itself is already a `BigSize`, we just need to change the
decoding and encoding types to use that.
2025-07-11 04:11:29 +03:00
yyforyongyu 5e9365552c lnwire: fix encoding ExtraData in DynPropose
Previously we encode all the fields plus extra data to the field
`ExtraData`, this is now fixed by encoding only unknown data to extra
data. For known records, they are already encoded into the message
fields.
2025-07-11 04:11:29 +03:00
yyforyongyu 61ef83e9c2 lnwire: patch unit test for DynPropose 2025-07-11 04:09:11 +03:00
yyforyongyu 0f1cb54eb2 lnwire: use BigSize for encoding btc amount 2025-07-11 04:09:11 +03:00
Elle Mouton 8cf567b948 multi: use the "errors" package everywhere
Replace all usages of the "github.com/go-errors/errors" and
"github.com/pkg/errors" packages with the standard lib's "errors"
package. This ensures that error wrapping and `errors.Is` checks will
work as expected.
2025-06-30 09:46:55 +02:00
Elle Mouton b41a079901 multi: use relaxed feature bit Set method for peer features
The spec says: `The origin node MUST NOT set both the optional and
mandatory bits`. and so this is why we have the SafeSet method which
prevents us from accidentally setting both optional and required bits
for any of our own feature bits. But the spec then also says `if both
the optional and the mandatory feature bits in a pair are set, the
feature should be treated as mandatory.` which means that when we read
the feature vectors of our peers or from a payment request, we should be
a bit less strict and not error out. We should just set both bits which
will result in "IsRequired" returning true.

Update the `TestExtractIntentFromSendRequest` test to show the new
behaviour.
2025-06-25 13:14:31 +02:00
yyforyongyu c64e3a6c34 lnwire: fix linter 2025-06-25 14:53:22 +08:00
yyforyongyu 828486e35a lnwire: fix unit test for DynCommit 2025-06-25 14:53:20 +08:00
Keagan McClelland a72cadf2ed lnwire: convert DynPropose and DynCommit to use typed tlv records 2025-06-25 02:22:22 +08:00
Keagan McClelland 79e4e74447 lnwire: change DynPropose/DynCommit TLV numbers to align with spec 2025-06-25 02:09:08 +08:00
Keagan McClelland 72582d4acc lnwire: add HtlcMinimum to DynPropose and DynCommit 2025-06-25 02:08:58 +08:00
Keagan McClelland f40530e4f4 lnwire: remove FundingKey from DynPropose and DynCommit 2025-06-25 02:08:56 +08:00
Keagan McClelland cbca5b1152 lnwire: remove kickoff feerate from propose/commit 2025-06-25 02:08:22 +08:00
Keagan McClelland 36f53d74ab lnwire: add convenience functions for protocol validation 2025-06-25 02:06:16 +08:00
yyforyongyu 42089b19d6 lnwire: add DynCommit message to match spec 2025-06-25 01:10:54 +08:00
Keagan McClelland 60887ad3ef lnwire: add signature to DynAck 2025-06-25 01:10:49 +08:00
Keagan McClelland c6861770de lnwire: remove no longer used initiator field 2025-06-25 01:10:46 +08:00
Elle Mouton 667e0aadc3 lnwire: fix test data race
Ensure that tests can run in parallel without causing a data race by
adding a `makeTestChannelUpdate` constructor rather than sharing the
same `testChannelUpdate` type between tests. This is needed since some
tests write to the type.
2025-06-20 12:22:59 +02:00
Elle Mouton 420001a98c lnwire: add InboundFee TLV record to ChannelUpdate 2025-06-09 08:32:52 +02:00
Elle Mouton 412e05f85f lnwire: add *OpaqueAddrs case in WriteElements
And then expand the chanbackup unit tests to cover such a case.
2025-05-23 16:14:47 +02:00
Elle Mouton a15489159a lnwire: remove duplicated logic
Use existing serialisation helpers for serialising TC Pand Onion
addresses in WriteElement.
2025-05-23 16:12:28 +02:00
Elle Mouton 1410a0949d lnwire: validate that gossip messages contain valid TLV
In this commit, we check that the extra bytes appended to gossip
messages contain valid TLV streams. We do this here for:
- channel_announcement
- channel_announcement_2
- channel_update
- channel_update_2
- node_announcement

This is in preparation for the SQL version of the graph store which will
normalise TLV streams at persistence time.
2025-05-22 14:14:41 +02:00
Elle Mouton ad38ed73c7 go.mod+lnwire: bump TLV dep and fix MilliSatoshi Record
In this commit, we update the `tlv` package version which includes type
constraints on the `tlv.SizeBigSize` method parameter. This exposes a
bug in the MilliSatoshi Record method which is fixed here.

This was not caught in tests before since currently only
our TLV encoding code makes use of this SizeFunc (so we would write 0
size to disk) but then when we read the bytes from disk and decode, we
dont use the SizeFunc and our MilliSatoshi decode method makes direct
use of the `tlv.DBigSize` function which _currently does not make use of
the `l` length variable passed to it_. So it currently does correctly
read the data.
2025-05-07 19:36:25 +02:00
xinhangzhou b7e3c20383 refactor: use maps.Copy for cleaner map handling
Signed-off-by: xinhangzhou <shuangcui@aliyun.com>
2025-03-25 01:19:55 +08:00
Olaoluwa Osuntokun 05a6b6838f lnwire: add new TestSerializedSize method
This uses all the interfaces and implementations added in the prior test.
2025-03-20 18:28:53 -07:00
Olaoluwa Osuntokun b2f24789dc lnwire: revamp TestLightningWireProtocol using new rapid test gen
With what we added in the prior commit, we can significantly shrink the
size of this test. We also make it easier to extend in the future, as
this will fail if a new message is added, that doesn't have the needed
methods, as long as MsgEnd is updated.
2025-03-20 18:28:23 -07:00
Olaoluwa Osuntokun eb877db2ff lnwire: add new TestMessage interface for property tests
In this commit, we add a new `TestMessage` interface for use in property
tests. With this, we'll be able to generate a random instance of a given
message, using the rapid byte stream. This can also eventually be useful
for fuzzing.
2025-03-20 18:28:07 -07:00
Olaoluwa Osuntokun 56a100123b lnwire: add new SerializedSize method to all wire messages
This'll be useful for the bandwidth based rate limiting we'll implement
in the next commit.
2025-03-20 18:27:52 -07:00
Olaoluwa Osuntokun 14eca4406e lnwire: update closing_complete and closing_sig to latest spec draft
Both these messages now carry the address of both parties, so you can
update an address without needing to send shutdown again.
2025-03-18 11:44:20 -05:00
Olaoluwa Osuntokun 752fc86c7d lnwire: add feature bits for new rbf coop close 2025-03-18 11:44:20 -05:00
Elle Mouton c5cff4052b lnwire_test: fix test doc string
This test started out demonstrating a bug. But that bug has since been
fixed. Fix the comment to reflect.
2025-02-05 08:17:42 +02:00
Nishant Bansal 7f8e89f3b4 lnwire: add 'x' separator in ShortChannelID method
Add the `AltString` method for `ShortChannelID` to produce a
human-readable format with 'x' as a separator
(block x transaction x output).

Signed-off-by: Nishant Bansal <nishant.bansal.282003@gmail.com>
2025-01-15 15:25:40 +05:30
Olaoluwa Osuntokun 540d3c0fc7 multi: switch to lock time from sequence for coop close v2 2024-12-10 23:07:01 +01:00
Olaoluwa Osuntokun fb429d658b Merge pull request #9330 from ProofOfKeags/update/fn2
multi: update to fn v2
2024-12-09 12:56:23 +01:00
Keagan McClelland ed2989ae33 multi: update to fn v2 2024-12-04 13:19:00 -07:00
yyforyongyu d108e14c5d multi: rename lll to ll and remove unused nolint 2024-12-04 07:20:59 +08:00