rust-lightning
3 years agoFetch network graph cache and run benchmarks on CI 2021-02-route-bench
Matt Corallo [Mon, 15 Feb 2021 21:49:44 +0000 (16:49 -0500)]
Fetch network graph cache and run benchmarks on CI

3 years agoAdd a trivial benchmark of calculating routes on today's graph
Matt Corallo [Mon, 15 Feb 2021 21:49:02 +0000 (16:49 -0500)]
Add a trivial benchmark of calculating routes on today's graph

Sadly rust upstream never really figured out the benchmark story,
and it looks like the API we use here may not be long for this
world. Luckily, we can switch to criterion with largely the same
API if that happens before upstream finishes ongoing work with the
custom test framework stuff.

Sadly, it requires fetching the current network graph, which I did
using Val's route-testing script written to test the MPP router.

3 years agoDrop trailing semicolons which rustc nightly generates warnings for
Matt Corallo [Fri, 12 Feb 2021 21:06:14 +0000 (16:06 -0500)]
Drop trailing semicolons which rustc nightly generates warnings for

3 years agoMerge pull request #788 from TheBlueMatt/2020-02-concrete-bindings
Matt Corallo [Thu, 11 Feb 2021 04:31:43 +0000 (20:31 -0800)]
Merge pull request #788 from TheBlueMatt/2020-02-concrete-bindings

Concretize bindings templates

3 years agoUpdate auto-generated bindings 2020-02-concrete-bindings
Matt Corallo [Thu, 11 Feb 2021 03:25:47 +0000 (22:25 -0500)]
Update auto-generated bindings

3 years agoAdd additional Clone derives
Matt Corallo [Thu, 11 Feb 2021 03:25:42 +0000 (22:25 -0500)]
Add additional Clone derives

The only API change outside of additional derives is to change
the inner field in `DecodeError::Io()` to an `std::io::ErrorKind`
instead of an `std::io::Error`. While `std::io::Error` obviously
makes more sense in context, it doesn't support Clone, and the
inner error largely doesn't have a lot of value on its own.

3 years ago[bindings] Allow cloning opaque types when inner is NULL
Matt Corallo [Sat, 30 Jan 2021 22:15:22 +0000 (17:15 -0500)]
[bindings] Allow cloning opaque types when inner is NULL

Previously we'd segfault trying to deref the NULL page, but there
is no reason to not simply clone by creating another opaque instance
with a null inner. This comes up specifically when cloning
ChannelSigners as the pubkeys instance is NULL on construction
before get_pubkeys is called.

3 years ago[C++ bindings] Update demo app due to removed TupleTempl generics
Matt Corallo [Tue, 5 Jan 2021 02:08:53 +0000 (21:08 -0500)]
[C++ bindings] Update demo app due to removed TupleTempl generics

3 years ago[bindings] Drop some stale code from bindings generic generation
Matt Corallo [Tue, 5 Jan 2021 01:58:58 +0000 (20:58 -0500)]
[bindings] Drop some stale code from bindings generic generation

3 years ago[bindings] Move to manual write-out for Tuples, too
Matt Corallo [Wed, 3 Feb 2021 23:14:39 +0000 (18:14 -0500)]
[bindings] Move to manual write-out for Tuples, too

3 years ago[bindings] Move to manual write-out for Vec, too
Matt Corallo [Tue, 5 Jan 2021 00:26:12 +0000 (19:26 -0500)]
[bindings] Move to manual write-out for Vec, too

3 years ago[bindings] Concretize Result types without type aliasing
Matt Corallo [Mon, 4 Jan 2021 22:29:25 +0000 (17:29 -0500)]
[bindings] Concretize Result types without type aliasing

While the type aliasing trick works great for cbindgen,
wasm_bindgen doesn't support it and requires fully-concrete types.
In order to better support wasm_bindgen in the future, we do so
here, adding a function which manually writes out almost the exact
thing which was templated previously in concrete form.

As a nice side-effect, we no longer have to allocate and free a u8
for generic parameters which were `()` (though we still do in some
conversion functions, which we can get rid of when we similarly
concretize all generics fully).

3 years ago[bindings] Keep track of all types which derive[Clone]
Matt Corallo [Wed, 3 Feb 2021 22:46:29 +0000 (17:46 -0500)]
[bindings] Keep track of all types which derive[Clone]

3 years ago[bindings] Add additional clone methods on manually-defined types
Matt Corallo [Sat, 30 Jan 2021 22:19:33 +0000 (17:19 -0500)]
[bindings] Add additional clone methods on manually-defined types

3 years agoMerge pull request #787 from TheBlueMatt/2021-02-check-close-source
Matt Corallo [Wed, 10 Feb 2021 17:09:53 +0000 (09:09 -0800)]
Merge pull request #787 from TheBlueMatt/2021-02-check-close-source

3 years agoFix documentation on PeerHandleError 2021-02-check-close-source
Matt Corallo [Mon, 1 Feb 2021 01:53:28 +0000 (20:53 -0500)]
Fix documentation on PeerHandleError

3 years agoAdd test for error message hangline resulting in force-close
Matt Corallo [Sun, 7 Feb 2021 23:49:48 +0000 (18:49 -0500)]
Add test for error message hangline resulting in force-close

3 years agoCheck the PK of the source of an error before closing chans from it
Matt Corallo [Sat, 16 Jan 2021 02:34:17 +0000 (21:34 -0500)]
Check the PK of the source of an error before closing chans from it

When we receive an error message from a peer, it can indicate a
channel which we should close. However, we previously did not
check that the counterparty who sends us such a message is the
counterparty with whom we have the channel, allowing any
connected peer to make us force-close any channel we have as long
as they know the channel id.

This commit simply changes the force-close logic to check that the
sender matches the channel's counterparty node_id, though as noted
in #105, we eventually need to change the indexing anyway to allow
absurdly terrible peers to open channels with us.

Found during review of #777.

3 years agoMerge pull request #793 from galderz/t_double_validation_792
Matt Corallo [Fri, 5 Feb 2021 14:17:46 +0000 (06:17 -0800)]
Merge pull request #793 from galderz/t_double_validation_792

3 years agoUnknown bits feature only needs to be validated once #792
Galder Zamarreño [Fri, 5 Feb 2021 12:29:56 +0000 (13:29 +0100)]
Unknown bits feature only needs to be validated once #792

3 years agoMerge pull request #790 from bmancini55/sync_complete
Matt Corallo [Thu, 4 Feb 2021 17:18:52 +0000 (09:18 -0800)]
Merge pull request #790 from bmancini55/sync_complete

Interpret sync_complete in reply_channel_range

3 years agoMerge pull request #774 from jkczyz/2021-01-http-client
Matt Corallo [Thu, 4 Feb 2021 17:16:14 +0000 (09:16 -0800)]
Merge pull request #774 from jkczyz/2021-01-http-client

HTTP-based block source clients

3 years agoImplement BlockSource for REST and RPC clients
Jeffrey Czyz [Tue, 12 Jan 2021 07:33:42 +0000 (23:33 -0800)]
Implement BlockSource for REST and RPC clients

Interprets HTTP responses as either binary or JSON format, which are
then converted to the appropriate data types.

3 years agoAdd REST and RPC clients to lightning-block-sync
Jeffrey Czyz [Tue, 12 Jan 2021 00:07:47 +0000 (16:07 -0800)]
Add REST and RPC clients to lightning-block-sync

Implements a simple HTTP client that can issue GET and POST requests.
Used to implement REST and RPC clients, respectively. Both clients
support either blocking or non-blocking I/O.

3 years agoInterpret sync_complete in reply_channel_range
bmancini55 [Wed, 3 Feb 2021 16:34:48 +0000 (11:34 -0500)]
Interpret sync_complete in reply_channel_range

LN Spec PR #826 changes full_information to indicate completion of a
sequence of reply_channel_range messages.

3 years agoAdd lightning-block-sync package and library
Jeffrey Czyz [Mon, 11 Jan 2021 18:50:54 +0000 (10:50 -0800)]
Add lightning-block-sync package and library

Defines an interface and related types for fetching block headers and
data from a block source (e.g., Bitcoin Core). Used to keep lightning in
sync with chain activity.

3 years agoMerge pull request #768 from TheBlueMatt/2020-12-chanman-bindings-deser
Matt Corallo [Wed, 3 Feb 2021 15:43:34 +0000 (07:43 -0800)]
Merge pull request #768 from TheBlueMatt/2020-12-chanman-bindings-deser

Expose ChannelManager/Monitor read methods in bindings

3 years ago[bindings] Fix genbindings.sh compile issues on OSX 2020-12-chanman-bindings-deser
Matt Corallo [Wed, 3 Feb 2021 00:28:40 +0000 (19:28 -0500)]
[bindings] Fix genbindings.sh compile issues on OSX

There were two issues on OSX - we need to give gcc the clang
warnings flags because `gcc` *is* clang on OSX and we missed an
`-std=c++11` on one of the clang++ calls, causing compile failures.

3 years agoUpdate C++ bindings demo to use `ChannelManager` de/serialization
Matt Corallo [Thu, 31 Dec 2020 22:48:55 +0000 (17:48 -0500)]
Update C++ bindings demo to use `ChannelManager` de/serialization

This demonstrates (and tests) the newly-exposed `ChannelManager`
de/serialization functions. Best revewied with -b --color-moved.

3 years ago[C++ bindings demo] Add now-missing std::moves
Matt Corallo [Thu, 31 Dec 2020 21:45:55 +0000 (16:45 -0500)]
[C++ bindings demo] Add now-missing std::moves

3 years agoAuto-generated bindings updates
Matt Corallo [Mon, 4 Jan 2021 19:23:16 +0000 (14:23 -0500)]
Auto-generated bindings updates

3 years ago[C++ bindings] Add move-assign operator, require rvalue for move
Matt Corallo [Thu, 31 Dec 2020 20:34:50 +0000 (15:34 -0500)]
[C++ bindings] Add move-assign operator, require rvalue for move

This adds a move-assignment operator (`A& operator=(A&& o)`) to our
C++ wrapper classes as well as requiring an rvalue for the move
auto-convert operator (`operator CStruct()() &&`).

The second makes the C++ wrapper classes much easier to work with
by requiring an explicit `std::move` when the bindings will
automatically move a C++-wrapper object into a C object.

3 years ago[bindings] Use references in a few places instead of pointers
Matt Corallo [Thu, 31 Dec 2020 04:27:36 +0000 (23:27 -0500)]
[bindings] Use references in a few places instead of pointers

Previously, references and pointers ended up identical in C, so
there was little reason to differentiate. With the addition of
nullability annotations, there is a (very slight) reason to prefer
references, so use them in a few places where its a trivial change.

3 years ago[bindings] Use new non-null annotation feature in cbindgen
Matt Corallo [Thu, 31 Dec 2020 03:09:26 +0000 (22:09 -0500)]
[bindings] Use new non-null annotation feature in cbindgen

This adds a new annotation for objects we take by reference in the
C header indicating the pointers must not be null. We have to
disable some warning clang now dumps that we haven't annotated all
pointers, as cbindgen is not yet able to add a nullable annotation.

3 years ago[bindings] Don't require trait impl for-structs to have no generics
Matt Corallo [Thu, 31 Dec 2020 16:14:22 +0000 (11:14 -0500)]
[bindings] Don't require trait impl for-structs to have no generics

This (finally) exposes `ChannelManager`/`ChannelMonitor` _write
methods, which were (needlessly) excluded as the structs themselves
have generic parameters. Sadly, we also now need to parse
`(C-not exported)` doc comments on impl blocks as we otherwise try
to expose _write methods for `&Vec<RouteHop>`, which doesn't work
(and isn't particularly interesting for users anyway). We add such
doc comments there.

3 years ago[bindings] Implement ReadableArgs mapping, try impl mapping for ()s
Matt Corallo [Thu, 31 Dec 2020 00:47:32 +0000 (19:47 -0500)]
[bindings] Implement ReadableArgs mapping, try impl mapping for ()s

This is most of the code to expose `ChannelManager`/`ChannelMonitor`
deserialization in our C bindings, using the new infrastructure to
map types in `maybe_convert_trait_impl` and passing generics in
from the callsites.

We also call `maybe_convert_trait_impl` for tuple types, as the
`ChannelManager`/`ChannelMonitor` deserialization returns a
`(BlockHash, T)` to indicate the block hash at which users need to
start resyncing the chain.

The final step to expose them is in the next commit.

3 years ago[bindings] Allow `write_rust_type` to handle leading-colon paths
Matt Corallo [Thu, 31 Dec 2020 00:46:39 +0000 (19:46 -0500)]
[bindings] Allow `write_rust_type` to handle leading-colon paths

It just stubs out to `write_rust_path` in this case anyway, which
handles leading-colons just fine, so no need to panic on them.

3 years ago[bindings] Use common conv in `_write` impls, drop type restrictions
Matt Corallo [Wed, 30 Dec 2020 22:50:43 +0000 (17:50 -0500)]
[bindings] Use common conv in `_write` impls, drop type restrictions

This expands the manual implementation logic for `*_write` and
`*_read` methods to most types, converting the `*_write` path to
the common type-conversion logic to ensure it works.

Note that `*_write_void` is still only implemented for has-inner
types, as its unclear what the `void*` would point to for others.

3 years ago[bindings] Convert manual `_read` implementations to return Results
Matt Corallo [Wed, 30 Dec 2020 22:30:59 +0000 (17:30 -0500)]
[bindings] Convert manual `_read` implementations to return Results

Previously, manual `*_read` implementations were only defined for
types with inner fields, which were set to NULL to indicate read
errors. This prevents exposing `*_read` for several other types,
including tuples (which are needed for `ChannelManager`/
`ChannelMonitors`) and enums (which includes `Event`s, though users
likely never need to call that directly). Further, this means we
don't expose the actual error enum (which is likely no big deal,
but is still nice).

Here, we instead create the `Result<Object, DecodeError>` type and
then pass it through the normal type conversion functions, giving
us access to any types which we can convert normally.

3 years ago[bindings] Pipe errors back from write_template_constructor
Matt Corallo [Wed, 30 Dec 2020 20:25:02 +0000 (15:25 -0500)]
[bindings] Pipe errors back from write_template_constructor

We can fail to resolve a part of a tuple, resulting in a panic in
write_template_constructor even if we're calling
`understood_c_type` with the intent of figuring out whether we can
print a type at all. Instead, we should pipe errors back and let
`understood_c_type` return false as a result.

3 years agoMerge pull request #767 from TheBlueMatt/2020-12-chansigner-read-bindings
Matt Corallo [Wed, 3 Feb 2021 03:49:28 +0000 (19:49 -0800)]
Merge pull request #767 from TheBlueMatt/2020-12-chansigner-read-bindings

Handle `read_chan_signer` in bindings (761 bindings updates)

3 years agoMerge pull request #781 from TheBlueMatt/2021-01-tokio-1
Matt Corallo [Tue, 2 Feb 2021 22:10:05 +0000 (14:10 -0800)]
Merge pull request #781 from TheBlueMatt/2021-01-tokio-1

Update tokio to 1.0

3 years ago[bindings] Update C++ demo for new NetGraphMsgHandler::new() params 2020-12-chansigner-read-bindings
Matt Corallo [Fri, 1 Jan 2021 01:37:27 +0000 (20:37 -0500)]
[bindings] Update C++ demo for new NetGraphMsgHandler::new() params

3 years agoUpdate auto-generated bindings, including bumping cbindgen version
Matt Corallo [Tue, 2 Feb 2021 21:53:33 +0000 (16:53 -0500)]
Update auto-generated bindings, including bumping cbindgen version

3 years ago[bindings] Allow unused fns that the bindings can call but don't
Matt Corallo [Mon, 4 Jan 2021 20:25:23 +0000 (15:25 -0500)]
[bindings] Allow unused fns that the bindings can call but don't

We no longer have any public `Option<Signatures>` in our code, and
thus get warnings that the two functions which support it are
unused. Instead of removing support for them (which we may need in
the future), we add `#[allow(unused)]`.

3 years ago[bindings] Drop useless `#[no_mangle]` from `pub type` definitions
Matt Corallo [Wed, 30 Dec 2020 20:14:42 +0000 (15:14 -0500)]
[bindings] Drop useless `#[no_mangle]` from `pub type` definitions

Newer rustc complains that "attribute should be applied to a function or
static"

3 years ago[bindings] Be explicit with take_ptr calls
Matt Corallo [Wed, 25 Nov 2020 18:25:18 +0000 (13:25 -0500)]
[bindings] Be explicit with take_ptr calls

If you try to call take_ptr on a pointer to an object which
implements Deref, rustc hits the deref recursion limit.

To avoid this, we can explicitly tell rustc that we want to treat
the pointer as a pointer and call take_ptr on it directly.

3 years ago[bindings] Separate take_ptr and take_inner
Matt Corallo [Wed, 25 Nov 2020 18:20:15 +0000 (13:20 -0500)]
[bindings] Separate take_ptr and take_inner

It is confusing to have two utility methods on different classes
of types which do two different, but related, things with the same
name.

3 years ago[bindings] Support exposing `bitcoin::OutPoint`s as our common type
Matt Corallo [Mon, 4 Jan 2021 20:12:37 +0000 (15:12 -0500)]
[bindings] Support exposing `bitcoin::OutPoint`s as our common type

3 years ago[bindings] Figure out in-file structs and enums before processing
Matt Corallo [Mon, 4 Jan 2021 20:52:18 +0000 (15:52 -0500)]
[bindings] Figure out in-file structs and enums before processing

Previously, types which were declared and used in the same file
would fail if the use was before the declaration. This makes sense
in a few cases where a "parent" class returns a reference to a
"child" class and there's no reason we shouldn't support it.

This change adds a second pass to our file processing which gathers
the structs and enums whicha re declared in the file and adds them
to the type resolver first, before doing the real conversion.

3 years ago[bindings] Don't export new functions with unexportable types
Matt Corallo [Mon, 4 Jan 2021 19:15:36 +0000 (14:15 -0500)]
[bindings] Don't export new functions with unexportable types

`CommitmentTransaction::new_with_auxiliary_htlc_data()` includes a
unbounded generic parameter which we can't concretize and it's of
limited immediate use for users in any case. We should eventually
add a non-generic version which uses `()` for the generic but that
can come later.

`CommitmentTransaction::htlcs()` returns a reference to a Vec,
which we cannot currently map. It should, however, be exposed to
users, so in the future we'll need to have a duplication function
which returns Vec of references or a cloned Vec.

3 years ago[bindings] Expose secp256k1::Message as ThirtyTwoBytes
Matt Corallo [Mon, 4 Jan 2021 19:13:59 +0000 (14:13 -0500)]
[bindings] Expose secp256k1::Message as ThirtyTwoBytes

3 years ago[bindings] Add support for mapping Write as a supertrait
Matt Corallo [Wed, 25 Nov 2020 17:22:31 +0000 (12:22 -0500)]
[bindings] Add support for mapping Write as a supertrait

3 years ago[bindings] Handle MessageSendEventsProvider impl blocks in a util fn
Matt Corallo [Wed, 25 Nov 2020 17:22:03 +0000 (12:22 -0500)]
[bindings] Handle MessageSendEventsProvider impl blocks in a util fn

Instead of having manually-written lightning-specific code in a
supertrait walk in the middle of a large function, move it to a
utility function up next to the other manually-written-impl-block
functions.

3 years ago[bindings] Always resolve supertrait types during supertrait walks
Matt Corallo [Wed, 25 Nov 2020 16:59:58 +0000 (11:59 -0500)]
[bindings] Always resolve supertrait types during supertrait walks

This is a rather trivial cleanup to ensure we always have the full
path when we walk supertraits even if the supertrait is specified
with only a single ident.

3 years ago[bindings] Pass GenericTypes through to write_template_generic
Matt Corallo [Wed, 25 Nov 2020 02:52:32 +0000 (21:52 -0500)]
[bindings] Pass GenericTypes through to write_template_generic

With this we support types like `Result<Self::AssociatedType, ()>`.

3 years ago[bindings] Un-special-case returning an associated type
Matt Corallo [Wed, 25 Nov 2020 19:46:21 +0000 (14:46 -0500)]
[bindings] Un-special-case returning an associated type

In the case that we return an associated type to C (ie when
implementing a trait which returns an associated type, we had to
convert the Rust-returned concrete Rust type to the C trait struct),
we had code to manually create the neccessary trait struct at the
return site.

This was special-cased in the method-body-writing function instead
of letting the type conversion logic handle it. As a result, we are
unable to do the same conversion when it appears in a different
context, for example inside of a generic like
`Result<Self::AssocType, ErrorType>`.

To solve this, we do the actual work in a
`impl From<nativeType> for CTraitStruct` implementation and then
call `into()` from within the type conversion logic.

3 years ago[bindings] Replace associated_types HashMaps with common Generics
Matt Corallo [Wed, 25 Nov 2020 02:27:52 +0000 (21:27 -0500)]
[bindings] Replace associated_types HashMaps with common Generics

Instead of handling associated types separately, we can just shove
them into the same generics resolution logic we use for template
types. While we should probably have some precedence logic,
aliasing type names seems like a bad idea anyway so no effort is
made to handle it.

This removes a good chunk of code and, more importantly, tees us up
for supporting `Type<Self::AssociatedType>`-style generics.

3 years agoDrop spurious semicolon that new rustc complains about 2021-01-tokio-1
Matt Corallo [Thu, 28 Jan 2021 04:01:37 +0000 (23:01 -0500)]
Drop spurious semicolon that new rustc complains about

3 years ago[bindings] Use consistent imports for MessageSendEvents traits
Matt Corallo [Fri, 1 Jan 2021 01:19:21 +0000 (20:19 -0500)]
[bindings] Use consistent imports for MessageSendEvents traits

Our bindings generator is braindead with respect to the idents
used in a trait definition - it treats them as if they were used
where the trait is being used, instead of where the trait is
defined. Thus, if the idents used in a trait definition are not
also imported the same in the files where the traits are used, we
will claim the idents are bogus.

I spent some time trying to track the TypeResolvers globally
through the entire conversion run so that we could use the original
file's TypeResolver later when using the trait, but it is somewhat
of a lifetime mess. While likely possible, import consistency is
generally the case anyway, so unless it becomes more of an issue in
the future, it likely makes the most sense to just keep imports
consistent.

This commit keeps imports consistent across trait definition files
around `MessageSendEvent` and `MessageSendEventsProvider`.

3 years agostrip binaries in genbindings.sh for better size comparison
Matt Corallo [Thu, 26 Nov 2020 00:59:13 +0000 (19:59 -0500)]
strip binaries in genbindings.sh for better size comparison

3 years agoMerge pull request #783 from ariard/2021-01-disconnect-node-id
Matt Corallo [Mon, 1 Feb 2021 19:46:40 +0000 (11:46 -0800)]
Merge pull request #783 from ariard/2021-01-disconnect-node-id

Add PeerManager::disconnect_node_id()

3 years agoAdd PeerManager::disconnect_by_node_id()
Antoine Riard [Thu, 28 Jan 2021 22:45:36 +0000 (17:45 -0500)]
Add PeerManager::disconnect_by_node_id()

This public method allows a client to easily disconnect peers while only
owning its node id. It will clean up peer state and disconnect properly
its descriptor.

3 years agoFix codecov by calling the new binary paths from rust 1.45
Matt Corallo [Tue, 26 Jan 2021 22:17:01 +0000 (17:17 -0500)]
Fix codecov by calling the new binary paths from rust 1.45

Rustc 1.45 moved the paths to test binaries, so we need to update
our CI scripts to run the correct ones under kcov.

The solution to this was pointed out by Val at
https://github.com/rust-bitcoin/rust-lightning/pull/774#issuecomment-763250623

3 years agoBump MSRV for net-tokio to 1.45 as tokio 1.0 req very recent rustc
Matt Corallo [Tue, 26 Jan 2021 21:21:03 +0000 (16:21 -0500)]
Bump MSRV for net-tokio to 1.45 as tokio 1.0 req very recent rustc

3 years agoUpdate tokio to 1.0
Matt Corallo [Tue, 26 Jan 2021 20:38:19 +0000 (15:38 -0500)]
Update tokio to 1.0

This requires ensuring TcpStreams are set in nonblocking mode as
tokio doesn't handle this for us anymore, so we adapt the public
API to just accept std TcpStreams instead of an extra conversion
hop. Luckily converting them is cheap.

3 years agoMerge pull request #764 from lightning-signer/revoke-enforcement
Matt Corallo [Mon, 25 Jan 2021 17:06:43 +0000 (09:06 -0800)]
Merge pull request #764 from lightning-signer/revoke-enforcement

Revocation enforcement

3 years agoMerge pull request #777 from sr-gi/cm-force-close-checks
Matt Corallo [Mon, 25 Jan 2021 15:25:25 +0000 (07:25 -0800)]
Merge pull request #777 from sr-gi/cm-force-close-checks

Makes ChannelManager::force_close_channel fail for unknown chan_ids

3 years agoLet some tests disable revocation policy check
Devrandom [Thu, 14 Jan 2021 01:36:07 +0000 (17:36 -0800)]
Let some tests disable revocation policy check

When simulating a bad actor that broadcasts a revoked tx, the policy check would otherwise panic.

3 years agoMakes ChannelManager::force_close_channel fail for unknown chan_ids
Sergi Delgado Segura [Thu, 14 Jan 2021 16:05:38 +0000 (17:05 +0100)]
Makes ChannelManager::force_close_channel fail for unknown chan_ids

ChannelManager::force_close_channel does not fail if a non-existing channel id is being passed, making it hard to catch from an API point of view.

Makes force_close_channel return in the same way close_channel does so the user calling the method with an unknown id can be warned.

3 years agoFix fuzzing issue with revocation
Devrandom [Sat, 5 Dec 2020 17:56:27 +0000 (18:56 +0100)]
Fix fuzzing issue with revocation

3 years agoRevocation enforcement in signer
Devrandom [Sun, 12 Jul 2020 16:00:10 +0000 (09:00 -0700)]
Revocation enforcement in signer

We want to make sure that we don't sign revoked transactions.

Given that ChannelKeys are not singletons and revocation enforcement is stateful,
we need to store the revocation state in KeysInterface.

3 years agoUse TestKeysInterface in functional tests
Devrandom [Wed, 2 Dec 2020 17:50:17 +0000 (18:50 +0100)]
Use TestKeysInterface in functional tests

This allows stateful validation in EnforcingChannelKeys

3 years agoMerge pull request #770 from lightning-signer/holder-htlc-sigs
Matt Corallo [Mon, 18 Jan 2021 18:49:45 +0000 (10:49 -0800)]
Merge pull request #770 from lightning-signer/holder-htlc-sigs

Fold sign_holder_commitment_htlc_transactions into sign_holder_commitment

3 years agoSimplify handling of OnChainTx.holder_commitment
Devrandom [Thu, 14 Jan 2021 21:45:31 +0000 (13:45 -0800)]
Simplify handling of OnChainTx.holder_commitment

It is no longer optional since it is available at construction time.

3 years agoPanic if signing fails in OnChainTx
Devrandom [Tue, 5 Jan 2021 22:13:05 +0000 (14:13 -0800)]
Panic if signing fails in OnChainTx

Signatures in OnChainTx must not fail, or we stand to lose funds

3 years agoFold sign_holder_commitment_htlc_transactions into sign_holder_commitment
Devrandom [Tue, 5 Jan 2021 19:50:54 +0000 (11:50 -0800)]
Fold sign_holder_commitment_htlc_transactions into sign_holder_commitment

Signing the commitment transaction is almost always followed by signing the attached HTLC transactions, so fold the signing operations into a single method.

3 years agoMerge pull request #776 from valentinewallace/update-readme
Matt Corallo [Mon, 18 Jan 2021 18:13:11 +0000 (10:13 -0800)]
Merge pull request #776 from valentinewallace/update-readme

Update readme

3 years agoMerge pull request #772 from ariard/2021-01-getting-project-context
Matt Corallo [Mon, 18 Jan 2021 17:32:45 +0000 (09:32 -0800)]
Merge pull request #772 from ariard/2021-01-getting-project-context

Add GLOSSARY.md and more

3 years agoExtend Getting Started with GLOSSARY/meeting minutes in CONTRIBUTING.md
Antoine Riard [Sat, 9 Jan 2021 00:53:22 +0000 (19:53 -0500)]
Extend Getting Started with GLOSSARY/meeting minutes  in CONTRIBUTING.md

3 years agoAdd a GLOSSARY.md
Antoine Riard [Sat, 9 Jan 2021 00:51:20 +0000 (19:51 -0500)]
Add a GLOSSARY.md

Closes #766

Contributions by Devrandom <c1.devrandom@niftybox.net>

3 years agoUpdate README with RL customization details
Valentine Wallace [Tue, 12 Jan 2021 17:07:18 +0000 (12:07 -0500)]
Update README with RL customization details

3 years agoMerge pull request #771 from jkczyz/2021-01-bolt3-test-vectors
Matt Corallo [Wed, 13 Jan 2021 22:40:41 +0000 (14:40 -0800)]
Merge pull request #771 from jkczyz/2021-01-bolt3-test-vectors

Add BOLT 3 test vector for CLTV tiebreaker

3 years agoAdd BOLT 3 test vector for CLTV tiebreaker
Jeffrey Czyz [Fri, 8 Jan 2021 17:49:48 +0000 (09:49 -0800)]
Add BOLT 3 test vector for CLTV tiebreaker

The test vector was added in https://github.com/lightningnetwork/lightning-rfc/pull/539.

3 years agoMerge pull request #761 from TheBlueMatt/2020-10-chansigner-no-ser
Matt Corallo [Fri, 8 Jan 2021 16:59:19 +0000 (08:59 -0800)]
Merge pull request #761 from TheBlueMatt/2020-10-chansigner-no-ser

Add a new method `read_chan_signer` to `KeysInterface`

3 years agoMerge pull request #769 from sr-gi/copy-trait-config
Matt Corallo [Fri, 8 Jan 2021 16:48:53 +0000 (08:48 -0800)]
Merge pull request #769 from sr-gi/copy-trait-config

Adds Copy to ChannelHandshakeConfig and UserConfig

3 years agoAdds Copy to ChannelHandshakeConfig and UserConfig
Sergi Delgado Segura [Tue, 5 Jan 2021 19:20:35 +0000 (20:20 +0100)]
Adds Copy to ChannelHandshakeConfig and UserConfig

This commits adds Copy to ChannelHandshakeConfig and UserConfig for consistency with the rest of config structs.

3 years agoUse `KeysInterface::read_chan_signer` for all channel keys deser 2020-10-chansigner-no-ser
Matt Corallo [Wed, 25 Nov 2020 21:18:12 +0000 (16:18 -0500)]
Use `KeysInterface::read_chan_signer` for all channel keys deser

This drops any direct calls to a generic `ChannelKeys::read()` and
replaces it with the new `KeysInterface::read_chan_signer()`. Still,
under the hood all of our own `KeysInterface::read_chan_signer()`
implementations simply call out to a `Readable::read()` implemention.

3 years agoExpose test_utils to fuzztarget (in addition to _test_utils feature)
Matt Corallo [Wed, 25 Nov 2020 22:50:38 +0000 (17:50 -0500)]
Expose test_utils to fuzztarget (in addition to _test_utils feature)

3 years agoAdd a new method `read_chan_signer` to `KeysInterface`
Matt Corallo [Wed, 25 Nov 2020 17:23:47 +0000 (12:23 -0500)]
Add a new method `read_chan_signer` to `KeysInterface`

This adds a new method to the general cross-channel `KeysInterface`
which requires it to handle the deserialization of per-channel
signer objects. This allows the deserialization of per-channel
signers to have more context available, which, in the case of the
C bindings, includes the actual KeysInterface information itself.

3 years agoUse Writeable for ChannelMonitor instead of a specific function.
Matt Corallo [Wed, 25 Nov 2020 20:03:19 +0000 (15:03 -0500)]
Use Writeable for ChannelMonitor instead of a specific function.

There's no reason to have ChannelMonitor::write_for_disk instead of
just using the Writeable trait anymore. Previously, it was used to
differentiate with `write_for_watchtower`, but support for
watchtower-mode ChannelMonitors was never completed and the partial
bits were removed long ago.

This has the nice benefit of hitting the custom Writeable codepaths
in C bindings instead of trying to hit trait-generics paths.

3 years agoUniversally Require Writeable for ChannelKeys
Matt Corallo [Wed, 25 Nov 2020 17:23:37 +0000 (12:23 -0500)]
Universally Require Writeable for ChannelKeys

It doesn't make sense to ever build a lightning node which doesn't
ever write ChannelMonitors to disk, so having a ChannelKeys object
which doesn't implement Writeable is nonsense.

Here we require Writeable for all ChannelKeys objects, simplifying
code generation for C bindings somewhat.

3 years agoCache fields instead of storing a ChannelKeys in ChannelMonitor
Matt Corallo [Fri, 30 Oct 2020 21:25:15 +0000 (17:25 -0400)]
Cache fields instead of storing a ChannelKeys in ChannelMonitor

We only actually use two of the fields in ChannelKeys inside a
ChannelMonitor - the holder revocation_basepoint and the
derivation parameters. Both are relatively small, so there isn't
a lot of reason to hold a full copy of the ChannelKeys (with most
of the interaction with it being inside the OnchainTxHandler).

Further, this will avoid calling read on a `ChannelKeys` twice,
which is a somewhat strange API quirk.

3 years agoMerge pull request #742 from lightning-signer/tx-phase2
Matt Corallo [Mon, 4 Jan 2021 17:11:11 +0000 (09:11 -0800)]
Merge pull request #742 from lightning-signer/tx-phase2

Introduce CommitmentTransactionInfo

3 years agoUse new get_commitment_transaction_number_obscure_factor utility function
Devrandom [Wed, 30 Dec 2020 03:26:49 +0000 (19:26 -0800)]
Use new get_commitment_transaction_number_obscure_factor utility function

3 years agoIntroduce CommitmentTransaction, ChannelTransactionParameters
Devrandom [Thu, 15 Oct 2020 11:45:18 +0000 (13:45 +0200)]
Introduce CommitmentTransaction, ChannelTransactionParameters

CommitmentTransaction maintains the per-commitment transaction fields needed to construct the associated bitcoin transactions (commitment, HTLC).  It replaces passing around of Bitcoin transactions.  The ChannelKeys API is modified accordingly.

By regenerating the transaction when implementing a validating external signer, this allows a higher level of assurance that all relevant aspects of the transactions were checked for policy violations.

ChannelTransactionParameters replaces passing around of individual per-channel fields that are needed to construct Bitcoin transactions.

Eliminate ChannelStaticData in favor of ChannelTransactionParameters.

Use counterparty txid instead of tx in channelmonitor update.

3 years agoUnwrap unneeded macros
Devrandom [Mon, 19 Oct 2020 08:27:18 +0000 (10:27 +0200)]
Unwrap unneeded macros

3 years agoMerge pull request #736 from bmancini55/gossip_queries
Matt Corallo [Tue, 15 Dec 2020 19:17:11 +0000 (11:17 -0800)]
Merge pull request #736 from bmancini55/gossip_queries

Initiate gossip_queries

3 years agoFix comment for sync_routing_table
bmancini55 [Tue, 15 Dec 2020 18:48:14 +0000 (13:48 -0500)]
Fix comment for sync_routing_table

Corrects the comment for sync_routing_table in RoutingMessageHandler to
be less prescriptive about the implementor's actions.

3 years agoRemove should_request_full_sync from RoutingMessageHandler
bmancini55 [Wed, 9 Dec 2020 20:06:54 +0000 (15:06 -0500)]
Remove should_request_full_sync from RoutingMessageHandler

This method was used to set the initial_routing_sync flag when sending
an outbound Init message to a peer. Since we are now relying on
gossip_queries instead of initial_routing_sync, synchronization can be
fully encapsulate into RoutingMessageHandler via sync_routing_table.

This commit removes should_request_full_sync from the trait
RoutingMessageHandler. The implementation is still used in
NetGraphMsgHandler and has been converted into a private method instead
of a trait function.