Matt Corallo [Mon, 25 Oct 2021 18:24:28 +0000 (18:24 +0000)]
f add during-handshake disconnect test
Matt Corallo [Mon, 25 Oct 2021 17:42:09 +0000 (17:42 +0000)]
f clarify comment
Matt Corallo [Tue, 26 Oct 2021 01:32:42 +0000 (01:32 +0000)]
f check in a better order to allow for further changes easier
Matt Corallo [Thu, 21 Oct 2021 22:33:42 +0000 (22:33 +0000)]
Give peers one timer tick to finish handshake before disconnecting
This ensures we don't let a hung connection stick around forever if
the peer never completes the initial handshake.
This also resolves a race where, on receiving a second connection
from a peer, we may reset their_node_id to None to prevent sending
messages even though the `channel_encryptor`
`is_ready_for_encryption()`. Sending pings only checks the
`channel_encryptor` status, not `their_node_id` resulting in an
`unwrap` on `None` in `enqueue_message`.
Matt Corallo [Thu, 28 Oct 2021 17:45:38 +0000 (17:45 +0000)]
f sp
Matt Corallo [Thu, 28 Oct 2021 17:31:51 +0000 (17:31 +0000)]
f rename awaiting_pong_tick_intervals for clarity
Matt Corallo [Tue, 26 Oct 2021 01:40:23 +0000 (01:40 +0000)]
f redo max tick interval logic, this much better matches reality
Matt Corallo [Mon, 25 Oct 2021 18:32:36 +0000 (18:32 +0000)]
f test msg send rate limiting somewhat
Matt Corallo [Mon, 25 Oct 2021 17:32:12 +0000 (17:32 +0000)]
f use new constant
Matt Corallo [Mon, 11 Oct 2021 04:24:08 +0000 (04:24 +0000)]
Give peers which are sending us messages longer to respond to ping
See comment for rationale.
Matt Corallo [Thu, 28 Oct 2021 17:43:58 +0000 (17:43 +0000)]
Util-ify enqueueing an encoded message in peer_handler
This marginally simplifies coming commits.
Matt Corallo [Thu, 28 Oct 2021 18:26:04 +0000 (18:26 +0000)]
f tweak const names somewhat
Matt Corallo [Mon, 25 Oct 2021 17:31:34 +0000 (17:31 +0000)]
Constify the ratio in buf limits between forward and init sync msgs
Matt Corallo [Tue, 26 Oct 2021 02:03:02 +0000 (02:03 +0000)]
Add `PeerManager::disconnect_all_peers` to avoid complexity in BP
In the coming commits simply calling `timer_tick_occurred` will no
longer disconnect all peers, so its helpful to have a utility
method.
Matt Corallo [Mon, 25 Oct 2021 21:51:08 +0000 (21:51 +0000)]
Correct send-bounding logic in `TestRoutingMessageHandler`
The `cmp::min` appeared to confused `end` for a count.
Matt Corallo [Mon, 18 Oct 2021 19:23:25 +0000 (19:23 +0000)]
Merge pull request #1127 from TheBlueMatt/2021-10-0.0.102
Cut 0.0.102
Matt Corallo [Sat, 16 Oct 2021 00:23:33 +0000 (00:23 +0000)]
Bump crate versions to 0.0.102 and lightning-invoice 0.10
Matt Corallo [Sat, 16 Oct 2021 00:21:57 +0000 (00:21 +0000)]
Add CHANGELOG entries for 0.0.102
Matt Corallo [Sat, 16 Oct 2021 02:15:07 +0000 (02:15 +0000)]
Merge pull request #1121 from TheBlueMatt/2021-10-return-temp-id
Expose temporary channel ID and user channel ID pre-funding
Matt Corallo [Sat, 16 Oct 2021 01:58:15 +0000 (01:58 +0000)]
Merge pull request #1124 from jkczyz/2021-10-default-channel-scoring
Add channel scoring to get_route
Matt Corallo [Fri, 15 Oct 2021 20:16:15 +0000 (20:16 +0000)]
Rename create_channel param to user_channel_id to standardize it
Matt Corallo [Fri, 15 Oct 2021 22:07:34 +0000 (22:07 +0000)]
Merge pull request #1123 from tnull/fix_video_url
Fixed 'Advancing Bitcoin' video URL.
Jeffrey Czyz [Mon, 27 Sep 2021 20:52:57 +0000 (13:52 -0700)]
Add channel scoring to get_route
Failed payments may be retried, but calling get_route may return a Route
with the same failing path. Add a routing::Score trait used to
parameterize get_route, which it calls to determine how much a channel
should be penalized in terms of msats willing to pay to avoid the
channel.
Also, add a Scorer struct that implements routing::Score with a constant
constant penalty. Subsequent changes will allow for more robust scoring
by feeding back payment path success and failure to the scorer via event
handling.
Elias Rohrer [Thu, 14 Oct 2021 08:35:12 +0000 (10:35 +0200)]
Fixed 'Advancing Bitcoin' video URL.
Matt Corallo [Thu, 14 Oct 2021 01:45:20 +0000 (01:45 +0000)]
Merge pull request #1112 from TheBlueMatt/2021-10-mon-refactors
Hide internals of ChainMonitor behind getter
Matt Corallo [Sat, 9 Oct 2021 00:23:44 +0000 (00:23 +0000)]
Use Persister to return errors in fuzzers not chain::Watch
Matt Corallo [Fri, 8 Oct 2021 06:16:28 +0000 (06:16 +0000)]
Use Persister to return errors in tests not chain::Watch
As ChainMonitor will need to see those errors in a coming PR,
we need to return errors via Persister so that our ChainMonitor
chain::Watch implementation sees them.
Matt Corallo [Fri, 8 Oct 2021 20:40:34 +0000 (20:40 +0000)]
Handle Persister returning TemporaryFailure for new channels
Previously, if a Persister returned a TemporaryFailure error when
we tried to persist a new channel, the ChainMonitor wouldn't track
the new ChannelMonitor at all, generating a PermanentFailure later
when the updating is restored.
This fixes that by correctly storing the ChannelMonitor on
TemporaryFailures, allowing later update restoration to happen
normally.
This is (indirectly) tested in the next commit where we use
Persister to return all monitor-update errors.
Matt Corallo [Fri, 8 Oct 2021 05:17:48 +0000 (05:17 +0000)]
Simplify channelmonitor tests which use chain::Watch and Persister
test_simple_monitor_permanent_update_fail and
test_simple_monitor_temporary_update_fail both have a mode where
they use either chain::Watch or persister to return errors.
As we won't be doing any returns directly from the chain::Watch
wrapper in a coming commit, the chain::Watch-return form of the
test will no longer make sense.
Matt Corallo [Fri, 8 Oct 2021 19:07:00 +0000 (19:07 +0000)]
Make `ChainMonitor::monitors` private and expose monitor via getter
Exposing a `RwLock<HashMap<>>` directly was always a bit strange,
and in upcoming changes we'd like to change the internal
datastructure in `ChainMonitor`.
Further, the use of `RwLock` and `HashMap` meant we weren't able
to expose the ChannelMonitors themselves to users in bindings,
leaving a bindings/rust API gap.
Thus, we take this opportunity go expose ChannelMonitors directly
via a wrapper, hiding the internals of `ChainMonitor` behind
getters. We also update tests to use the new API.
Matt Corallo [Tue, 5 Oct 2021 17:59:13 +0000 (17:59 +0000)]
Move ChannelMonitorUpdateErr to chain as it is a chain::Watch val
Matt Corallo [Thu, 7 Oct 2021 23:46:13 +0000 (23:46 +0000)]
Move `Persist` trait to chainmonitor as that's the only reference
Matt Corallo [Thu, 14 Oct 2021 00:16:27 +0000 (00:16 +0000)]
Merge pull request #1120 from jkczyz/2021-10-test-refactors
Pre-scoring test clean-ups
Jeffrey Czyz [Wed, 13 Oct 2021 17:19:14 +0000 (12:19 -0500)]
Move mpp_failure test to payment_tests.rs
Jeffrey Czyz [Mon, 27 Sep 2021 20:02:51 +0000 (13:02 -0700)]
Replace get_route with get_route_and_payment_hash
The interface for get_route will change to take a scorer. Using
get_route_and_payment_hash whenever possible allows for keeping the
scorer inside get_route_and_payment_hash rather than at every call site.
Replace get_route with get_route_and_payment_hash wherever possible.
Additionally, update get_route_and_payment_hash to use the known invoice
features and the sending node's logger.
Matt Corallo [Wed, 13 Oct 2021 21:34:19 +0000 (21:34 +0000)]
Include the user channel id counter in Event::ChannelClosed
This makes it more practical for users to track channels using
their own IDs, especially across funding.
Matt Corallo [Wed, 13 Oct 2021 21:14:35 +0000 (21:14 +0000)]
Return the temporary channel id in success from `create_channel`
This makes it more practical for users to track channels prior to
funding, especially if the channel fails because the peer rejects
it for a parameter mismatch.
Matt Corallo [Wed, 13 Oct 2021 16:54:09 +0000 (16:54 +0000)]
Merge pull request #1115 from TheBlueMatt/2021-10-expose-addr-vec
Expose ReadOnlyNetworkGraph::get_addresses to C by cloning result
Jeffrey Czyz [Fri, 8 Oct 2021 19:24:19 +0000 (14:24 -0500)]
Fix unused variable warnings in fuzzer
Jeffrey Czyz [Mon, 4 Oct 2021 21:06:38 +0000 (16:06 -0500)]
Speed up test_timer_tick_called
Matt Corallo [Mon, 11 Oct 2021 23:46:51 +0000 (23:46 +0000)]
Expose ReadOnlyNetworkGraph::get_addresses to C by cloning result
We cannot expose ReadOnlyNetworkGraph::get_addresses as is in C as
it returns a list of references to an enum, which the bindings
dont support. Instead, we simply clone the result so that it
doesn't contain references.
Matt Corallo [Wed, 13 Oct 2021 01:13:41 +0000 (01:13 +0000)]
Merge pull request #1077 from jkczyz/2021-09-failing-route-hop
Include short channel id in PaymentPathFailed
Jeffrey Czyz [Thu, 16 Sep 2021 04:22:44 +0000 (23:22 -0500)]
Add failing short channel id to PaymentPathFailed
This will be useful for scoring channels when a payment fails.
Matt Corallo [Tue, 12 Oct 2021 18:29:05 +0000 (18:29 +0000)]
Merge pull request #1116 from TheBlueMatt/2021-10-test-local-chan-routing
Use local channel state when constructing routes in test macro + Fix compile-warning
Matt Corallo [Sat, 9 Oct 2021 20:14:13 +0000 (20:14 +0000)]
Fix loop label shadowing warning
Matt Corallo [Tue, 12 Oct 2021 02:29:01 +0000 (02:29 +0000)]
Use local channel state when constructing routes in test macro
This is a bit more realistic and needed to route over non-public
channels.
Jeffrey Czyz [Mon, 11 Oct 2021 18:18:49 +0000 (13:18 -0500)]
Clean up fee_insufficient computation
Matt Corallo [Sat, 9 Oct 2021 17:17:55 +0000 (17:17 +0000)]
Merge pull request #1098 from 1nF0rmed/2021-09-adds-discard-funding-event
Add Event::DiscardFunding generation
1nF0rmed [Mon, 27 Sep 2021 16:50:07 +0000 (22:20 +0530)]
Adds DiscardFunding event
During the event of a channel close, if the funding transaction
is yet to be broadcasted then a DiscardFunding event is issued
along with the ChannelClose event.
Matt Corallo [Fri, 8 Oct 2021 21:02:53 +0000 (21:02 +0000)]
Merge pull request #1107 from dunxen/2021-10-swap-pubkey-for-bytearray
Replace PublicKey with [u8; 33] in NetworkGraph
Matt Corallo [Fri, 8 Oct 2021 20:49:19 +0000 (20:49 +0000)]
Merge pull request #1062 from galderz/t_payment_hash_999
Duncan Dean [Tue, 5 Oct 2021 20:40:34 +0000 (22:40 +0200)]
Replace PublicKey with [u8; 33] in NetworkGraph
Galder Zamarreño [Tue, 31 Aug 2021 07:56:21 +0000 (08:56 +0100)]
Add payment_hash to PaymentSent #999
Matt Corallo [Thu, 7 Oct 2021 23:14:06 +0000 (23:14 +0000)]
Merge pull request #1109 from TheBlueMatt/2021-10-init-fail-payment-retry-leak
Move pending payment tracking to after the new HTLC flies
Matt Corallo [Tue, 5 Oct 2021 22:28:32 +0000 (22:28 +0000)]
Correct error returned when `retry_payment` doesn't have a payment
Matt Corallo [Mon, 4 Oct 2021 04:47:33 +0000 (04:47 +0000)]
Move pending payment tracking to after the new HTLC flies
If we attempt to send a payment, but the HTLC cannot be send due to
local channel limits, we'll provide the user an error but end up
with an entry in our pending payment map. This will result in a
memory leak as we'll never reclaim the pending payment map entry.
Jeffrey Czyz [Tue, 14 Sep 2021 16:44:19 +0000 (11:44 -0500)]
Pass hop index in construct_onion_keys_callback
This simplifies failing route hop calculation, which will be useful for
later identifying the failing hop for PaymentFailed events.
Jeffrey Czyz [Mon, 20 Sep 2021 16:25:39 +0000 (11:25 -0500)]
Remove special case for onion error expiry_too_far
With channel scoring and payment retries, it is no longer necessary to
have expiry_too_far imply a payment failure.
Matt Corallo [Tue, 5 Oct 2021 23:16:20 +0000 (23:16 +0000)]
Merge pull request #1079 from TheBlueMatt/2021-09-stale-docs
Update Event::PaymentReceived docs since we require payment secret
Matt Corallo [Fri, 17 Sep 2021 17:51:13 +0000 (17:51 +0000)]
Update Event::PaymentReceived docs since we require payment secret
Users no longer need to verify the amounts of received payments as
the payment secret will protect us against the probing attacks such
verification was intended to fix.
Matt Corallo [Tue, 5 Oct 2021 19:10:42 +0000 (19:10 +0000)]
Move tests of payment retries into a new module
Matt Corallo [Tue, 5 Oct 2021 18:43:39 +0000 (18:43 +0000)]
Merge pull request #1100 from TheBlueMatt/2021-09-multihop-route-hint-fix
Consider many first-hop paths to the same counterparty in routing
Matt Corallo [Thu, 30 Sep 2021 01:19:04 +0000 (01:19 +0000)]
Merge pull request #1096 from valentinewallace/2021-09-mpp-retries
Valentine Wallace [Tue, 28 Sep 2021 22:31:39 +0000 (18:31 -0400)]
Expire outbound payments after 3 blocks if no parts are pending
Valentine Wallace [Tue, 28 Sep 2021 00:47:32 +0000 (20:47 -0400)]
Don't remove failed payments when all paths fail
This is because we want the ability to retry completely failed
payments.
Upcoming commits will remove these payments on timeout to prevent
DoS issues
Also test that this removal allows retrying single-path payments
Valentine Wallace [Fri, 24 Sep 2021 20:04:47 +0000 (16:04 -0400)]
Add method to retry payments
Matt Corallo [Thu, 30 Sep 2021 00:01:35 +0000 (00:01 +0000)]
Merge pull request #1080 from valentinewallace/2021-09-dup-chan-outpoint
Fix fuzzer-found panic from duplicate channel outpoint
Matt Corallo [Wed, 29 Sep 2021 23:16:22 +0000 (23:16 +0000)]
f readability improvements from val
Matt Corallo [Wed, 29 Sep 2021 20:24:37 +0000 (20:24 +0000)]
Merge pull request #1076 from TheBlueMatt/2021-09-forwardable-regen
Matt Corallo [Wed, 15 Sep 2021 19:20:44 +0000 (19:20 +0000)]
Regenerate PendingHTLCsForwardable on reload instead of serializing
When we are prepared to forward HTLCs, we generate a
PendingHTLCsForwardable event with a time in the future when the
user should tell us to forward. This provides some basic batching
of forward events, improving privacy slightly.
After we generate the event, we expect users to spawn a timer in
the background and let us know when it finishes. However, if the
user shuts down before the timer fires, the user will restart and
have no idea that HTLCs are waiting to be forwarded/received.
To fix this, instead of serializing PendingHTLCsForwardable events
to disk while they're pending (before the user starts the timer),
we simply regenerate them when a ChannelManager is deserialized
with HTLCs pending.
Fixes #1042
Matt Corallo [Wed, 29 Sep 2021 19:15:16 +0000 (19:15 +0000)]
Consider many first-hop paths to the same counterparty in routing
Previously we'd simply overwritten "the" first hop path to each
counterparty when routing, however this results in us ignoring all
channels except the last one in the `ChannelDetails` list per
counterparty.
Matt Corallo [Wed, 29 Sep 2021 18:51:14 +0000 (18:51 +0000)]
Correct step number in `get_route`
Valentine Wallace [Fri, 24 Sep 2021 20:02:11 +0000 (16:02 -0400)]
channelmanager: Add retry data to pending_outbound_payments
Valentine Wallace [Fri, 24 Sep 2021 16:12:16 +0000 (12:12 -0400)]
Refactor send_payment internals for retries 2
Retrying a partial payment means send_payment_internal needs to be parameterized
by a total payment amount, else 'HTLC values do not match' errors
Valentine Wallace [Thu, 23 Sep 2021 20:30:15 +0000 (16:30 -0400)]
Refactor send_payment internals for retries
We want to reuse send_payment internal functions for retries,
so some need to now be parameterized by PaymentId to avoid
generating a new PaymentId on retry
Valentine Wallace [Thu, 23 Sep 2021 20:13:30 +0000 (16:13 -0400)]
Return PaymentId from send_*payment functions
Used in upcoming commits for retries
Valentine Wallace [Thu, 23 Sep 2021 20:06:12 +0000 (16:06 -0400)]
Rename MppId to PaymentId
Leftover from previous PR Jeff feedback.
Useful in upcoming commits as we'll expose this to users for payment retries
Matt Corallo [Mon, 27 Sep 2021 20:39:02 +0000 (20:39 +0000)]
Merge pull request #1065 from TheBlueMatt/2021-08-bump-dust
Increase our default/minimum dust limit and decrease our max
Matt Corallo [Mon, 27 Sep 2021 17:56:21 +0000 (17:56 +0000)]
Rename MIN_DUST_LIMIT_SATOSHIS constant to disambiguate chan vs P2P
While channel and P2P network dust limits are related, they're
ultimately two different things, and thus their constant names
should reference that.
Matt Corallo [Wed, 1 Sep 2021 20:33:49 +0000 (20:33 +0000)]
Force-close channels if closing transactions may be non-standard
If a counterparty (or an old channel of ours) uses a non-segwit
script for their cooperative close payout, they may include an
output which is unbroadcastable due to not meeting the network dust
limit.
Here we check for this condition, force-closing the channel instead
if we find an output in the closing transaction which does not meet
the limit.
Matt Corallo [Wed, 1 Sep 2021 20:22:49 +0000 (20:22 +0000)]
Require user cooperative close payout scripts to be Segwit
There is little reason for users to be paying out to non-Segwit
scripts when closing channels at this point. Given we will soon, in
rare cases, force-close during shutdown when a counterparty closes
to a non-Segwit script, we should also require it of our own users.
Matt Corallo [Wed, 1 Sep 2021 20:18:47 +0000 (20:18 +0000)]
Reduce the maximum allowed counterparty dust limit to 546 sat/vbyte
546 sat/vbyte is the current default dust limit on most
implementations, matching the network dust limit for P2SH outputs.
Implementations don't currently appear to send any larger dust
limits, and allowing a larger dust limit implies higher payment
failure risk, so we'd like to be as tight as we can here.
Matt Corallo [Mon, 27 Sep 2021 18:19:19 +0000 (18:19 +0000)]
Merge pull request #1097 from TheBlueMatt/2021-09-clonable-netgraph
Make `NetworkGraph` Clone-able again
Matt Corallo [Sun, 26 Sep 2021 04:20:44 +0000 (04:20 +0000)]
Make `NetworkGraph` Clone-able again
There isn't a lot of user-utility for cloning `NetworkGraph`
directly (its a rather large struct, and there probably isn't a lot
of reason to have *multiple* `NetworkGraph`s). Thus, when locks
were pushed down into it, the `Clone`-ability of it was dropped as
well.
Sadly, mapping the Java memory model onto:
* `Read`-ing a `NetworkGraph`, creating a Java-owned
`NetworkGraph` object that the JVM will destruct for us,
* Passing it to a `NetGraphMsgHandler`, which now expects to own
the `NetworkGraph`, including destructing it,
isn't really practical without adding a clone in between.
Given this, and the fact that there's nothing inherently wrong with
clone-ing a `NetworkGraph`, we simply re-add `Clone` here.
Matt Corallo [Thu, 23 Sep 2021 18:43:25 +0000 (18:43 +0000)]
Merge pull request #1095 from TheBlueMatt/2021-09-0.0.101
Bump Crate versions to 0.0.101 (and invoice to 0.9)
Matt Corallo [Thu, 23 Sep 2021 18:22:29 +0000 (18:22 +0000)]
Bump Crate versions to 0.0.101 (and invoice to 0.9)
Matt Corallo [Thu, 23 Sep 2021 18:12:02 +0000 (18:12 +0000)]
Merge pull request #1085 from TheBlueMatt/2021-09-0.0.101
Cut 0.0.101
Matt Corallo [Mon, 20 Sep 2021 22:07:03 +0000 (22:07 +0000)]
Update CHANGELOG for 0.0.101
Matt Corallo [Thu, 23 Sep 2021 16:59:36 +0000 (16:59 +0000)]
Merge pull request #1094 from TheBlueMatt/2021-09-type-explicit-bounds
Use Infallible for the unconstructable default custom message type
Matt Corallo [Thu, 23 Sep 2021 04:02:58 +0000 (04:02 +0000)]
Make method time on trait impl explitit to help bindings generator
Associated types in C bindings is somewhat of a misnomer - we
concretize each trait to a single struct. Thus, different trait
implementations must still have the same type, which defeats the
point of associated types.
In this particular case, however, we can reasonably special-case
the `Infallible` type, as an instance of it existing implies
something has gone horribly wrong.
In order to help our bindings code figure out how to do so when
referencing a parent trait's associated type, we specify the
explicit type in the implementation method signature.
Matt Corallo [Wed, 22 Sep 2021 23:45:27 +0000 (23:45 +0000)]
Drop redundant generic bounds when the trait requires the bounds
Matt Corallo [Wed, 22 Sep 2021 19:00:30 +0000 (19:00 +0000)]
Use Infallible for the unconstructable default custom message type
When we landed custom messages, we used the empty tuple for the
custom message type for `IgnoringMessageHandler`. This was fine,
except that we also implemented `Writeable` to panic when writing
a `()`. Later, we added support for anchor output construction in
CommitmentTransaction, signified by setting a field to `Some(())`,
which is serialized as-is.
This causes us to panic when writing a `CommitmentTransaction`
with `opt_anchors` set. Note that we never set it inside of LDK,
but downstream users may.
Instead, we implement `Writeable` to write nothing for `()` and use
`core::convert::Infallible` for the default custom message type as
it is, appropriately, unconstructable.
This also makes it easier to implement various things in bindings,
as we can always assume `Infallible`-conversion logic is
unreachable.
Matt Corallo [Wed, 22 Sep 2021 16:49:02 +0000 (16:49 +0000)]
Merge pull request #1093 from TheBlueMatt/2021-09-type-explicit-bounds
Make `ChainMonitor::get_claimable_balances` take a slice of refs
Matt Corallo [Wed, 22 Sep 2021 03:57:53 +0000 (03:57 +0000)]
Make `ChainMonitor::get_claimable_balances` take a slice of refs
For the same reason as `get_route`, a slice of objects isn't
practical to map to bindings - the objects in the bindings space
are structs with a pointer and some additional metadata. Thus, to
create a slice of them, we'd need to take ownership of the objects
behind the pointer, place them into a slace, and then restore them
to the pointer.
This would be a lot of memory copying and marshalling, not to
mention wouldn't be thread-safe, which the same function otherwise
would be if we used a slice of references instead of a slice of
objects.
Matt Corallo [Wed, 22 Sep 2021 02:46:25 +0000 (02:46 +0000)]
Merge pull request #1092 from TheBlueMatt/2021-09-type-explicit-bounds
Move trait bounds on `wire::Type` from use to the trait itself
Matt Corallo [Wed, 22 Sep 2021 01:04:35 +0000 (01:04 +0000)]
Move trait bounds on `wire::Type` from use to the trait itself
`wire::Type` is only (publicly) used as the `CustomMessage`
associated type in `CustomMessageReader`, where it has additional
trait bounds on `Debug` and `Writeable`. The documentation for
`Type` even mentions that you need to implement `Writeable` because
this is the one place it is used.
To make this more clear, we move the type bounds onto the trait
itself and not on the associated type.
This is also the only practical way to build C bindings for `Type`
as we cannot have a concrete, single, `Type` struct in C which only
optionally implements various subtraits, at least not without
runtime checking of the type bounds.
Matt Corallo [Tue, 21 Sep 2021 22:34:00 +0000 (22:34 +0000)]
Merge pull request #1091 from TheBlueMatt/2021-09-997-winblowz
Fix windows-only test failure added in #997
Matt Corallo [Tue, 21 Sep 2021 22:14:42 +0000 (22:14 +0000)]
Merge pull request #1084 from valentinewallace/2021-09-rename-paymentfailed
Rename Event PaymentFailed -> PaymentPathFailed
Matt Corallo [Tue, 21 Sep 2021 22:04:15 +0000 (22:04 +0000)]
Merge pull request #1061 from sr-gi/add-transaction-convert
Adds Transaction to lighting-block-sync::convert
Matt Corallo [Tue, 21 Sep 2021 21:59:11 +0000 (21:59 +0000)]
Merge pull request #1088 from TheBlueMatt/2021-09-1063-fixups
Fix a panic in Route's new fee-calculation methods and clean up