Skip to content

One final fix + cut 0.0.103 #1153

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

Merged
merged 3 commits into from
Nov 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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`
Copy link
Contributor

Choose a reason for hiding this comment

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

Should replace NetworkGraph with Router. I almost wonder if we should move the Router trait to the lightning crate.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Probably, IMO.

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).
Comment on lines +44 to +48
Copy link
Contributor

Choose a reason for hiding this comment

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

Seems to be worded in terms of what the bug was whereas the previous bullet is worded in terms of how the bug was fixed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yea, we've generally worded in terms of the bug, but I wasn't really sure how to word the previous in terms of the bug and still have it be clear. I'll try, though.


## 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
Expand Down
10 changes: 5 additions & 5 deletions lightning-background-processor/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "lightning-background-processor"
version = "0.0.102"
version = "0.0.103"
authors = ["Valentine Wallace <[email protected]>"]
license = "MIT OR Apache-2.0"
repository = "http://github.com/rust-bitcoin/rust-lightning"
Expand All @@ -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" }
4 changes: 2 additions & 2 deletions lightning-block-sync/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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 }
Expand Down
6 changes: 3 additions & 3 deletions lightning-invoice/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>"]
documentation = "https://docs.rs/lightning-invoice/"
license = "MIT OR Apache-2.0"
Expand All @@ -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"] }
4 changes: 2 additions & 2 deletions lightning-net-tokio/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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/"
Expand All @@ -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]
Expand Down
6 changes: 3 additions & 3 deletions lightning-persister/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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/"
Expand All @@ -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"] }
2 changes: 1 addition & 1 deletion lightning/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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/"
Expand Down
28 changes: 21 additions & 7 deletions lightning/src/routing/scorer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
})
}
}