Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drop the ahash dependency #2891

Merged
merged 3 commits into from
Feb 19, 2024

Conversation

TheBlueMatt
Copy link
Collaborator

@TheBlueMatt TheBlueMatt commented Feb 12, 2024

tkaitchuck/aHash#196 bumped the MSRV of
ahash in a patch release, which makes it rather difficult for us
to have it as a dependency.

Further, it seems that ahash hasn't been particularly robust in
the past, notably
tkaitchuck/aHash#163 and
tkaitchuck/aHash#166.

Luckily, core provides SipHasher even on no-std (sadly its
SipHash-2-4 unlike the SipHash-1-3 used by the DefaultHasher in
std). Thus, we drop the ahash dependency entirely here and
simply wrap SipHasher for our no-std HashMaps.

Copy link

coderabbitai bot commented Feb 12, 2024

Walkthrough

The series of changes focus on enhancing the hash table implementations across the project, shifting between std, hashbrown, and new hashing strategies to optimize performance and security. A notable introduction is the handling of hash table selection and configuration via feature flags, alongside adjustments for HashDoS attack protection. The restructuring also extends to testing and fuzzing environments, ensuring consistency and the effective use of hash tables throughout the codebase.

Changes

Files Summary
.lightning/src/lib.rs
.lightning-invoice/src/lib.rs
Restructured hash table handling and simplified module imports.
.lightning/src/util/hash_tables.rs
.lightning/src/util/mod.rs
Introduced hash_tables.rs for hash table re-exports and added to public scope.
.ci/check-cfg-flags.py
.github/workflows/build.yml
Renamed "ahash" feature to "possiblyrandom" and adjusted feature flags in workflow.
.fuzz/src/chanmon_consistency.rs
.fuzz/src/full_stack.rs
.fuzz/src/indexedmap.rs
.fuzz/src/router.rs
Replaced data structures with util::hash_tables module and adjusted usage.
.lightning-invoice/src/utils.rs Switched from HashMap to BTreeMap for channel sorting and filtering.
.possiblyrandom/src/lib.rs Added functionality for generating possibly-random data.

🐇✨
Changes abound, through the code they weave,
Hash tables shift, in magic we believe.
With flags aflutter, in randomness we trust,
Through bytes and bits, in CodeRabbit we must.
Let's hop to it, with each line we adjust!
🌟🐾

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share

Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit-tests for this file.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit tests for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository from git and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit tests.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json

CodeRabbit Discord Community

Join our Discord Community to get help, request features, and share feedback.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 0c2a715 and ba58745.
Files ignored due to path filters (4)
  • Cargo.toml is excluded by: !**/*.toml
  • bench/Cargo.toml is excluded by: !**/*.toml
  • lightning/Cargo.toml is excluded by: !**/*.toml
  • possiblyrandom/Cargo.toml is excluded by: !**/*.toml
Files selected for processing (4)
  • lightning/src/lib.rs (1 hunks)
  • lightning/src/util/hash_tables.rs (1 hunks)
  • lightning/src/util/mod.rs (1 hunks)
  • possiblyrandom/src/lib.rs (1 hunks)
Additional comments: 5
lightning/src/util/mod.rs (1)
  • 35-35: LGTM!
possiblyrandom/src/lib.rs (2)
  • 21-38: LGTM!
  • 34-38: LGTM!
lightning/src/lib.rs (1)
  • 173-173: SKIP: No specific code changes annotated for review.
lightning/src/util/hash_tables.rs (1)
  • 7-164: LGTM!

@TheBlueMatt TheBlueMatt force-pushed the 2024-02-no-ahash branch 2 times, most recently from 02b187f to 0ce96c6 Compare February 12, 2024 22:51
@codecov-commenter
Copy link

codecov-commenter commented Feb 12, 2024

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (73da722) 89.13% compared to head (5243ef9) 89.39%.
Report is 12 commits behind head on main.

❗ Current head 5243ef9 differs from pull request most recent head eecd2cd. Consider uploading reports for the commit eecd2cd to get more accurate results

Files Patch % Lines
possiblyrandom/src/lib.rs 0.00% 8 Missing ⚠️

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2891      +/-   ##
==========================================
+ Coverage   89.13%   89.39%   +0.26%     
==========================================
  Files         115      117       +2     
  Lines       94179    96569    +2390     
  Branches    94179    96569    +2390     
==========================================
+ Hits        83944    86327    +2383     
- Misses       7761     7816      +55     
+ Partials     2474     2426      -48     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@TheBlueMatt TheBlueMatt force-pushed the 2024-02-no-ahash branch 2 times, most recently from 8ef043d to dcf6d5c Compare February 13, 2024 17:56
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 0995de7 and dcf6d5c.
Files ignored due to path filters (4)
  • Cargo.toml is excluded by: !**/*.toml
  • bench/Cargo.toml is excluded by: !**/*.toml
  • lightning/Cargo.toml is excluded by: !**/*.toml
  • possiblyrandom/Cargo.toml is excluded by: !**/*.toml
Files selected for processing (5)
  • ci/check-cfg-flags.py (1 hunks)
  • lightning/src/lib.rs (1 hunks)
  • lightning/src/util/hash_tables.rs (1 hunks)
  • lightning/src/util/mod.rs (1 hunks)
  • possiblyrandom/src/lib.rs (1 hunks)
Files skipped from review as they are similar to previous changes (4)
  • lightning/src/lib.rs
  • lightning/src/util/hash_tables.rs
  • lightning/src/util/mod.rs
  • possiblyrandom/src/lib.rs
Additional comments: 2
ci/check-cfg-flags.py (2)
  • 16-17: Ensure the "possiblyrandom" feature is correctly integrated into other parts of the project, as this change indicates its significance in feature management.
  • 18-18: The addition of the "getrandom" feature should be verified for correct usage across the project, especially in contexts where OS randomness is leveraged.

@TheBlueMatt TheBlueMatt force-pushed the 2024-02-no-ahash branch 4 times, most recently from 1b4382a to 852d1d8 Compare February 13, 2024 19:48
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 0995de7 and 852d1d8.
Files ignored due to path filters (6)
  • Cargo.toml is excluded by: !**/*.toml
  • bench/Cargo.toml is excluded by: !**/*.toml
  • fuzz/Cargo.toml is excluded by: !**/*.toml
  • lightning-invoice/Cargo.toml is excluded by: !**/*.toml
  • lightning/Cargo.toml is excluded by: !**/*.toml
  • possiblyrandom/Cargo.toml is excluded by: !**/*.toml
Files selected for processing (12)
  • .github/workflows/build.yml (1 hunks)
  • ci/check-cfg-flags.py (1 hunks)
  • fuzz/src/chanmon_consistency.rs (8 hunks)
  • fuzz/src/full_stack.rs (6 hunks)
  • fuzz/src/indexedmap.rs (2 hunks)
  • fuzz/src/router.rs (8 hunks)
  • lightning-invoice/src/lib.rs (1 hunks)
  • lightning-invoice/src/utils.rs (4 hunks)
  • lightning/src/lib.rs (1 hunks)
  • lightning/src/util/hash_tables.rs (1 hunks)
  • lightning/src/util/mod.rs (1 hunks)
  • possiblyrandom/src/lib.rs (1 hunks)
Files skipped from review as they are similar to previous changes (12)
  • .github/workflows/build.yml
  • ci/check-cfg-flags.py
  • fuzz/src/chanmon_consistency.rs
  • fuzz/src/full_stack.rs
  • fuzz/src/indexedmap.rs
  • fuzz/src/router.rs
  • lightning-invoice/src/lib.rs
  • lightning-invoice/src/utils.rs
  • lightning/src/lib.rs
  • lightning/src/util/hash_tables.rs
  • lightning/src/util/mod.rs
  • possiblyrandom/src/lib.rs

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between f98a652 and d3b0af0.
Files ignored due to path filters (7)
  • Cargo.toml is excluded by: !**/*.toml
  • bench/Cargo.toml is excluded by: !**/*.toml
  • fuzz/Cargo.toml is excluded by: !**/*.toml
  • lightning-invoice/Cargo.toml is excluded by: !**/*.toml
  • lightning/Cargo.toml is excluded by: !**/*.toml
  • no-std-check/Cargo.toml is excluded by: !**/*.toml
  • possiblyrandom/Cargo.toml is excluded by: !**/*.toml
Files selected for processing (12)
  • .github/workflows/build.yml (1 hunks)
  • ci/check-cfg-flags.py (1 hunks)
  • fuzz/src/chanmon_consistency.rs (8 hunks)
  • fuzz/src/full_stack.rs (6 hunks)
  • fuzz/src/indexedmap.rs (2 hunks)
  • fuzz/src/router.rs (8 hunks)
  • lightning-invoice/src/lib.rs (1 hunks)
  • lightning-invoice/src/utils.rs (4 hunks)
  • lightning/src/lib.rs (1 hunks)
  • lightning/src/util/hash_tables.rs (1 hunks)
  • lightning/src/util/mod.rs (1 hunks)
  • possiblyrandom/src/lib.rs (1 hunks)
Files skipped from review as they are similar to previous changes (12)
  • .github/workflows/build.yml
  • ci/check-cfg-flags.py
  • fuzz/src/chanmon_consistency.rs
  • fuzz/src/full_stack.rs
  • fuzz/src/indexedmap.rs
  • fuzz/src/router.rs
  • lightning-invoice/src/lib.rs
  • lightning-invoice/src/utils.rs
  • lightning/src/lib.rs
  • lightning/src/util/hash_tables.rs
  • lightning/src/util/mod.rs
  • possiblyrandom/src/lib.rs

@TheBlueMatt
Copy link
Collaborator Author

Note the one failing CI job here is an "out of disk space" issue...

Copy link
Contributor

@wpaulino wpaulino left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

fuzz/src/indexedmap.rs Show resolved Hide resolved
wpaulino
wpaulino previously approved these changes Feb 15, 2024
possiblyrandom/Cargo.toml Outdated Show resolved Hide resolved
possiblyrandom/src/lib.rs Outdated Show resolved Hide resolved
possiblyrandom/src/lib.rs Outdated Show resolved Hide resolved
latest_monitors: Mutex::new(HashMap::new()),
latest_monitors: Mutex::new(new_hash_map()),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When should we use functions like new_hash_map? I see it's also used in some non-fuzzing code currently.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Always, when we upgraded hashbrown a few weeks ago we had to start using it as we now can't use HashMap::new directly (outside of std).

Copy link
Contributor

@jkczyz jkczyz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Please squash.

In the next commit we'll drop the `ahash` dependency in favor of
directly calling `getrandom` to seed our hash tables. However,
we'd like to depend on `getrandom` only on certain platforms *and*
only when certain features (no-std) are set.

This introduces an indirection crate to do so, allowing us to
depend on it only when `no-std` is set but only depending on
`getrandom` on platforms which it supports.
tkaitchuck/aHash#196 bumped the MSRV of
`ahash` in a patch release, which makes it rather difficult for us
to have it as a dependency.

Further, it seems that `ahash` hasn't been particularly robust in
the past, notably
tkaitchuck/aHash#163 and
tkaitchuck/aHash#166.

Luckily, `core` provides `SipHasher` even on no-std (sadly its
SipHash-2-4 unlike the SipHash-1-3 used by the `DefaultHasher` in
`std`). Thus, we drop the `ahash` dependency entirely here and
simply wrap `SipHasher` for our `no-std` HashMaps.
@TheBlueMatt
Copy link
Collaborator Author

Squashed without further changes.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between e32020c and eecd2cd.
Files ignored due to path filters (7)
  • Cargo.toml is excluded by: !**/*.toml
  • bench/Cargo.toml is excluded by: !**/*.toml
  • fuzz/Cargo.toml is excluded by: !**/*.toml
  • lightning-invoice/Cargo.toml is excluded by: !**/*.toml
  • lightning/Cargo.toml is excluded by: !**/*.toml
  • no-std-check/Cargo.toml is excluded by: !**/*.toml
  • possiblyrandom/Cargo.toml is excluded by: !**/*.toml
Files selected for processing (12)
  • .github/workflows/build.yml (1 hunks)
  • ci/check-cfg-flags.py (1 hunks)
  • fuzz/src/chanmon_consistency.rs (8 hunks)
  • fuzz/src/full_stack.rs (6 hunks)
  • fuzz/src/indexedmap.rs (2 hunks)
  • fuzz/src/router.rs (8 hunks)
  • lightning-invoice/src/lib.rs (1 hunks)
  • lightning-invoice/src/utils.rs (4 hunks)
  • lightning/src/lib.rs (1 hunks)
  • lightning/src/util/hash_tables.rs (1 hunks)
  • lightning/src/util/mod.rs (1 hunks)
  • possiblyrandom/src/lib.rs (1 hunks)
Files skipped from review as they are similar to previous changes (12)
  • .github/workflows/build.yml
  • ci/check-cfg-flags.py
  • fuzz/src/chanmon_consistency.rs
  • fuzz/src/full_stack.rs
  • fuzz/src/indexedmap.rs
  • fuzz/src/router.rs
  • lightning-invoice/src/lib.rs
  • lightning-invoice/src/utils.rs
  • lightning/src/lib.rs
  • lightning/src/util/hash_tables.rs
  • lightning/src/util/mod.rs
  • possiblyrandom/src/lib.rs

@TheBlueMatt TheBlueMatt merged commit cd84757 into lightningdevkit:main Feb 19, 2024
14 of 15 checks passed
@tnull
Copy link
Contributor

tnull commented Feb 20, 2024

FWIW, they now reverted their MSRV bump with the just-released v0.8.9 (cf. tkaitchuck/aHash#208).
So if we'd ever see any notable downsides switching away (e.g., performance regressions) we could consider it again in the future.

@TheBlueMatt
Copy link
Collaborator Author

TheBlueMatt commented Feb 20, 2024

It is a performance regression (ahash uses AES on platforms with AES intrinsics, and a very weak hash function otherwise, and we replaced it with SipHash-2-4), but if we get around to fixing it we should consider fixing it for std as well as no-std (as std always uses the default, which is SipHash-1-3). The particularly weak hash function fallback of ahash is not a super great fallback, though, doubly so considering in most cases that's what we were using ahash for, since it was no-std only.

Ultimately the only place the performance matters that much is in routing, and we might consider something weaker more generally there.

k0k0ne pushed a commit to bitlightlabs/rust-lightning that referenced this pull request Sep 30, 2024
v0.0.123 - May 08, 2024 - "BOLT12 Dust Sweeping"

API Updates
===========

 * To reduce risk of force-closures and improve HTLC reliability the default
   dust exposure limit has been increased to
   `MaxDustHTLCExposure::FeeRateMultiplier(10_000)`. Users with existing
   channels might want to consider using
   `ChannelManager::update_channel_config` to apply the new default (lightningdevkit#3045).
 * `ChainMonitor::archive_fully_resolved_channel_monitors` is now provided to
   remove from memory `ChannelMonitor`s that have been fully resolved on-chain
   and are now not needed. It uses the new `Persist::archive_persisted_channel`
   to inform the storage layer that such a monitor should be archived (lightningdevkit#2964).
 * An `OutputSweeper` is now provided which will automatically sweep
   `SpendableOutputDescriptor`s, retrying until the sweep confirms (lightningdevkit#2825).
 * After initiating an outbound channel, a peer disconnection no longer results
   in immediate channel closure. Rather, if the peer is reconnected before the
   channel times out LDK will automatically retry opening it (lightningdevkit#2725).
 * `PaymentPurpose` now has separate variants for BOLT12 payments, which
   include fields from the `invoice_request` as well as the `OfferId` (lightningdevkit#2970).
 * `ChannelDetails` now includes a list of in-flight HTLCs (lightningdevkit#2442).
 * `Event::PaymentForwarded` now includes `skimmed_fee_msat` (lightningdevkit#2858).
 * The `hashbrown` dependency has been upgraded and the use of `ahash` as the
   no-std hash table hash function has been removed. As a consequence, LDK's
   `Hash{Map,Set}`s no longer feature several constructors when LDK is built
   with no-std; see the `util::hash_tables` module instead. On platforms that
   `getrandom` supports, setting the `possiblyrandom/getrandom` feature flag
   will ensure hash tables are resistant to HashDoS attacks, though the
   `possiblyrandom` crate should detect most common platforms (lightningdevkit#2810, lightningdevkit#2891).
 * `ChannelMonitor`-originated requests to the `ChannelSigner` can now fail and
   be retried using `ChannelMonitor::signer_unblocked` (lightningdevkit#2816).
 * `SpendableOutputDescriptor::to_psbt_input` now includes the `witness_script`
   where available as well as new proprietary data which can be used to
   re-derive some spending keys from the base key (lightningdevkit#2761, lightningdevkit#3004).
 * `OutPoint::to_channel_id` has been removed in favor of
   `ChannelId::v1_from_funding_outpoint` in preparation for v2 channels with a
   different `ChannelId` derivation scheme (lightningdevkit#2797).
 * `PeerManager::get_peer_node_ids` has been replaced with `list_peers` and
   `peer_by_node_id`, which provide more details (lightningdevkit#2905).
 * `Bolt11Invoice::get_payee_pub_key` is now provided (lightningdevkit#2909).
 * `Default[Message]Router` now take an `entropy_source` argument (lightningdevkit#2847).
 * `ClosureReason::HTLCsTimedOut` has been separated out from
   `ClosureReason::HolderForceClosed` as it is the most common case (lightningdevkit#2887).
 * `ClosureReason::CooperativeClosure` is now split into
   `{Counterparty,Locally}Initiated` variants (lightningdevkit#2863).
 * `Event::ChannelPending::channel_type` is now provided (lightningdevkit#2872).
 * `PaymentForwarded::{prev,next}_user_channel_id` are now provided (lightningdevkit#2924).
 * Channel init messages have been refactored towards V2 channels (lightningdevkit#2871).
 * `BumpTransactionEvent` now contains the channel and counterparty (lightningdevkit#2873).
 * `util::scid_utils` is now public, with some trivial utilities to examine
   short channel ids (lightningdevkit#2694).
 * `DirectedChannelInfo::{source,target}` are now public (lightningdevkit#2870).
 * Bounds in `lightning-background-processor` were simplified by using
   `AChannelManager` (lightningdevkit#2963).
 * The `Persist` impl for `KVStore` no longer requires `Sized`, allowing for
   the use of `dyn KVStore` as `Persist` (lightningdevkit#2883, lightningdevkit#2976).
 * `From<PaymentPreimage>` is now implemented for `PaymentHash` (lightningdevkit#2918).
 * `NodeId::from_slice` is now provided (lightningdevkit#2942).
 * `ChannelManager` deserialization may now fail with `DangerousValue` when
    LDK's persistence API was violated (lightningdevkit#2974).

Bug Fixes
=========

 * Excess fees on counterparty commitment transactions are now included in the
   dust exposure calculation. This lines behavior up with some cases where
   transaction fees can be burnt, making them effectively dust exposure (lightningdevkit#3045).
 * `Future`s used as an `std::...::Future` could grow in size unbounded if it
   was never woken. For those not using async persistence and using the async
   `lightning-background-processor`, this could cause a memory leak in the
   `ChainMonitor` (lightningdevkit#2894).
 * Inbound channel requests that fail in
   `ChannelManager::accept_inbound_channel` would previously have stalled from
   the peer's perspective as no `error` message was sent (lightningdevkit#2953).
 * Blinded path construction has been tuned to select paths more likely to
   succeed, improving BOLT12 payment reliability (lightningdevkit#2911, lightningdevkit#2912).
 * After a reorg, `lightning-transaction-sync` could have failed to follow a
   transaction that LDK needed information about (lightningdevkit#2946).
 * `RecipientOnionFields`' `custom_tlvs` are now propagated to recipients when
   paying with blinded paths (lightningdevkit#2975).
 * `Event::ChannelClosed` is now properly generated and peers are properly
   notified for all channels that as a part of a batch channel open fail to be
   funded (lightningdevkit#3029).
 * In cases where user event processing is substantially delayed such that we
   complete multiple round-trips with our peers before a `PaymentSent` event is
   handled and then restart without persisting the `ChannelManager` after having
   persisted a `ChannelMonitor[Update]`, on startup we may have `Err`d trying to
   deserialize the `ChannelManager` (lightningdevkit#3021).
 * If a peer has relatively high latency, `PeerManager` may have failed to
   establish a connection (lightningdevkit#2993).
 * `ChannelUpdate` messages broadcasted for our own channel closures are now
   slightly more robust (lightningdevkit#2731).
 * Deserializing malformed BOLT11 invoices may have resulted in an integer
   overflow panic in debug builds (lightningdevkit#3032).
 * In exceedingly rare cases (no cases of this are known), LDK may have created
   an invalid serialization for a `ChannelManager` (lightningdevkit#2998).
 * Message processing latency handling BOLT12 payments has been reduced (lightningdevkit#2881).
 * Latency in processing `Event::SpendableOutputs` may be reduced (lightningdevkit#3033).

Node Compatibility
==================

 * LDK's blinded paths were inconsistent with other implementations in several
   ways, which have been addressed (lightningdevkit#2856, lightningdevkit#2936, lightningdevkit#2945).
 * LDK's messaging blinded paths now support the latest features which some
   nodes may begin relying on soon (lightningdevkit#2961).
 * LDK's BOLT12 structs have been updated to support some last-minute changes to
   the spec (lightningdevkit#3017, lightningdevkit#3018).
 * CLN v24.02 requires the `gossip_queries` feature for all peers, however LDK
   by default does not set it for those not using a `P2PGossipSync` (e.g. those
   using RGS). This change was reverted in CLN v24.02.2 however for now LDK
   always sets the `gossip_queries` feature. This change is expected to be
   reverted in a future LDK release (lightningdevkit#2959).

Security
========
0.0.123 fixes a denial-of-service vulnerability which we believe to be reachable
from untrusted input when parsing invalid BOLT11 invoices containing non-ASCII
characters.
 * BOLT11 invoices with non-ASCII characters in the human-readable-part may
   cause an out-of-bounds read attempt leading to a panic (lightningdevkit#3054). Note that all
   BOLT11 invoices containing non-ASCII characters are invalid.

In total, this release features 150 files changed, 19307 insertions, 6306
deletions in 360 commits since 0.0.121 from 17 authors, in alphabetical order:

 * Arik Sosman
 * Duncan Dean
 * Elias Rohrer
 * Evan Feenstra
 * Jeffrey Czyz
 * Keyue Bao
 * Matt Corallo
 * Orbital
 * Sergi Delgado Segura
 * Valentine Wallace
 * Willem Van Lint
 * Wilmer Paulino
 * benthecarman
 * jbesraa
 * olegkubrakov
 * optout
 * shaavan
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants