rust-lightning
3 years agoLoosen background-persister so bindings are happy
Matt Corallo [Tue, 13 Apr 2021 20:04:17 +0000 (16:04 -0400)]
Loosen background-persister so bindings are happy

3 years agoMerge pull request #858 from jkczyz/2021-03-electrum-interface
Matt Corallo [Thu, 15 Apr 2021 14:25:54 +0000 (14:25 +0000)]
Merge pull request #858 from jkczyz/2021-03-electrum-interface

Electrum interface for ChannelMonitor

3 years agoRename onchain_events_waiting_threshold_conf
Jeffrey Czyz [Mon, 12 Apr 2021 18:47:23 +0000 (11:47 -0700)]
Rename onchain_events_waiting_threshold_conf

3 years agoParameterize test_htlc_on_chain_timeout
Jeffrey Czyz [Sat, 10 Apr 2021 07:32:08 +0000 (00:32 -0700)]
Parameterize test_htlc_on_chain_timeout

This test failed when ConnectionStyle was set to a SkippingBlocks
variant because of a bug in ChannelMonitor::update_best_block.
Parameterize the test with these styles to catch any regressions.

3 years agoTest ChainMonitor's Electrum interface
Jeffrey Czyz [Wed, 7 Apr 2021 19:02:33 +0000 (12:02 -0700)]
Test ChainMonitor's Electrum interface

3 years agoReuse txdata in functional_test_utils.rs
Jeffrey Czyz [Wed, 7 Apr 2021 18:43:32 +0000 (11:43 -0700)]
Reuse txdata in functional_test_utils.rs

3 years agoAdd an internal typedef for transaction outputs
Jeffrey Czyz [Fri, 2 Apr 2021 23:53:00 +0000 (16:53 -0700)]
Add an internal typedef for transaction outputs

3 years agoRemove unnecessary script_pubkey clones
Jeffrey Czyz [Fri, 2 Apr 2021 22:31:20 +0000 (15:31 -0700)]
Remove unnecessary script_pubkey clones

3 years agoElectrum interface for ChainMonitor
Jeffrey Czyz [Fri, 2 Apr 2021 22:03:41 +0000 (15:03 -0700)]
Electrum interface for ChainMonitor

Add an interface to ChainMonitor for Electrum users, delegating to the
corresponding methods in each ChannelMonitor.

3 years agoAdd ChannelMonitor::get_relevant_txids
Jeffrey Czyz [Mon, 5 Apr 2021 20:18:27 +0000 (13:18 -0700)]
Add ChannelMonitor::get_relevant_txids

Define an Electrum-friendly interface for ChannelMonitor where txids of
relevant transactions can be obtained. For any of these transactions
that are re-orged out of the chain, users must call
transaction_unconfirmed.

3 years agoAdd ChannelMonitor::transaction_unconfirmed
Jeffrey Czyz [Sat, 27 Mar 2021 20:26:45 +0000 (16:26 -0400)]
Add ChannelMonitor::transaction_unconfirmed

Define an Electrum-friendly interface for ChannelMonitor where
transactions are unconfirmed independently from updating the latest
block.

3 years agoAdd ChannelMonitor::update_best_block
Jeffrey Czyz [Fri, 2 Apr 2021 02:44:46 +0000 (19:44 -0700)]
Add ChannelMonitor::update_best_block

Expose a way for Electrum users to update the best block on a
ChannelMonitor independently of confirming transactions.

3 years agoAdd ChannelMonitor::transactions_confirmed
Jeffrey Czyz [Wed, 24 Mar 2021 22:47:44 +0000 (18:47 -0400)]
Add ChannelMonitor::transactions_confirmed

Define an Electrum-friendly interface for ChannelMonitor where
transactions are confirmed independently of updating the last connected
block.

3 years agoTrack block height in ChannelMonitor
Jeffrey Czyz [Tue, 6 Apr 2021 18:34:17 +0000 (11:34 -0700)]
Track block height in ChannelMonitor

3 years agoCombine ChannelManager's block hash and height
Jeffrey Czyz [Fri, 9 Apr 2021 06:36:30 +0000 (23:36 -0700)]
Combine ChannelManager's block hash and height

There is a possible race condition when both the latest block hash and
height are needed. Combine these in one struct and place them behind a
single lock.

3 years agoAdd txid to on-chain event tracking
Jeffrey Czyz [Wed, 31 Mar 2021 17:54:01 +0000 (13:54 -0400)]
Add txid to on-chain event tracking

When using Electrum, transactions are individually unconfirmed during a
reorg rather than by block. Store the txid of the transaction creating
the on-chain event so that it can be used to determine which events need
to be removed when a transaction is unconfirmed.

3 years agoCheck for duplicate HTLC events having matured
Jeffrey Czyz [Sat, 10 Apr 2021 01:38:03 +0000 (18:38 -0700)]
Check for duplicate HTLC events having matured

3 years agoFlatten onchain_events_waiting_threshold_conf
Jeffrey Czyz [Wed, 31 Mar 2021 17:23:57 +0000 (13:23 -0400)]
Flatten onchain_events_waiting_threshold_conf

Rather than mapping height to a vector of events, use a single vector
for all events. This allows for easily processing events by either
height or transaction. The latter will be used for an interface suitable
for Electrum.

3 years agoMerge pull request #853 from TheBlueMatt/2021-03-transaction_unconfirmed
Matt Corallo [Wed, 14 Apr 2021 18:50:52 +0000 (18:50 +0000)]
Merge pull request #853 from TheBlueMatt/2021-03-transaction_unconfirmed

Add method to note transaction unconfirmed/reorged-out

3 years agoTest new transactions_unconfirmed 2021-03-transaction_unconfirmed
Matt Corallo [Mon, 22 Mar 2021 22:07:13 +0000 (18:07 -0400)]
Test new transactions_unconfirmed

3 years agoExpose ChannelManager's current config and use it in reload in tests
Matt Corallo [Mon, 22 Mar 2021 21:59:59 +0000 (17:59 -0400)]
Expose ChannelManager's current config and use it in reload in tests

3 years agoAdd method to note transaction unconfirmed/reorged-out
Matt Corallo [Mon, 22 Mar 2021 21:01:04 +0000 (17:01 -0400)]
Add method to note transaction unconfirmed/reorged-out

3 years agoMerge pull request #885 from p2pderivatives/use-secp256k1-consts-in-ser
Matt Corallo [Wed, 14 Apr 2021 02:20:27 +0000 (02:20 +0000)]
Merge pull request #885 from p2pderivatives/use-secp256k1-consts-in-ser

Fix size check in Vec<Signature> serialization + use consts

3 years agoMerge pull request #875 from TheBlueMatt/2021-04-fix-bench
Matt Corallo [Wed, 14 Apr 2021 01:51:33 +0000 (01:51 +0000)]
Merge pull request #875 from TheBlueMatt/2021-04-fix-bench

Fix benchmark compile warnings and errors

3 years agoFix size check in Vec<Signature> serialization + use consts
Tibo-lg [Wed, 14 Apr 2021 01:37:49 +0000 (10:37 +0900)]
Fix size check in Vec<Signature> serialization + use consts

3 years agoFix compile warning with --cfg require_route_graph_test 2021-04-fix-bench
Matt Corallo [Tue, 13 Apr 2021 00:33:53 +0000 (20:33 -0400)]
Fix compile warning with --cfg require_route_graph_test

3 years agoMerge pull request #872 from valentinewallace/timer-tick-in-bg-processor
Matt Corallo [Tue, 13 Apr 2021 01:37:52 +0000 (01:37 +0000)]
Merge pull request #872 from valentinewallace/timer-tick-in-bg-processor

Call timer_tick_occurred in BackgroundProcessor

3 years agoCall peer_manager.timer_tick_occurred() in background processor
Valentine Wallace [Fri, 9 Apr 2021 20:58:31 +0000 (16:58 -0400)]
Call peer_manager.timer_tick_occurred() in background processor

3 years agoRename timer_chan_freshness_every_min for uniformity with PeerManager
Valentine Wallace [Fri, 9 Apr 2021 20:55:10 +0000 (16:55 -0400)]
Rename timer_chan_freshness_every_min for uniformity with PeerManager

3 years agoMerge pull request #874 from TheBlueMatt/2021-04-persister-export
Matt Corallo [Mon, 12 Apr 2021 23:56:01 +0000 (23:56 +0000)]
Merge pull request #874 from TheBlueMatt/2021-04-persister-export

Prep lightning-persister for export in the C bindings

3 years agoImprove + fix indentation and style in lightning-persister 2021-04-persister-export
Matt Corallo [Mon, 12 Apr 2021 21:59:11 +0000 (17:59 -0400)]
Improve + fix indentation and style in lightning-persister

3 years agoReturn ChannelMonitors in a Vec, not HashMap when loading from disk
Matt Corallo [Mon, 12 Apr 2021 17:48:29 +0000 (13:48 -0400)]
Return ChannelMonitors in a Vec, not HashMap when loading from disk

There's little reason for the HashMap - the ChannelMonitors are
already unique (enforced by file names), and the eventual HashMap
that users need when deserializing the `ChannelManager` is a
slightly different form (it requires no BlockHash entry).

3 years agoFix benchmark compile warnings and errors
Matt Corallo [Mon, 12 Apr 2021 22:04:55 +0000 (18:04 -0400)]
Fix benchmark compile warnings and errors

Hopefully soon once a few more PRs get merged we can require this
in CI so we won't have any more regressions here.

3 years agoExpand persistence to all ChannelManagers, not just Arc-based ones
Matt Corallo [Mon, 12 Apr 2021 16:20:38 +0000 (12:20 -0400)]
Expand persistence to all ChannelManagers, not just Arc-based ones

3 years agoMerge pull request #856 from TheBlueMatt/2021-03-check-tx
Matt Corallo [Sat, 10 Apr 2021 20:27:24 +0000 (20:27 +0000)]
Merge pull request #856 from TheBlueMatt/2021-03-check-tx

Take the full funding transaction from the user on generation

3 years agoMerge pull request #870 from valentinewallace/invoices-crate
Matt Corallo [Sat, 10 Apr 2021 20:26:58 +0000 (20:26 +0000)]
Merge pull request #870 from valentinewallace/invoices-crate

Invoices crate

3 years agoMerge pull request #873 from TheBlueMatt/2021-861-missing-eof-eol
Matt Corallo [Sat, 10 Apr 2021 20:26:36 +0000 (20:26 +0000)]
Merge pull request #873 from TheBlueMatt/2021-861-missing-eof-eol

Add missing EOF newline

3 years agoTake the full funding transaction from the user on generation 2021-03-check-tx
Matt Corallo [Fri, 26 Mar 2021 22:07:24 +0000 (18:07 -0400)]
Take the full funding transaction from the user on generation

Instead of relying on the user to ensure the funding transaction is
correct (and panicing when it is confirmed), we should check it is
correct when it is generated. By taking the full funding transaciton
from the user on generation, we can also handle broadcasting for
them instead of doing so via an event.

3 years agoMerge pull request #861 from lightning-signer/degenerify
Matt Corallo [Fri, 9 Apr 2021 23:57:20 +0000 (23:57 +0000)]
Merge pull request #861 from lightning-signer/degenerify

De-generify Sign methods

3 years agoAdd missing EOF newline 2021-861-missing-eof-eol
Matt Corallo [Fri, 9 Apr 2021 23:57:12 +0000 (19:57 -0400)]
Add missing EOF newline

3 years agoMerge pull request #866 from TheBlueMatt/2021-04-log-err-node
Matt Corallo [Fri, 9 Apr 2021 22:23:14 +0000 (22:23 +0000)]
Merge pull request #866 from TheBlueMatt/2021-04-log-err-node

Log the node generating an onion error

3 years agoMerge pull request #863 from valentinewallace/expose-read-chanmons-from-disk
Matt Corallo [Fri, 9 Apr 2021 16:56:07 +0000 (16:56 +0000)]
Merge pull request #863 from valentinewallace/expose-read-chanmons-from-disk

persister: Expose method to read ChannelMonitors from disk

3 years agopersister: Expose method to read ChannelMonitors from disk
Valentine Wallace [Fri, 2 Apr 2021 18:42:03 +0000 (14:42 -0400)]
persister: Expose method to read ChannelMonitors from disk

3 years agoFix Windows
Valentine Wallace [Wed, 7 Apr 2021 17:44:59 +0000 (13:44 -0400)]
Fix Windows

3 years agoClean up lightning-invoice Cargo.toml and README
Valentine Wallace [Wed, 7 Apr 2021 17:17:22 +0000 (13:17 -0400)]
Clean up lightning-invoice Cargo.toml and README

3 years agoAdd lightning invoice fuzzing to CI
Valentine Wallace [Wed, 7 Apr 2021 17:04:29 +0000 (13:04 -0400)]
Add lightning invoice fuzzing to CI

3 years agoClean up lightning-invoice CI, license, and add to workspaces
Valentine Wallace [Wed, 7 Apr 2021 17:04:04 +0000 (13:04 -0400)]
Clean up lightning-invoice CI, license, and add to workspaces

3 years agoPure import of lightning-invoice crate
Sebastian [Wed, 7 Apr 2021 16:48:01 +0000 (12:48 -0400)]
Pure import of lightning-invoice crate

Original repo: https://github.com/rust-bitcoin/rust-lightning-invoice

3 years agoTest that BaseSign can have a vtable
Devrandom [Fri, 9 Apr 2021 09:16:22 +0000 (11:16 +0200)]
Test that BaseSign can have a vtable

3 years agoMove Writeable from BaseSign to Sign
Devrandom [Fri, 9 Apr 2021 09:18:45 +0000 (11:18 +0200)]
Move Writeable from BaseSign to Sign

3 years agoSeparate Clone from Sign
Devrandom [Thu, 1 Apr 2021 10:24:21 +0000 (12:24 +0200)]
Separate Clone from Sign

Clone requires Sized, which prevents Sign from being a dyn object.

3 years agoEliminate unnecessary generics from Sign
Devrandom [Thu, 1 Apr 2021 10:40:35 +0000 (12:40 +0200)]
Eliminate unnecessary generics from Sign

The generic methods prevent Sign from being a dyn object.

Use Secp256k1<All> as part of removing generics from Secp256k1 contexts passed into Sign methods.

3 years agoMerge pull request #871 from TheBlueMatt/2021-03-bench-sends
Matt Corallo [Thu, 8 Apr 2021 15:07:24 +0000 (15:07 +0000)]
Merge pull request #871 from TheBlueMatt/2021-03-bench-sends

Run FS bench in CI as well

3 years agoRun FS bench in CI as well 2021-03-bench-sends
Matt Corallo [Thu, 8 Apr 2021 02:55:10 +0000 (22:55 -0400)]
Run FS bench in CI as well

3 years agoMerge pull request #815 from TheBlueMatt/2021-03-router-fuzzzzzzzz
Matt Corallo [Thu, 8 Apr 2021 02:06:13 +0000 (02:06 +0000)]
Merge pull request #815 from TheBlueMatt/2021-03-router-fuzzzzzzzz

Track full-path htlc-minimum-msat while routing

3 years ago[router] Add and clarify comments describing router internals 2021-03-router-fuzzzzzzzz
Matt Corallo [Thu, 1 Apr 2021 22:31:34 +0000 (18:31 -0400)]
[router] Add and clarify comments describing router internals

3 years agoDrop unreachable underflow-handling block in route calculation
Matt Corallo [Sat, 27 Mar 2021 22:16:38 +0000 (18:16 -0400)]
Drop unreachable underflow-handling block in route calculation

See comment in the removed block, note that the subsequent
subtraction will underflow if the block would otherwise have been
reached.

3 years agoDon't clone Features during Dijkstras graph walk
Matt Corallo [Fri, 5 Mar 2021 02:42:42 +0000 (21:42 -0500)]
Don't clone Features during Dijkstras graph walk

We currently copy the features objects in each channel as we walk
the graph during route calculation. This implies a significant
amount of malloc traffic as the features flags object are stored
on the heap.

Instead, because they features being referenced are in the network
graph which we hold a reference to, we can simply store references
to them.

This nontrivially improves our get_route benchmark by around 5%.

3 years ago[router] Avoid re-processing peers when a score component decreases
Matt Corallo [Sat, 27 Mar 2021 16:49:42 +0000 (12:49 -0400)]
[router] Avoid re-processing peers when a score component decreases

While walking the graph doing Dijkstra's, we may decrease the
amount being sent along one path, and not others, based on the
htlc_minimum_msat value. This may result in a lower relative fees
on that path in comparison to others. In the extreme, this may
result in finding a second path to a node with a lower fee than the
first path found (normally impossible in a Dijkstra's
implementation, as we walk next hops in fee-order).

In such a case, we end up with parts of our state invalid as
further hops beyond that node have been filled in using the
original total fee information.

Instead, we simply track which nodes have been processed and ignore
and further updates to them (as it implies we've reduced the amount
we're sending to find a lower absolute fee, but a higher relative
fee, which isn't a better route).

We check that we are in exactly this case in test builds with new
in-line assertions. Note that these assertions successfully detect
the bug in the previous commit.

Sadly this requires an extra HashMap lookup every time we pop an
element off of our heap, though we can skip a number of heap pushes
during the channel walking.

3 years agoAdd a random real-world-network-graph test for the router
Matt Corallo [Sat, 27 Mar 2021 01:50:54 +0000 (21:50 -0400)]
Add a random real-world-network-graph test for the router

This is the same code as was recently failing in our benchmarks,
adapted to use a random starting seed instead of a fixed one and
a smaller iteration to reduce runtime.

3 years ago[router] Calc min-to-node fees based on min value, not est value
Matt Corallo [Sat, 27 Mar 2021 16:27:44 +0000 (12:27 -0400)]
[router] Calc min-to-node fees based on min value, not est value

When walking the network graph to calculate a route, we always
calculate the minimum fee which is required to make one further
hop. This avoids some extra hop processing at the end of each path
selection loop (saving around 10% runtime in our benchmarks).

However, if we use the real value which we expect
to send over a channel in that calculation, we may find an
alternate path to the same node which is more expensive but
capacity-constrained, resulting in us considering it cheaper as the
relative fee paid will be lower.

Instead, we can use the `minimal_value_contribution_msat`, which is
a constant through an entire path finding iteration, as the amount,
preventing any basis change in the relative fee paid.

3 years ago[router] Make Dijkstra's path scoring non-decreasing + consistent
Matt Corallo [Sat, 27 Mar 2021 02:56:37 +0000 (22:56 -0400)]
[router] Make Dijkstra's path scoring non-decreasing + consistent

Currently, the "best source" for a given node tracked during
Dijkstra's is updated with a different critera from the heap
sorting, resulting in loops in calculated paths.

This adds a test for the specific failure currently seen, utilizing
the new path-htlc-minimum tracking in the heap entries in place of
the per-hop htlc-minimum values which the MPP changeset partially
used.

3 years ago[router] Avoid re-selecting the same path over and over again
Matt Corallo [Sat, 27 Mar 2021 02:31:57 +0000 (22:31 -0400)]
[router] Avoid re-selecting the same path over and over again

If we walk the network graph and find a route that meets are
payment amount and has a liquidiy limit far in excess of our
payment amount, we may select the same path several times in the
main path-gathering loop.

Instead, if the path we selected was not limited by the available
liquidity, we set the middle hop in the path's liquidity available
to zero, disabling that channel in future path finding steps.

3 years ago[router] Track full-path htlc-minimum-msat while graph-walking
Matt Corallo [Sat, 27 Mar 2021 02:53:35 +0000 (22:53 -0400)]
[router] Track full-path htlc-minimum-msat while graph-walking

Previously, we'd happily send funds through a path where, while
generating the path, in some middle hope we reduce the value being
sent to meet an htlc_maximum, making a later hop invalid due to it
no longer meeting its htlc_minimum. Instead, we need to track the
path's htlc-minimum while we're transiting the graph.

3 years ago[router] Do not fail if we are exactly (or 3x) limited by a maximum
Matt Corallo [Sat, 27 Mar 2021 02:51:41 +0000 (22:51 -0400)]
[router] Do not fail if we are exactly (or 3x) limited by a maximum

The new MPP routing algorithm attempts to build paths with a higher
value than our payment to find paths which may allow us to pay a
fee to meet an htlc_minimum limit. This is great if we're
min-bounded, however it results in us rejecting paths where we are
bounded by a maximum near the end of the path, with fees, and then
bounded by a minimum earlier in the path. Further, it means we will
not find the cheapest path where paths have a lower relative fee
but a higher absolute fee.

Instead, we calculate routes using the actual amount we wish to
send. To maintain the previous behavior of searching for cheaper
paths where we can "pay the difference" to meet an htlc_minimum, we
detect if we were minimum-bounded during graph walking and, if we
are, we walk the graph again with a higher value.

3 years agoAdd comment in get_route describing our dijkstra's mods
Matt Corallo [Tue, 2 Mar 2021 01:20:16 +0000 (20:20 -0500)]
Add comment in get_route describing our dijkstra's mods

3 years agoMerge pull request #838 from TheBlueMatt/2021-03-skip-blocks
Matt Corallo [Mon, 5 Apr 2021 22:12:45 +0000 (22:12 +0000)]
Merge pull request #838 from TheBlueMatt/2021-03-skip-blocks

Make `Channel`'s block connection API more electrum-friendly

3 years agoHandle 1-conf funding_locked in channel no matter the event order 2021-03-skip-blocks
Matt Corallo [Wed, 10 Mar 2021 03:05:21 +0000 (22:05 -0500)]
Handle 1-conf funding_locked in channel no matter the event order

See comment in the diff for more details

3 years agoAllow changing the way we [dis]connect blocks in funtional tests
Matt Corallo [Sat, 20 Mar 2021 04:28:10 +0000 (00:28 -0400)]
Allow changing the way we [dis]connect blocks in funtional tests

3 years agoDrop ChannelManager::block_disconnected() entirely
Matt Corallo [Sat, 20 Mar 2021 04:22:09 +0000 (00:22 -0400)]
Drop ChannelManager::block_disconnected() entirely

It is now entirely redundant with ChannelManager::update_best_block
and is still accessible via `Listen::block_disconnected`.

3 years agoMake the ChannelManager::block_connected API more electrum-friendly
Matt Corallo [Sat, 20 Mar 2021 05:00:54 +0000 (01:00 -0400)]
Make the ChannelManager::block_connected API more electrum-friendly

See the similar commit that operates on `Channel`'s internal API
for more details on the reasoning.

3 years agoLog the node generating an onion error 2021-04-log-err-node
Matt Corallo [Mon, 5 Apr 2021 20:23:13 +0000 (16:23 -0400)]
Log the node generating an onion error

3 years agoMove ChannelManager to Channel's new block data API
Matt Corallo [Fri, 19 Mar 2021 00:32:30 +0000 (20:32 -0400)]
Move ChannelManager to Channel's new block data API

This also moves the scanning of the block for commitment
transactions into channel, unifying the error path.

3 years agoMore regularly send an Error message when we force-close a channel
Matt Corallo [Fri, 19 Mar 2021 00:32:20 +0000 (20:32 -0400)]
More regularly send an Error message when we force-close a channel

When we force-close a channel, for whatever reason, it is nice to
send an error message to our peer. This allows them to closes the
channel on their end instead of trying to send through it and
failing. Further, it may induce them to broadcast their commitment
transaction, possibly getting that confirmed and saving us on fees.

This commit adds a few more cases where we should have been sending
error messages but weren't. It also includes an almost-global
replace in tests of the second argument in
`check_closed_broadcast!()` from false to true (indicating an error
message is expected). There are only a few exceptions, notably
those where the closure is the result of our counterparty having
sent *us* an error message.

3 years agoMerge pull request #864 from valentinewallace/background-process-peer-events
Matt Corallo [Mon, 5 Apr 2021 16:51:40 +0000 (16:51 +0000)]
Merge pull request #864 from valentinewallace/background-process-peer-events

Call peer_manager.process_events() in BackgroundProcessor

3 years agoCall peer_manager.process_events() in BackgroundProcessor
Valentine Wallace [Fri, 2 Apr 2021 22:40:57 +0000 (18:40 -0400)]
Call peer_manager.process_events() in BackgroundProcessor

3 years agoMake `Channel`'s block connection API more electrum-friendly
Matt Corallo [Tue, 16 Mar 2021 00:28:22 +0000 (20:28 -0400)]
Make `Channel`'s block connection API more electrum-friendly

Electrum clients primarily operate in a world where they query (and
subscribe to notifications for) transactions by script_pubkeys.
They may never learn very much about the actual blockchain and
orient their events around individual transactions, not the
blockchain.

This makes our ChannelManager interface somewhat more amenable to
such a client by splitting `block_connected` into
`transactions_confirmed` and `update_best_block`. The first handles
checking the funding transaction and storing its height/confirmation
block, whereas the second handles funding_locked and reorg logic.

Sadly, this interface is somewhat easy to misuse - notifying the
channel of the funding transaction being reorganized out of the
chain is complicated when the only notification received is that
a new block is connected at a given height. This will be addressed
in a future commit.

3 years agoSwitch to height-based funding-tx tracking from conf-based tracking
Matt Corallo [Tue, 16 Mar 2021 00:13:57 +0000 (20:13 -0400)]
Switch to height-based funding-tx tracking from conf-based tracking

Previously, we expected every block to be connected in-order,
allowing us to track confirmations by simply incrementing a counter
for each new block connected. In anticipation of moving to a
update-height model in the next commit, this moves to tracking
confirmations by simply storing the height at which the funding
transaction was confirmed.

This commit also corrects our "funding was reorganized out of the
best chain" heuristic, instead of a flat 6 blocks, it uses half the
confirmation count required as the point at which we force-close.

Even still, for low confirmation counts (eg 1 block), an ill-timed
reorg may still cause spurious force-closes, though that behavior
is not new in this commit.

3 years agoMerge pull request #860 from TheBlueMatt/2021-03-bench-sends
Matt Corallo [Thu, 1 Apr 2021 21:38:03 +0000 (21:38 +0000)]
Merge pull request #860 from TheBlueMatt/2021-03-bench-sends

Add a simple send-funds benchmark in channelmanager

3 years agoAlso benchmark sending funds with a FilesystemPersister
Matt Corallo [Thu, 1 Apr 2021 00:16:21 +0000 (20:16 -0400)]
Also benchmark sending funds with a FilesystemPersister

3 years agoMerge pull request #859 from TheBlueMatt/2021-03-fix-warns
Matt Corallo [Thu, 1 Apr 2021 14:37:41 +0000 (14:37 +0000)]
Merge pull request #859 from TheBlueMatt/2021-03-fix-warns

3 years agoCache our node ID in ChannelManager
Matt Corallo [Wed, 31 Mar 2021 23:54:32 +0000 (19:54 -0400)]
Cache our node ID in ChannelManager

While its not necessarily a common operation on a running node,
`get_our_node_id()` is used incredibly heavily in tests, and there
is no reason to not eat the extra ~64 bytes to just cache it.

3 years agoAdd a simple send-funds benchmark in channelmanager
Matt Corallo [Wed, 31 Mar 2021 23:52:37 +0000 (19:52 -0400)]
Add a simple send-funds benchmark in channelmanager

3 years agoImplement Persist for any Signer in TestPersister
Matt Corallo [Wed, 31 Mar 2021 23:51:15 +0000 (19:51 -0400)]
Implement Persist for any Signer in TestPersister

3 years agoFix two new compiler warnings in fuzz 2021-03-fix-warns
Matt Corallo [Wed, 31 Mar 2021 03:21:00 +0000 (23:21 -0400)]
Fix two new compiler warnings in fuzz

This fixes two trivial compiler warnings in fuzz that point to
broken usage of explicit `panic!()`s.

3 years agoMerge pull request #840 from jkczyz/2021-03-rescan-logic
Matt Corallo [Sun, 28 Mar 2021 19:47:09 +0000 (19:47 +0000)]
Merge pull request #840 from jkczyz/2021-03-rescan-logic

Rescan dependent transactions in ChainMonitor

3 years agoTest register_output is called on dependent txn
Jeffrey Czyz [Sun, 21 Mar 2021 04:42:58 +0000 (00:42 -0400)]
Test register_output is called on dependent txn

chain::Filter::register_output may return an in-block dependent
transaction that spends the output. Test the scenario where the txdata
given to ChainMonitor::block_connected includes a commitment transaction
whose HTLC output is spent in the same block but not included in txdata.
Instead, it is returned by chain::Filter::register_output when given the
commitment transaction's HTLC output. This is a common scenario for
Electrum clients, which provided filtered txdata.

3 years agoMock-like expectations for TestChainSource
Jeffrey Czyz [Sun, 21 Mar 2021 03:54:21 +0000 (23:54 -0400)]
Mock-like expectations for TestChainSource

Add a method to TestChainSource to test chain::Filter expectations. This
is limited to register_output, allowing tests to assert that the method
was called with a specific output and dictate what the return value is.

Multiple expectations are checked in the order in which they were added.
Failure occurs if a call doesn't match the next expectation or if there
are unsatisfied expectations. If not expectations are added, then no
calls are checked.

3 years agoAdd rescan logic to ChainMonitor::block_connected
Jeffrey Czyz [Wed, 10 Mar 2021 22:39:34 +0000 (14:39 -0800)]
Add rescan logic to ChainMonitor::block_connected

Electrum clients will only provide transaction data for outputs that
have been explicitly registered. Hence, upon registering new outputs,
recursively register any outputs to watch contained within dependent
transactions from the same block.

3 years agoInclude block hash for watched transaction output
Jeffrey Czyz [Tue, 16 Mar 2021 00:32:28 +0000 (17:32 -0700)]
Include block hash for watched transaction output

When registering a watched transaction output, any in-block descendant
transactions spending the output must be supplied. Give the block hash
when registering such outputs such that this is possible. Otherwise,
spends from other blocks may be returned inadvertently.

3 years agoMerge pull request #855 from valentinewallace/expose-asyncblocksourceresult
Matt Corallo [Fri, 26 Mar 2021 19:41:55 +0000 (19:41 +0000)]
Merge pull request #855 from valentinewallace/expose-asyncblocksourceresult

Expose AsyncBlockSourceResult as pub

3 years agoExpose AsyncBlockSourceResult and BlockSourceResult as pub
Valentine Wallace [Wed, 24 Mar 2021 20:03:36 +0000 (16:03 -0400)]
Expose AsyncBlockSourceResult and BlockSourceResult as pub

Useful for writing objects that implement BlockSource trait.

3 years agoAdds zbase32 encoding
Sergi Delgado Segura [Mon, 22 Mar 2021 10:14:25 +0000 (11:14 +0100)]
Adds zbase32 encoding

3 years agoReturn optional Transaction from register_output
Jeffrey Czyz [Wed, 10 Mar 2021 17:13:21 +0000 (09:13 -0800)]
Return optional Transaction from register_output

Electrum clients primarily operate by subscribing to notifications of
transactions by script pubkeys. Therefore, they will send filtered
transaction data without including dependent transactions. Outputs for
such transactions must be explicitly registered with these clients.

Therefore, upon block_connected, provide a mechanism for an Electrum-
backed chain::Filter to return new transaction data to scan.

3 years agoMerge pull request #846 from TheBlueMatt/2021-03-test-chains
Matt Corallo [Sat, 20 Mar 2021 04:03:27 +0000 (04:03 +0000)]
Merge pull request #846 from TheBlueMatt/2021-03-test-chains

Require syntactically-valid blockchains in functional and unit tests

3 years ago[functional tests] Drop unused disconnect_block utility 2021-03-test-chains
Matt Corallo [Thu, 18 Mar 2021 17:16:58 +0000 (13:16 -0400)]
[functional tests] Drop unused disconnect_block utility

This also reduces some needless clones and indirections.

3 years agoDrop height parameter from [dis]connect_block in functional tests
Matt Corallo [Thu, 18 Mar 2021 02:00:47 +0000 (22:00 -0400)]
Drop height parameter from [dis]connect_block in functional tests

3 years ago[tests] Demonstrate that the commit is trivially safe
Matt Corallo [Thu, 18 Mar 2021 00:42:59 +0000 (20:42 -0400)]
[tests] Demonstrate that the commit is trivially safe

See comment in the code, This commit exists only to aid reviewers.

3 years ago[tests] Drop redundant parameters from connect_blocks
Matt Corallo [Wed, 17 Mar 2021 03:22:59 +0000 (23:22 -0400)]
[tests] Drop redundant parameters from connect_blocks

3 years ago[test] Demonstrate that the next commit is trivially safe
Matt Corallo [Wed, 17 Mar 2021 03:24:41 +0000 (23:24 -0400)]
[test] Demonstrate that the next commit is trivially safe

See comment in the code. This commit exists only to aid reviewers.