From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:00:06 +0000 (+0000) Subject: Merge pull request #2065 from TheBlueMatt/2023-02-0.0.114 X-Git-Tag: v0.0.114^0 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=af76face12e924132596479f8b54849b14414f84;hp=4d2679fac656a3d828877f3f31aad6cff4ada9c8;p=rust-lightning Merge pull request #2065 from TheBlueMatt/2023-02-0.0.114 Cut 0.0.114 --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 611e43ea..e12c84a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,117 @@ +# 0.0.114 - Mar 3, 2023 - "Faster Async BOLT12 Retries" + +## API Updates + * `InvoicePayer` has been removed and its features moved directly into + `ChannelManager`. As such it now requires a simplified `Router` and supports + `send_payment_with_retry` (and friends). `ChannelManager::retry_payment` was + removed in favor of the automated retries. Invoice payment utilities in + `lightning-invoice` now call the new code (#1812, #1916, #1929, #2007, etc). + * `Sign`/`BaseSign` has been renamed `ChannelSigner`, with `EcdsaChannelSigner` + split out in anticipation of future schnorr/taproot support (#1967). + * The catch-all `KeysInterface` was split into `EntropySource`, `NodeSigner`, + and `SignerProvider`. `KeysManager` implements all three (#1910, #1930). + * `KeysInterface::get_node_secret` is now `KeysManager::get_node_secret_key` + and is no longer required for external signers (#1951, #2070). + * A `lightning-transaction-sync` crate has been added which implements keeping + LDK in sync with the chain via an esplora server (#1870). Note that it can + only be used on nodes that *never* ran a previous version of LDK. + * `Score` is updated in `BackgroundProcessor` instead of via `Router` (#1996). + * `ChainAccess::get_utxo` (now `UtxoAccess`) can now be resolved async (#1980). + * BOLT12 `Offer`, `InvoiceRequest`, `Invoice` and `Refund` structs as well as + associated builders have been added. Such invoices cannot yet be paid due to + missing support for blinded path payments (#1927, #1908, #1926). + * A `lightning-custom-message` crate has been added to make combining multiple + custom messages into one enum/handler easier (#1832). + * `Event::PaymentPathFailure` is now generated for failure to send an HTLC + over the first hop on our local channel (#2014, #2043). + * `lightning-net-tokio` no longer requires an `Arc` on `PeerManager` (#1968). + * `ChannelManager::list_recent_payments` was added (#1873). + * `lightning-background-processor` `std` is now optional in async mode (#1962). + * `create_phantom_invoice` can now be used in `no-std` (#1985). + * The required final CLTV delta on inbound payments is now configurable (#1878) + * bitcoind RPC error code and message are now surfaced in `block-sync` (#2057). + * Get `historical_estimated_channel_liquidity_probabilities` was added (#1961). + * `ChannelManager::fail_htlc_backwards_with_reason` was added (#1948). + * Macros which implement serialization using TLVs or straight writing of struct + fields are now public (#1823, #1976, #1977). + +## Backwards Compatibility + * Any inbound payments with a custom final CLTV delta will be rejected by LDK + if you downgrade prior to receipt (#1878). + * `Event::PaymentPathFailed::network_update` will always be `None` if an + 0.0.114-generated event is read by a prior version of LDK (#2043). + * `Event::PaymentPathFailed::all_paths_removed` will always be false if an + 0.0.114-generated event is read by a prior version of LDK. Users who rely on + it to determine payment retries should migrate to `Event::PaymentFailed`, in + a separate release prior to upgrading to LDK 0.0.114 if downgrading is + supported (#2043). + +## Performance Improvements + * Channel data is now stored per-peer and channel updates across multiple + peers can be operated on simultaneously (#1507). + * Routefinding is roughly 1.5x faster (#1799). + * Deserializing a `NetworkGraph` is roughly 6x faster (#2016). + * Memory usage for a `NetworkGraph` has been reduced substantially (#2040). + * `KeysInterface::get_secure_random_bytes` is roughly 200x faster (#1974). + +## Bug Fixes + * Fixed a bug where a delay in processing a `PaymentSent` event longer than the + time taken to persist a `ChannelMonitor` update, when occurring immediately + prior to a crash, may result in the `PaymentSent` event being lost (#2048). + * Fixed spurious rejections of rapid gossip sync data when the graph has been + updated by other means between gossip syncs (#2046). + * Fixed a panic in `KeysManager` when the high bit of `starting_time_nanos` + is set (#1935). + * Resolved an issue where the `ChannelManager::get_persistable_update_future` + future would fail to wake until a second notification occurs (#2064). + * Resolved a memory leak when using `ChannelManager::send_probe` (#2037). + * Fixed a deadlock on some platforms at least when using async `ChannelMonitor` + updating (#2006). + * Removed debug-only assertions which were reachable in threaded code (#1964). + * In some cases when payment sending fails on our local channel retries no + longer take the same path and thus never succeed (#2014). + * Retries for spontaneous payments have been fixed (#2002). + * Return an `Err` if `lightning-persister` fails to read the directory listing + rather than panicing (#1943). + * `peer_disconnected` will now never be called without `peer_connected` (#2035) + +## Security +0.0.114 fixes several denial-of-service vulnerabilities which are reachable from +untrusted input from channel counterparties or in deployments accepting inbound +connections or channels. It also fixes a denial-of-service vulnerability in rare +cases in the route finding logic. + * The number of pending un-funded channels as well as peers without funded + channels is now limited to avoid denial of service (#1988). + * A second `channel_ready` message received immediately after the first could + lead to a spurious panic (#2071). This issue was introduced with 0conf + support in LDK 0.0.107. + * A division-by-zero issue was fixed in the `ProbabilisticScorer` if the amount + being sent (including previous-hop fees) is equal to a channel's capacity + while walking the graph (#2072). The division-by-zero was introduced with + historical data tracking in LDK 0.0.112. + +In total, this release features 130 files changed, 21457 insertions, 10113 +deletions in 343 commits from 18 authors, in alphabetical order: + * Alec Chen + * Allan Douglas R. de Oliveira + * Andrei + * Arik Sosman + * Daniel Granhão + * Duncan Dean + * Elias Rohrer + * Jeffrey Czyz + * John Cantrell + * Kurtsley + * Matt Corallo + * Max Fang + * Omer Yacine + * Valentine Wallace + * Viktor Tigerström + * Wilmer Paulino + * benthecarman + * jurvis + + # 0.0.113 - Dec 16, 2022 - "Big Movement Intercepted" ## API Updates diff --git a/lightning-background-processor/Cargo.toml b/lightning-background-processor/Cargo.toml index 96ac33a9..6a4925a0 100644 --- a/lightning-background-processor/Cargo.toml +++ b/lightning-background-processor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-background-processor" -version = "0.0.113" +version = "0.0.114" authors = ["Valentine Wallace "] license = "MIT OR Apache-2.0" repository = "http://github.com/lightningdevkit/rust-lightning" @@ -21,11 +21,11 @@ default = ["std"] [dependencies] bitcoin = { version = "0.29.0", default-features = false } -lightning = { version = "0.0.113", path = "../lightning", default-features = false } -lightning-rapid-gossip-sync = { version = "0.0.113", path = "../lightning-rapid-gossip-sync", default-features = false } +lightning = { version = "0.0.114", path = "../lightning", default-features = false } +lightning-rapid-gossip-sync = { version = "0.0.114", path = "../lightning-rapid-gossip-sync", default-features = false } futures-util = { version = "0.3", default-features = false, features = ["async-await-macro"], optional = true } [dev-dependencies] -lightning = { version = "0.0.113", path = "../lightning", features = ["_test_utils"] } -lightning-invoice = { version = "0.21.0", path = "../lightning-invoice" } -lightning-persister = { version = "0.0.113", path = "../lightning-persister" } +lightning = { version = "0.0.114", path = "../lightning", features = ["_test_utils"] } +lightning-invoice = { version = "0.22.0", path = "../lightning-invoice" } +lightning-persister = { version = "0.0.114", path = "../lightning-persister" } diff --git a/lightning-block-sync/Cargo.toml b/lightning-block-sync/Cargo.toml index c605f5ef..69c64a14 100644 --- a/lightning-block-sync/Cargo.toml +++ b/lightning-block-sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-block-sync" -version = "0.0.113" +version = "0.0.114" authors = ["Jeffrey Czyz", "Matt Corallo"] license = "MIT OR Apache-2.0" repository = "http://github.com/lightningdevkit/rust-lightning" @@ -19,7 +19,7 @@ rpc-client = [ "serde", "serde_json", "chunked_transfer" ] [dependencies] bitcoin = "0.29.0" -lightning = { version = "0.0.113", path = "../lightning" } +lightning = { version = "0.0.114", path = "../lightning" } futures-util = { version = "0.3" } tokio = { version = "1.0", features = [ "io-util", "net", "time" ], optional = true } serde = { version = "1.0", features = ["derive"], optional = true } @@ -27,5 +27,5 @@ serde_json = { version = "1.0", optional = true } chunked_transfer = { version = "1.4", optional = true } [dev-dependencies] -lightning = { version = "0.0.113", path = "../lightning", features = ["_test_utils"] } +lightning = { version = "0.0.114", path = "../lightning", features = ["_test_utils"] } tokio = { version = "~1.14", features = [ "macros", "rt" ] } diff --git a/lightning-custom-message/Cargo.toml b/lightning-custom-message/Cargo.toml index 657844c0..509b6024 100644 --- a/lightning-custom-message/Cargo.toml +++ b/lightning-custom-message/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-custom-message" -version = "0.0.113" +version = "0.0.114" authors = ["Jeffrey Czyz"] license = "MIT OR Apache-2.0" repository = "http://github.com/lightningdevkit/rust-lightning" @@ -15,4 +15,4 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] bitcoin = "0.29.0" -lightning = { version = "0.0.113", path = "../lightning" } +lightning = { version = "0.0.114", path = "../lightning" } diff --git a/lightning-invoice/Cargo.toml b/lightning-invoice/Cargo.toml index 53a36fab..a3fb66a8 100644 --- a/lightning-invoice/Cargo.toml +++ b/lightning-invoice/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "lightning-invoice" description = "Data structures to parse and serialize BOLT11 lightning invoices" -version = "0.21.0" +version = "0.22.0" authors = ["Sebastian Geisler "] documentation = "https://docs.rs/lightning-invoice/" license = "MIT OR Apache-2.0" @@ -21,7 +21,7 @@ std = ["bitcoin_hashes/std", "num-traits/std", "lightning/std", "bech32/std"] [dependencies] bech32 = { version = "0.9.0", default-features = false } -lightning = { version = "0.0.113", path = "../lightning", default-features = false } +lightning = { version = "0.0.114", path = "../lightning", default-features = false } secp256k1 = { version = "0.24.0", default-features = false, features = ["recovery", "alloc"] } num-traits = { version = "0.2.8", default-features = false } bitcoin_hashes = { version = "0.11", default-features = false } @@ -29,6 +29,6 @@ hashbrown = { version = "0.8", optional = true } serde = { version = "1.0.118", optional = true } [dev-dependencies] -lightning = { version = "0.0.113", path = "../lightning", default-features = false, features = ["_test_utils"] } +lightning = { version = "0.0.114", path = "../lightning", default-features = false, features = ["_test_utils"] } hex = "0.4" serde_json = { version = "1"} diff --git a/lightning-net-tokio/Cargo.toml b/lightning-net-tokio/Cargo.toml index 8a518638..203fbc9b 100644 --- a/lightning-net-tokio/Cargo.toml +++ b/lightning-net-tokio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-net-tokio" -version = "0.0.113" +version = "0.0.114" authors = ["Matt Corallo"] license = "MIT OR Apache-2.0" repository = "https://github.com/lightningdevkit/rust-lightning/" @@ -16,9 +16,9 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] bitcoin = "0.29.0" -lightning = { version = "0.0.113", path = "../lightning" } +lightning = { version = "0.0.114", path = "../lightning" } tokio = { version = "1.0", features = [ "io-util", "macros", "rt", "sync", "net", "time" ] } [dev-dependencies] tokio = { version = "~1.14", features = [ "io-util", "macros", "rt", "rt-multi-thread", "sync", "net", "time" ] } -lightning = { version = "0.0.113", path = "../lightning", features = ["_test_utils"] } +lightning = { version = "0.0.114", path = "../lightning", features = ["_test_utils"] } diff --git a/lightning-persister/Cargo.toml b/lightning-persister/Cargo.toml index c4f3acd4..01415f29 100644 --- a/lightning-persister/Cargo.toml +++ b/lightning-persister/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-persister" -version = "0.0.113" +version = "0.0.114" authors = ["Valentine Wallace", "Matt Corallo"] license = "MIT OR Apache-2.0" repository = "https://github.com/lightningdevkit/rust-lightning/" @@ -18,11 +18,11 @@ _bench_unstable = ["lightning/_bench_unstable"] [dependencies] bitcoin = "0.29.0" -lightning = { version = "0.0.113", path = "../lightning" } +lightning = { version = "0.0.114", path = "../lightning" } libc = "0.2" [target.'cfg(windows)'.dependencies] winapi = { version = "0.3", features = ["winbase"] } [dev-dependencies] -lightning = { version = "0.0.113", path = "../lightning", features = ["_test_utils"] } +lightning = { version = "0.0.114", path = "../lightning", features = ["_test_utils"] } diff --git a/lightning-rapid-gossip-sync/Cargo.toml b/lightning-rapid-gossip-sync/Cargo.toml index 63432b58..1f0f6f03 100644 --- a/lightning-rapid-gossip-sync/Cargo.toml +++ b/lightning-rapid-gossip-sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-rapid-gossip-sync" -version = "0.0.113" +version = "0.0.114" authors = ["Arik Sosman "] license = "MIT OR Apache-2.0" repository = "https://github.com/lightningdevkit/rust-lightning" @@ -16,8 +16,8 @@ std = ["lightning/std"] _bench_unstable = [] [dependencies] -lightning = { version = "0.0.113", path = "../lightning", default-features = false } +lightning = { version = "0.0.114", path = "../lightning", default-features = false } bitcoin = { version = "0.29.0", default-features = false } [dev-dependencies] -lightning = { version = "0.0.113", path = "../lightning", features = ["_test_utils"] } +lightning = { version = "0.0.114", path = "../lightning", features = ["_test_utils"] } diff --git a/lightning-transaction-sync/Cargo.toml b/lightning-transaction-sync/Cargo.toml index 9dfce6c2..39541095 100644 --- a/lightning-transaction-sync/Cargo.toml +++ b/lightning-transaction-sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning-transaction-sync" -version = "0.0.113" +version = "0.0.114" authors = ["Elias Rohrer"] license = "MIT OR Apache-2.0" repository = "http://github.com/lightningdevkit/rust-lightning" @@ -20,14 +20,14 @@ esplora-blocking = ["esplora-client/blocking"] async-interface = [] [dependencies] -lightning = { version = "0.0.113", path = "../lightning", default-features = false } +lightning = { version = "0.0.114", path = "../lightning", default-features = false } bitcoin = { version = "0.29.0", default-features = false } bdk-macros = "0.6" futures = { version = "0.3", optional = true } esplora-client = { version = "0.3.0", default-features = false, optional = true } [dev-dependencies] -lightning = { version = "0.0.113", path = "../lightning", features = ["std"] } +lightning = { version = "0.0.114", path = "../lightning", features = ["std"] } electrsd = { version = "0.22.0", features = ["legacy", "esplora_a33e97e1", "bitcoind_23_0"] } electrum-client = "0.12.0" once_cell = "1.16.0" diff --git a/lightning/Cargo.toml b/lightning/Cargo.toml index e98756d5..3f4f5d43 100644 --- a/lightning/Cargo.toml +++ b/lightning/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lightning" -version = "0.0.113" +version = "0.0.114" authors = ["Matt Corallo"] license = "MIT OR Apache-2.0" repository = "https://github.com/lightningdevkit/rust-lightning/" diff --git a/pending_changelog/1878.txt b/pending_changelog/1878.txt deleted file mode 100644 index 775c46e5..00000000 --- a/pending_changelog/1878.txt +++ /dev/null @@ -1,11 +0,0 @@ -## API Updates -- The functions `inbound_payment::{create, create_from_hash}` and - `channelmanager::{create_inbound_payment, create_inbound_payment_for_hash}` now accept a - `min_final_cltv_expiry_delta` argument. This encodes the `min_final_cltv_expiry_delta` in the - payment secret metadata bytes to be validated on payment receipt. - -## Backwards Compatibility -- If `min_final_cltv_expiry_delta` set for any of `inbound_payment::{create, create_from_hash}` or - `channelmanager::{create_inbound_payment, create_inbound_payment_for_hash}` then the payment will - not be receivable on versions of LDK prior to 0.0.114. - diff --git a/pending_changelog/2043.txt b/pending_changelog/2043.txt deleted file mode 100644 index bcd460ed..00000000 --- a/pending_changelog/2043.txt +++ /dev/null @@ -1,16 +0,0 @@ -## API Updates -- `Event::PaymentPathFailed::network_update` has been replaced by a new `Failure` enum, which may - contain the `network_update` within it. See `Event::PaymentPathFailed::failure` and `Failure` docs - for more -- `Event::PaymentPathFailed::all_paths_failed` has been removed, as we've dropped support for manual - payment retries. - -## Backwards Compatibility -- If downgrading from 0.0.114 to a previous version, `Event::PaymentPathFailed::network_update` will - always be `None`. -- If downgrading from 0.0.114 to a previous version, `Event::PaymentPathFailed::all_paths_failed` - will always be set to `false`. Users who wish to support downgrading and currently rely on the - field should should first migrate to always calling `ChannelManager::abandon_payment` and awaiting - `PaymentFailed` events before retrying (see the field docs for more info on this approach: - ), - and then migrate to 0.0.114.