Merge pull request #1153 from TheBlueMatt/2021-11-0.0.103 v0.0.103
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Wed, 3 Nov 2021 03:30:39 +0000 (03:30 +0000)
committerGitHub <noreply@github.com>
Wed, 3 Nov 2021 03:30:39 +0000 (03:30 +0000)
One final fix + cut 0.0.103

CHANGELOG.md
lightning-background-processor/Cargo.toml
lightning-block-sync/Cargo.toml
lightning-invoice/Cargo.toml
lightning-net-tokio/Cargo.toml
lightning-persister/Cargo.toml
lightning/Cargo.toml
lightning/src/routing/scorer.rs

index 518badd1ed21d56c6533f4cbb8dd53c649078af3..887b738ff3cbd5ad8ed69ae171ca8105d8db453c 100644 (file)
@@ -1,3 +1,69 @@
+# 0.0.103 - 2021-11-02
+
+## API Updates
+ * This release is almost entirely focused on a new API in the
+   `lightning-invoice` crate - the `InvoicePayer`. `InvoicePayer` is a
+   struct which takes a reference to a `ChannelManager` and a `NetworkGraph`
+   and retries payments as paths fail. It limits retries to a configurable
+   number, but is not serialized to disk and may retry additional times across
+   a serialization/load. In order to learn about failed payments, it must
+   receive `Event`s directly from the `ChannelManager`, wrapping a
+   user-provided `EventHandler` which it provides all unhandled events to
+   (#1059).
+ * `get_route` has been renamed `find_route` (#1059) and now takes a `Payee`
+   struct in replacement of a number of its long list of arguments (#1134).
+   `Payee` is further stored in the `Route` object returned and provided in the
+   `RouteParameters` contained in `Event::PaymentPathFailed` (#1059).
+ * `ChannelMonitor`s must now be persisted after calls which provide new block
+   data, prior to `MonitorEvent`s being passed back to `ChannelManager` for
+   processing. If you are using a `ChainMonitor` this is handled for you.
+   The `Persist` API has been updated to `Option`ally take the
+   `ChannelMonitorUpdate` as persistence events that result from chain data no
+   longer have a corresponding update (#1108).
+ * `routing::Score` now has a `payment_path_failed` method which it can use to
+   learn which channels often fail payments. It is automatically called by
+   `InvoicePayer` for failed payment paths (#1144).
+ * The default `Scorer` implementation is now a type alias to a type generic
+   across different clocks and supports serialization to persist scoring data
+   across restarts (#1146).
+ * `Event::PaymentSent` now includes the full fee which was spent across all
+   payment paths which were fulfilled or pending when the payment was fulfilled
+   (#1142).
+ * `NetGraphMsgHandler` now takes a `Deref` to the `NetworkGraph`, allowing for
+   shared references to the graph data to make serialization and references to
+   the graph data in the `InvoicePayer`'s `Router` simpler (#1149).
+ * `routing::Score::channel_penalty_msat` has been updated to provide the
+   `NodeId` of both the source and destination nodes of a channel (#1133).
+
+## Bug Fixes
+ * Delay disconnecting peers if we receive messages from them even if it takes
+   a while to receive a pong from them. Further, avoid sending too many gossip
+   messages between pings to ensure we should always receive pongs in a timely
+   manner. Together, these should significantly reduce instances of us failing
+   to remain connected to a peer during initial gossip sync (#1137).
+ * If a payment is sent, creating an outbound HTLC and sending it to our
+   counterparty (implying the `ChannelMonitor` was persisted on disk), but the
+   `ChannelManager` was not persisted prior to shutdown/crash, no
+   `Event::PaymentPathFailed` event will be generated if the HTLC is eventually
+   failed on chain (#1104).
+
+## Serialization Compatibility
+ * All above new Events/fields are ignored by prior clients. All above new
+   Events/fields are not present when reading objects serialized by prior
+   versions of the library.
+ * Payments for which a `Route` was generated using a previous version or for
+   which the payment was originally sent by a previous version of the library
+   will not be retried by an `InvoicePayer`.
+
+This release was singularly focused and some contributions by third parties
+were delayed.
+In total, this release features 38 files changed, 4414 insertions, and 969
+deletions in 71 commits from 2 authors, in alphabetical order:
+
+ * Jeffrey Czyz
+ * Matt Corallo
+
+
 # 0.0.102 - 2021-10-18
 
 ## API Updates
index d868f14db74883bce4c1997cfbfd4da170fd8018..f5e90e1410d27ea226b1d67c82c48aab316a280a 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "lightning-background-processor"
-version = "0.0.102"
+version = "0.0.103"
 authors = ["Valentine Wallace <vwallace@protonmail.com>"]
 license = "MIT OR Apache-2.0"
 repository = "http://github.com/rust-bitcoin/rust-lightning"
@@ -11,9 +11,9 @@ edition = "2018"
 
 [dependencies]
 bitcoin = "0.27"
-lightning = { version = "0.0.102", path = "../lightning", features = ["allow_wallclock_use"] }
-lightning-persister = { version = "0.0.102", path = "../lightning-persister" }
+lightning = { version = "0.0.103", path = "../lightning", features = ["allow_wallclock_use"] }
+lightning-persister = { version = "0.0.103", path = "../lightning-persister" }
 
 [dev-dependencies]
-lightning = { version = "0.0.102", path = "../lightning", features = ["_test_utils"] }
-lightning-invoice = { version = "0.10.0", path = "../lightning-invoice" }
+lightning = { version = "0.0.103", path = "../lightning", features = ["_test_utils"] }
+lightning-invoice = { version = "0.11.0", path = "../lightning-invoice" }
index 06ca52f70cd50e786b45e0b56b4142f003f993f5..e9d5f52816e4e56cb7a0bc4142ca82d4964b5647 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "lightning-block-sync"
-version = "0.0.102"
+version = "0.0.103"
 authors = ["Jeffrey Czyz", "Matt Corallo"]
 license = "MIT OR Apache-2.0"
 repository = "http://github.com/rust-bitcoin/rust-lightning"
@@ -15,7 +15,7 @@ rpc-client = [ "serde", "serde_json", "chunked_transfer" ]
 
 [dependencies]
 bitcoin = "0.27"
-lightning = { version = "0.0.102", path = "../lightning" }
+lightning = { version = "0.0.103", path = "../lightning" }
 tokio = { version = "1.0", features = [ "io-util", "net", "time" ], optional = true }
 serde = { version = "1.0", features = ["derive"], optional = true }
 serde_json = { version = "1.0", optional = true }
index 886fbc553acae0f97c772e2fbdf9d067146e668e..010becc27198333100fb740664f92cc258f64279 100644 (file)
@@ -1,7 +1,7 @@
 [package]
 name = "lightning-invoice"
 description = "Data structures to parse and serialize BOLT11 lightning invoices"
-version = "0.10.0"
+version = "0.11.0"
 authors = ["Sebastian Geisler <sgeisler@wh2.tu-dresden.de>"]
 documentation = "https://docs.rs/lightning-invoice/"
 license = "MIT OR Apache-2.0"
@@ -10,11 +10,11 @@ readme = "README.md"
 
 [dependencies]
 bech32 = "0.8"
-lightning = { version = "0.0.102", path = "../lightning" }
+lightning = { version = "0.0.103", path = "../lightning" }
 secp256k1 = { version = "0.20", features = ["recovery"] }
 num-traits = "0.2.8"
 bitcoin_hashes = "0.10"
 
 [dev-dependencies]
 hex = "0.3"
-lightning = { version = "0.0.102", path = "../lightning", features = ["_test_utils"] }
+lightning = { version = "0.0.103", path = "../lightning", features = ["_test_utils"] }
index 3d9a31f182b83d3ed9b0f6ed5d6223290acaf016..ad3dc008e6a69c1874e532a6b311ca202dbb8a1c 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "lightning-net-tokio"
-version = "0.0.102"
+version = "0.0.103"
 authors = ["Matt Corallo"]
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-bitcoin/rust-lightning/"
@@ -12,7 +12,7 @@ edition = "2018"
 
 [dependencies]
 bitcoin = "0.27"
-lightning = { version = "0.0.102", path = "../lightning" }
+lightning = { version = "0.0.103", path = "../lightning" }
 tokio = { version = "1.0", features = [ "io-util", "macros", "rt", "sync", "net", "time" ] }
 
 [dev-dependencies]
index 9e072dce78f89a44046e6530580256e349392c0c..ef8631059c986fb3d11468e0098391318492a964 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "lightning-persister"
-version = "0.0.102"
+version = "0.0.103"
 authors = ["Valentine Wallace", "Matt Corallo"]
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-bitcoin/rust-lightning/"
@@ -13,11 +13,11 @@ unstable = ["lightning/unstable"]
 
 [dependencies]
 bitcoin = "0.27"
-lightning = { version = "0.0.102", path = "../lightning" }
+lightning = { version = "0.0.103", path = "../lightning" }
 libc = "0.2"
 
 [target.'cfg(windows)'.dependencies]
 winapi = { version = "0.3", features = ["winbase"] }
 
 [dev-dependencies]
-lightning = { version = "0.0.102", path = "../lightning", features = ["_test_utils"] }
+lightning = { version = "0.0.103", path = "../lightning", features = ["_test_utils"] }
index 271a3d662abcf459a5c977cfc9b03bfd19cc1ead..8202219bf23c9f8a2bb45b467b0f3b5ea4b73f9b 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "lightning"
-version = "0.0.102"
+version = "0.0.103"
 authors = ["Matt Corallo"]
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-bitcoin/rust-lightning/"
index 956b09a54211e4dd90b9d6585c5c0aadb43edc47..8b5fae70abdbffa34e6a365f312eb654f5165d84 100644 (file)
@@ -275,34 +275,48 @@ impl<T: Time> Writeable for ScorerUsingTime<T> {
        #[inline]
        fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
                self.params.write(w)?;
-               self.channel_failures.write(w)
+               self.channel_failures.write(w)?;
+               write_tlv_fields!(w, {});
+               Ok(())
        }
 }
 
 impl<T: Time> Readable for ScorerUsingTime<T> {
        #[inline]
        fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
-               Ok(Self {
+               let res = Ok(Self {
                        params: Readable::read(r)?,
                        channel_failures: Readable::read(r)?,
-               })
+               });
+               read_tlv_fields!(r, {});
+               res
        }
 }
 
 impl<T: Time> Writeable for ChannelFailure<T> {
        #[inline]
        fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
-               self.undecayed_penalty_msat.write(w)?;
-               (T::duration_since_epoch() - self.last_failed.elapsed()).write(w)
+               let duration_since_epoch = T::duration_since_epoch() - self.last_failed.elapsed();
+               write_tlv_fields!(w, {
+                       (0, self.undecayed_penalty_msat, required),
+                       (2, duration_since_epoch, required),
+               });
+               Ok(())
        }
 }
 
 impl<T: Time> Readable for ChannelFailure<T> {
        #[inline]
        fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
+               let mut undecayed_penalty_msat = 0;
+               let mut duration_since_epoch = Duration::from_secs(0);
+               read_tlv_fields!(r, {
+                       (0, undecayed_penalty_msat, required),
+                       (2, duration_since_epoch, required),
+               });
                Ok(Self {
-                       undecayed_penalty_msat: Readable::read(r)?,
-                       last_failed: T::now() - (T::duration_since_epoch() - Readable::read(r)?),
+                       undecayed_penalty_msat,
+                       last_failed: T::now() - (T::duration_since_epoch() - duration_since_epoch),
                })
        }
 }