Commit graph

2011 commits

Author SHA1 Message Date
Matt Corallo
7caadd446b
Merge pull request #816 from valentinewallace/remove-simple-outer-arcs
Remove simple outer arcs
2021-03-02 16:02:44 -08:00
Matt Corallo
81c6bdc953
Merge pull request #814 from TheBlueMatt/2021-03-optional-handlers
Provide Dummy routing and channel message handlers for users
2021-03-02 07:00:46 -08:00
Matt Corallo
e241ca4339
Merge pull request #813 from jkczyz/2021-02-channel-monitor-mutex
Use interior mutability in ChannelMonitor
2021-03-02 07:00:20 -08:00
Jeffrey Czyz
e8ea0d9f04
Implement chain::Listen without using RefCell
The implementation of chain::Listen for ChannelMonitor required using a
RefCell since its block_connected method required a mutable borrow. This
is no longer the case since ChannelMonitor now uses interior mutability
via a Mutex. So the RefCell is no longer needed.
2021-03-01 22:12:26 -08:00
Jeffrey Czyz
389c4ad6fa
Change Mutex to RwLock in ChainMonitor
Now that ChannelMonitor uses an internal Mutex to support interior
mutability, ChainMonitor can use a RwLock to manage its ChannelMonitor
map. This allows parallelization of update_channel operations since an
exclusive lock only needs to be held when adding to the map in
watch_channel.
2021-03-01 22:12:26 -08:00
Jeffrey Czyz
8e558feb4b
Use consistent variable naming in ChainMonitor 2021-03-01 22:12:26 -08:00
Jeffrey Czyz
b0978a86be
Move ChannelMonitor state behind a Mutex
ChainMonitor accesses a set of ChannelMonitors behind a single Mutex.
As a result, update_channel operations cannot be parallelized. It also
requires using a RefCell around a ChannelMonitor when implementing
chain::Listen.

Moving the Mutex into ChannelMonitor avoids these problems and aligns it
better with other interfaces. Note, however, that get_funding_txo and
get_outputs_to_watch now clone the underlying data rather than returning
references.
2021-03-01 22:12:26 -08:00
Matt Corallo
d95f14568b Add utility constructors to PeerHandler to use a dummy handler 2021-03-01 20:23:54 -05:00
Matt Corallo
825a238a2c Provide Dummy routing and channel message handlers for users
We currently "support" not having a router or channel in memory by
forcing users to implement the same, but its trivial to provide our
own dummy implementations.
2021-03-01 20:23:54 -05:00
Matt Corallo
59d2040c74
Merge pull request #811 from TheBlueMatt/2021-02-bindings-rust-bump
Update bindings for new Listen interface
2021-03-01 15:35:35 -08:00
Matt Corallo
ee9ceb42b1 Add simple README about our C bindings generation stuff 2021-03-01 18:07:29 -05:00
Matt Corallo
f2e4f8a229 [bindings] Build a wasm32-wasi library in genbindings.sh
This will switch to use the clang/C WASM ABI instead of the
wasm_bindgen WASM ABI as of rustc 1.51 (or nightly since [1]),
allowing us to link C and Rust code in a single wasm binary.

[1] https://github.com/rust-lang/rust/pull/79998
2021-03-01 18:07:29 -05:00
Matt Corallo
808db58578 Update auto-generated bindings 2021-02-28 19:44:45 -05:00
Matt Corallo
6dd9c2e97c [bindings] Be explicit when calling trait methods in generated code
For ChannelManager, at least, we have two separate functions called
block_connected, one in the Listen trait, one in the struct, we
need to be explicit with which one we're trying to call.
2021-02-28 19:44:45 -05:00
Matt Corallo
c21b866c60 Fix doc typo introduced in the ChannelKeys->Sign renaming 2021-02-28 19:44:45 -05:00
Matt Corallo
cd0b212e4d [bindings] Use global context for secp256k1
Note that this uses https://github.com/rust-bitcoin/rust-secp256k1/pull/279
2021-02-28 19:44:45 -05:00
Matt Corallo
9fba7c92ad
Merge pull request #802 from TheBlueMatt/2021-01-update-rust-bitcoin
Update rust-bitcoin and add secp256k1 context randomization
2021-02-28 16:43:08 -08:00
Matt Corallo
beb88e69a9
Merge pull request #806 from valentinewallace/monitor-data-persistence-path
persist: Persist ChannelMonitors in their own directory.
2021-02-27 16:34:54 -08:00
Matt Corallo
ea48a5a089 Rebuild full_stack_target test vector for new secp256k1 fuzz req 2021-02-26 23:47:03 -05:00
Matt Corallo
c5c0abb88d Log full signed remote commitment transaction hex in channel
This is useful when rebuilding the full_stack_target test vector
2021-02-26 23:47:03 -05:00
Matt Corallo
1521633ca2 Randomize secp contexts for marginally better sidechannel resistance 2021-02-26 23:47:03 -05:00
Matt Corallo
33da665647 Use lowmemory mode for secp256k1 fuzzing, reducing memcpy time 2021-02-26 23:47:03 -05:00
Matt Corallo
4594f6eee5 Use rust-secp256k1 PR 282 and bitcoin_hashes PR 111 in fuzzing 2021-02-26 23:47:03 -05:00
Valentine Wallace
a2d9fca9d5
SimpleArcPeerManager type: remove outer Arc for flexibility 2021-02-26 17:58:56 -05:00
Valentine Wallace
eecc3b7223
SimpleArcChannelManager type: remove outer Arc for flexibility 2021-02-26 17:56:53 -05:00
Matt Corallo
9b7609a8c5 Apply --cfg=fuzzing when fuzzing, as required by new secp256k1
Note that rust-fuzz wrappers (including honggfuzz) already apply
this for us.
2021-02-26 15:15:18 -05:00
Matt Corallo
a51d5cef58 Update rust-bitcoin 2021-02-26 15:15:18 -05:00
Valentine Wallace
bfaec717ae
persist: Persist ChannelMonitors in their own directory. 2021-02-26 12:38:47 -05:00
Matt Corallo
e77b16049b
Merge pull request #791 from jkczyz/2021-01-spv-client
SPV client utility for syncing a lightning node
2021-02-26 07:54:01 -08:00
Jeffrey Czyz
8bfdfdc9e4
Utility for syncing a set of chain listeners
Add a utility for syncing a set of chain listeners to a common chain
tip. Required to use before creating an SpvClient when the chain
listener used with the client is actually a set of listeners each of
which may have had left off at a different block. This would occur when
the listeners had been persisted individually at different frequencies
(e.g., a ChainMonitor's individual ChannelMonitors).
2021-02-26 00:54:43 -06:00
Jeffrey Czyz
8505382b19
Add SpvClient used to poll for the best chain tip
Adds a lightweight client for polling one or more block sources for the
best chain tip. Notifies listeners of blocks connected or disconnected
since the last poll. Useful for keeping a Lightning node in sync with
the chain.
2021-02-26 00:54:42 -06:00
Jeffrey Czyz
b1ecfe705d
Add ChainNotifier and define ChainListener trait
Add an interface for being notified of block connected and disconnected
events, along with a notifier for generating such events. Used while
polling block sources for a new tip in order to feed these events into
ChannelManager and ChainMonitor.
2021-02-26 00:54:42 -06:00
Jeffrey Czyz
05ec06129c
Add ChainPoller implementation of Poll trait
ChainPoller defines a strategy for polling a single BlockSource. It
handles validating chain data returned from the BlockSource. Thus, other
implementations of Poll must be defined in terms of ChainPoller.
2021-02-26 00:54:42 -06:00
Jeffrey Czyz
7d6fce7802
Define a Poll trait as an adaptor on BlockSource
SPV clients need to poll one or more block sources for the best chain
tip and to retrieve related chain data. The Poll trait serves as an
adaptor interface for BlockSource. Implementations may define an
appropriate polling strategy.
2021-02-26 00:54:41 -06:00
Matt Corallo
ad09a2f004
Merge pull request #794 from galderz/t_opt_shutdown_anysegwit_780
Add support for `opt_shutdown_anysegwit` feature #780
2021-02-25 07:34:16 -08:00
Galder Zamarreño
24ed1dc2ec Add support for opt_shutdown_anysegwit feature #780
* Implemented protocol.
* Made feature optional.
* Verify that the default value is true.
* Verify that on shutdown,
if Channel.supports_shutdown_anysegwit is enabled,
the script can be a witness program.
* Added a test that verifies that a scriptpubkey
for an unreleased segwit version is handled successfully.
* Added a test that verifies that
if node has op_shutdown_anysegwit disabled,
a scriptpubkey with an unreleased segwit version on shutdown
throws an error.
* Added peer InitFeatures to handle_shutdown
* Check if shutdown script is valid when given upfront.
* Added a test to verify that an invalid test results in error.
* Added a test to check that if a segwit script with version 0 is provided,
the updated anysegwit check detects it and returns unsupported.
* An empty script is only allowed when sent as upfront shutdown script,
so make sure that check is only done for accept/open_channel situations.
* Instead of reimplementing a variant of is_witness_script,
just call it and verify that the witness version is not 0.
2021-02-25 14:28:08 +01:00
Matt Corallo
d6f41d3c0b
Merge pull request #803 from TheBlueMatt/2021-02-derives
Standardize trait derives in network message and graph objects
2021-02-22 15:31:46 -08:00
Matt Corallo
c2297353b5 Update auto-generated bindings 2021-02-22 11:48:24 -05:00
Matt Corallo
4b04f3ff1e Allow cloning NetworkGraphs 2021-02-22 11:44:22 -05:00
Matt Corallo
8051fb0118 Standardize trait derives in network graph objects
In general, trivial structs that have no inner logic can/should
all derive, at least, `Clone, Debug, PartialEq`.
2021-02-22 11:44:22 -05:00
Matt Corallo
9a5d846c9e Standardize trait derives in network message objects
In general, trivial structs that have no inner logic can/should
all derive, at least, `Clone, Debug, PartialEq`.
2021-02-22 11:44:22 -05:00
Matt Corallo
94bb0c9128
Merge pull request #799 from TheBlueMatt/2021-02-chansigner-rename
Rename ChannelKeys -> Sign and generic it consistently
2021-02-22 08:44:00 -08:00
Matt Corallo
4b6f0a3b26 Further rename chan_keys variables to signers 2021-02-20 10:06:22 -05:00
Matt Corallo
fc416d6295 Update C++ bindings demo with new struct naming 2021-02-20 10:06:22 -05:00
Matt Corallo
aa3f84123d Update auto-generated bindings 2021-02-20 10:06:22 -05:00
Matt Corallo
aa127f55ed Use ChannelSigner instead of ChanSigner for type parameters 2021-02-19 16:04:19 -05:00
Matt Corallo
523fcb6f3f Change Persist's Sign from an associated type to a generic param 2021-02-19 16:04:19 -05:00
Matt Corallo
20a25967ef Use signer instead of keys_storage in OnchainTx to hold Sign 2021-02-19 15:54:43 -05:00
Matt Corallo
ff00f6f886 Rename ChannelKeys -> Sign and generic it consistently
The `ChannelKeys` object really isn't about keys at all anymore,
its all about signing. At the same time, we rename the type aliases
used in traits from both `ChanKeySigner` and `Keys` to just
`Signer` (or, in contexts where Channel isnt clear, `ChanSigner`).
2021-02-19 15:54:41 -05:00
Matt Corallo
ee68ffa5fd
Merge pull request #801 from TheBlueMatt/2021-02-789-bindings
Bindings updates for 789
2021-02-19 12:42:17 -08:00