Matt Corallo [Mon, 14 Sep 2020 01:26:16 +0000 (18:26 -0700)]
Merge pull request #688 from TheBlueMatt/2020-09-dev-docs
Add developer guideline notes for C/C++ bindings generation
Matt Corallo [Sun, 13 Sep 2020 17:02:35 +0000 (13:02 -0400)]
Add a few more things to gitignore for bindings
Matt Corallo [Sat, 12 Sep 2020 01:11:42 +0000 (21:11 -0400)]
Rename lightning C/C++ bindings library to libldk
This should fix #689.
Matt Corallo [Fri, 11 Sep 2020 23:35:16 +0000 (19:35 -0400)]
Note that genbindings.sh is really also a test script.
Matt Corallo [Fri, 11 Sep 2020 23:31:13 +0000 (19:31 -0400)]
Remove the bindings crate from the root namespace to let it break
Until we get the bindings generation process super stable, let the
bindings get stale with respect to the main repo while still letting
`cargo check` pass.
Matt Corallo [Fri, 11 Sep 2020 18:45:45 +0000 (14:45 -0400)]
Add developer guideline notes for C/C++ bindings generation
Antoine Riard [Fri, 29 May 2020 00:32:46 +0000 (20:32 -0400)]
Change variable nomenclature in chan_utils
Variables should be named according to the script semantic which is
an invariant with regards to generating a local or remote commitment
transaction.
I.e a broadcaster_htlc_key will always guard a HTLC to the party able
to broadcast the computed transactions whereas countersignatory_htlc_key
will guard HTLC to a countersignatory of the commitment transaction.
Matt Corallo [Fri, 11 Sep 2020 02:23:39 +0000 (19:23 -0700)]
Merge pull request #618 from TheBlueMatt/2020-05-sample-c-bindings
C/C++ Bindings
Matt Corallo [Fri, 21 Aug 2020 23:05:27 +0000 (19:05 -0400)]
Use Debian experimental in CI to match LLVM between rustc and clang
Matt Corallo [Tue, 1 Sep 2020 20:11:39 +0000 (16:11 -0400)]
Specify panic = abort in profiles for lightning-c-bindings
Matt Corallo [Tue, 1 Sep 2020 19:43:33 +0000 (15:43 -0400)]
Apply -O1 only to tests, not all dev (which is used for bindings)
Matt Corallo [Thu, 23 Jul 2020 19:14:44 +0000 (15:14 -0400)]
Add bindings README
Matt Corallo [Mon, 11 May 2020 00:09:42 +0000 (20:09 -0400)]
Add CI run for bindings generation (though we'll allow it to fail)
Matt Corallo [Sat, 16 May 2020 01:27:51 +0000 (21:27 -0400)]
LTO in release mode by default, which is really critical for C libs
Matt Corallo [Fri, 24 Jul 2020 18:31:36 +0000 (14:31 -0400)]
Update the root Cargo.toml to point to the new subcrate
Matt Corallo [Thu, 10 Sep 2020 22:19:15 +0000 (18:19 -0400)]
Add automatically generated C/C++ wrapper bindings
Matt Corallo [Tue, 12 May 2020 18:54:12 +0000 (14:54 -0400)]
Add all the manually-generated bits for the c-bindings crate
Including:
* A script to automatically generate all the rest,
* Cargo.toml and cbindgen.toml,
* manually-written wrapper types for a few types
Matt Corallo [Tue, 12 May 2020 17:48:07 +0000 (13:48 -0400)]
Add annotations for things which we cannot (yet) expose
Matt Corallo [Tue, 12 May 2020 18:49:29 +0000 (14:49 -0400)]
Add tool to read a Rust crate and generate C-compatible wrappers
In general, it maps:
* Traits to a struct with a void* and a list of function pointers,
emulating what the compiler will do for a dyn trait anyway,
* Structs as a struct with a single opaque pointer to the
underlying type and a flag to indicate ownership. While this is
a bit less effecient than just a direct pointer, it neatly lets
us expose in the public interface the concept of ownership by
setting a flag in the generated struct.
* Unit enums as enums with each type copied over and conversion
functions,
* Non-unit enums have each field converted back and forth with a
type flag and a union across all the C-mapped fields.
Matt Corallo [Fri, 11 Sep 2020 01:37:08 +0000 (21:37 -0400)]
Remove a few final ::-containing paths in generic args
This cleans upa few last cases of functions/objects which our C
bindings generator doesn't know how to read.
Matt Corallo [Thu, 10 Sep 2020 22:11:30 +0000 (15:11 -0700)]
Merge pull request #686 from TheBlueMatt/2020-09-bump-deps
Bump rust-bitcoin and friends
Matt Corallo [Thu, 10 Sep 2020 20:32:45 +0000 (16:32 -0400)]
Silence new rustc warning about useless muts
Matt Corallo [Tue, 25 Aug 2020 22:47:24 +0000 (18:47 -0400)]
Use rust-bitcoin's new SigHashCache instead of SignatureHashComp's
Thew new API is a bit harder to misuse by taking a reference to the
transaction to require the inputs match the input being signed.
Matt Corallo [Tue, 25 Aug 2020 21:12:00 +0000 (17:12 -0400)]
Update to latest upstream rust-bitcoin
Matt Corallo [Wed, 26 Aug 2020 15:14:34 +0000 (08:14 -0700)]
Merge pull request #676 from TheBlueMatt/2020-08-c-bindings-cleanups-3
Pre-C-Bindings Cleanups #3
Matt Corallo [Wed, 26 Aug 2020 15:07:58 +0000 (08:07 -0700)]
Merge pull request #674 from TheBlueMatt/2020-08-keyif-rand-names
Simplify + clarify random-bytes-fetching from KeysInterface
Matt Corallo [Mon, 24 Aug 2020 18:14:05 +0000 (14:14 -0400)]
Add a C-bindings-compatible read lock type for NetworkGraph
In order to calculate a route, it is likely that users need to take
a read()-lock on NetGraphMsgHandler::network_graph. This is not
possible naively from C bindings, as Rust's native RwLock is not
exposed.
Thus, we provide a simple wrapper around the RwLockReadGuard and
expose simple accessor methods.
Matt Corallo [Thu, 13 Aug 2020 18:45:34 +0000 (14:45 -0400)]
Rename TxCreationKeys::new to not conflict w/ auto-gen'd C bindings
The C bindings automatically create a _new() function for structs
which contain only pub fields which we know how to map. This
conflicts with the actual TxCreationKeys::new() function, so we
simply rename it to capture its nature as a derivation function.
Matt Corallo [Fri, 7 Aug 2020 20:27:26 +0000 (16:27 -0400)]
Give ChannelManagerReadArgs HashMap-of-monitors ownership
Its somewhat awkward that ChannelManagerReadArgs requires a mutable
reference to a HashMap of ChannelMonitors, forcing the callsite to
define a scope for the HashMap which they almost certainly won't use
after deserializing the ChannelManager. Worse, to map the current
version to C bindings, we'd need to also create a HashMap binding,
which is overkill for just this one use.
Instead, we just give the ReadArgs struct ownership of the HashMap
and add a constructor which fills the HashMap for you.
Matt Corallo [Thu, 30 Jul 2020 17:19:11 +0000 (13:19 -0400)]
Use ln OutPoints not bitcoin ones in SpendableOutputDescriptors
Lightning OutPoints only have 16 bits to express the output index
instead of Bitcoin's 32 bits, implying that some outputs are
possibly not expressible as lightning OutPoints. However, such
OutPoints can never be hit within the lightning protocol, and must
be on-chain spam sent by a third party wishing to donate us money.
Still, in order to do so, the third party would need to fill nearly
an entire block with garbage, so this case should be relatively
safe.
A new comment in channelmonitor explains the reasoning a bit
further.
Matt Corallo [Thu, 23 Jul 2020 20:10:29 +0000 (16:10 -0400)]
Use slices to references not slices of concrete objects in pub API
Because the C bindings maps objects into new structs which contain
only a pointer to the underlying (immovable) Rust type, it cannot
create a list of Rust types which are contiguous in memory. Thus,
in order to allow C clients to call certain Rust functions, we have
to use &[&Type] not &[Type]. This commit fixes this issue for the
get_route function.
Matt Corallo [Sun, 31 May 2020 03:22:16 +0000 (23:22 -0400)]
Refer to return types by the trait that they're defined via
Instead of using the explicit type which is being returned, refer
to them as Self::AssociatedType, to make clear to the bindings what
type of thing is being returned.
Matt Corallo [Sun, 31 May 2020 03:20:17 +0000 (23:20 -0400)]
Refer to generic types by importing them instead of a super-mod.
This avoids one case the bindings generation hasn't bothered to
handle by simply importing types that are referred to.
Matt Corallo [Sun, 31 May 2020 03:16:29 +0000 (23:16 -0400)]
Always refer to Deref types with where clauses instead of direct
This makes it a little easier to write C bindings generation as
we only have to handle one case instead of both.
Matt Corallo [Thu, 11 Jun 2020 19:34:28 +0000 (15:34 -0400)]
Reorder struct definitions so that they are in dependency order.
There are a few cases where the upcoming C bindings don't know how
to handle something which depends on something defined later in the
file. Instead of adding another pass to the C bindings generator,
it is much simpler to just reorder structs.
Matt Corallo [Tue, 25 Aug 2020 21:07:27 +0000 (14:07 -0700)]
Merge pull request #667 from valentinewallace/remove-channels-chanmon
Remove Channel's ChannelMonitor copy
Valentine Wallace [Thu, 13 Aug 2020 18:35:39 +0000 (14:35 -0400)]
Remove Channel's ChannelMonitor copy
Valentine Wallace [Mon, 24 Aug 2020 21:27:49 +0000 (17:27 -0400)]
Add commitment transaction broadcast as a ChannelMonitor event
To do this, we replace get_and_clear_pending_htlcs_updated with
get_and_clear_pending_monitor_events, and which still transmits HTLCUpdates
as before, but now also transmits a new MonitorEvent::CommitmentTxBroadcasted
event when a channel's commitment transaction is broadcasted.
Matt Corallo [Tue, 25 Aug 2020 01:18:38 +0000 (18:18 -0700)]
Merge pull request #675 from dspicher/master
Refactor route tests
Dominik Spicher [Mon, 24 Aug 2020 21:06:07 +0000 (23:06 +0200)]
Refactor route tests
* Splits up the monolithic test into smaller unit tests
* Factors out helpers for graph setup
* Changes `id_to_feature_flags` to be a function, there was no
reason why it had to be a macro
* Activates a previously commented-out test that checks for
the failure case in `disable_node_test`
Matt Corallo [Sun, 23 Aug 2020 21:06:33 +0000 (17:06 -0400)]
Simplify + clarify random-bytes-fetching from KeysInterface
Due to a desire to be able to override temporary channel IDs and
onion keys, KeysInterface had two separate fetch-random-32-bytes
interfaces - an onion-key specific version which fetched 2 random
32 byte strings and a temporary-channel-id specific version.
It turns out, we never actually need to override both at once (as
creating a new channel and sending an outbound payment are always
separate top-level calls), so there's no reason to add two
functions to the interface when both really do the same thing.
Matt Corallo [Sun, 23 Aug 2020 21:28:29 +0000 (14:28 -0700)]
Merge pull request #665 from lightning-signer/pub-messages
Make message fields public
Devrandom [Mon, 10 Aug 2020 09:26:46 +0000 (11:26 +0200)]
Make message fields public
Matt Corallo [Wed, 19 Aug 2020 20:04:41 +0000 (13:04 -0700)]
Merge pull request #671 from valentinewallace/bump-msrv
Bump MSRV to 1.30.0
Valentine Wallace [Wed, 19 Aug 2020 19:35:37 +0000 (15:35 -0400)]
Bump MSRV to 1.30.0
We wanted to bump to 1.29 to continue to support mrustc bootstrapping, but on 1.29
there's a bug preventing us from compiling the lightning package only, thus parts
of lightning-net-tokio cause a compilation error.
The advantage of bumping the MSRV is an improved borrow checker which should
enable improved code quality, and not having jump through weird hoops sometimes
to get 1.22 working.
Matt Corallo [Thu, 13 Aug 2020 21:06:39 +0000 (14:06 -0700)]
Merge pull request #669 from joemphilips/fix_capacity-is-always-zero-bug_in_list_channels
Fix bug in Channel
Matt Corallo [Thu, 13 Aug 2020 17:08:21 +0000 (10:08 -0700)]
Merge pull request #668 from lightning-signer/nit
fix typo
joe.miyamoto [Thu, 13 Aug 2020 08:10:24 +0000 (17:10 +0900)]
Fix bug in Channel
Before this commit, `fn get_inbound_outbound_available_balance_msat` always returns 0.
It is because using `cmp::min` instead of `cmp::max` .
Devrandom [Thu, 13 Aug 2020 07:58:55 +0000 (09:58 +0200)]
fix typo
Matt Corallo [Tue, 11 Aug 2020 16:10:05 +0000 (09:10 -0700)]
Merge pull request #662 from lightning-signer/compat5
Export various fields and structures
Devrandom [Tue, 11 Aug 2020 07:23:15 +0000 (09:23 +0200)]
check the input shape in LocalCommitmentTransaction.new_missing_local_sig
Devrandom [Mon, 20 Jul 2020 12:26:06 +0000 (05:26 -0700)]
make LocalCommitmentTransaction constructor public
Allows calling of InMemoryChannelKeys methods
Devrandom [Sat, 4 Jul 2020 08:18:54 +0000 (01:18 -0700)]
make SimpleManyChannelMonitor.monitors public
Devrandom [Fri, 3 Jul 2020 20:41:21 +0000 (13:41 -0700)]
export "unsafe_revoked_tx_signing" feature
Allows unsafe signing in dev code, such as functional testing of
justice transactions outside our crate.
Matt Corallo [Tue, 11 Aug 2020 01:30:38 +0000 (18:30 -0700)]
Merge pull request #666 from TheBlueMatt/2020-08-license-change
Relicense as dual Apache-2.0 + MIT
Matt Corallo [Mon, 10 Aug 2020 19:00:09 +0000 (15:00 -0400)]
Relicense as dual Apache-2.0 + MIT
This changes the LICENSE file and adds license headers to most files
to relicense under dual Apache-2.0 and MIT. This is helpful in that
we retain the patent grant issued under Apache-2.0-licensed work,
avoiding some sticky patent issues, while still allowing users who
are more comfortable with the simpler MIT license to use that.
See https://github.com/rust-bitcoin/rust-lightning/issues/659 for
relicensing statements from code authors.
Matt Corallo [Mon, 10 Aug 2020 20:25:03 +0000 (13:25 -0700)]
Merge pull request #664 from lightning-signer/tx-creation-keys
Wrap transaction creation keys
Devrandom [Mon, 10 Aug 2020 20:09:03 +0000 (22:09 +0200)]
nit
Devrandom [Sun, 9 Aug 2020 13:56:10 +0000 (15:56 +0200)]
Expose TxCreationKeys in LocalCommitmentTransaction via a method
This makes it obvious to signer implementers that the pre-derived keys are a local cache and should not be trusted in a validating signer.
Devrandom [Sun, 9 Aug 2020 13:45:23 +0000 (15:45 +0200)]
Make TxCreationKeys public and wrap it in PreCalculatedTxCreationKeys
Allows calling of InMemoryChannelKeys methods.
The wrapping makes it obvious to signer implementers that the pre-derived keys are a local cache and should not be trusted in a validating signer.
Matt Corallo [Sat, 8 Aug 2020 21:20:09 +0000 (14:20 -0700)]
Merge pull request #640 from valentinewallace/test-holding-cell-edge-case
Fail back HTLCs that fail to be freed from the holding cell
Valentine Wallace [Wed, 6 May 2020 22:15:43 +0000 (18:15 -0400)]
Holding cell: if we fail to free an HTLC, fail it backwards
Plus add a test.
Matt Corallo [Mon, 3 Aug 2020 21:25:56 +0000 (14:25 -0700)]
Merge pull request #663 from TheBlueMatt/2020-08-codecov
Set codecov upload token
Matt Corallo [Mon, 3 Aug 2020 20:48:58 +0000 (16:48 -0400)]
Set codecov upload token
Docs seem to indicate this should only be required for private
repos, but we have builds failing claiming this needs to be
specified, so just set it manually.
Matt Corallo [Wed, 29 Jul 2020 19:08:13 +0000 (12:08 -0700)]
Merge pull request #658 from lightning-signer/self-delay
ChannelKeys - provide to_self_delay alongside the remote channel pubkeys
Devrandom [Thu, 23 Jul 2020 13:54:49 +0000 (06:54 -0700)]
ChannelKeys - provide to_self_delay alongside the remote channel pubkeys
In the phase 2 signer, we will construct the commitment transaction inside the signer.
In preparation, provide needed channel related data.
Matt Corallo [Mon, 27 Jul 2020 17:18:13 +0000 (10:18 -0700)]
Merge pull request #651 from naumenkogs/2020-06-routing-data-improvements
Routing improvements
Gleb Naumenko [Mon, 29 Jun 2020 18:28:15 +0000 (21:28 +0300)]
Check htlc_maximum_msat on channel update
Gleb Naumenko [Sun, 28 Jun 2020 12:18:33 +0000 (15:18 +0300)]
Store channel capacity if available
Gleb Naumenko [Sun, 28 Jun 2020 11:43:10 +0000 (14:43 +0300)]
Add htlc_maximum_msat field
Gleb Naumenko [Fri, 24 Jul 2020 07:19:45 +0000 (10:19 +0300)]
Update comment for test_msg_hole
Matt Corallo [Wed, 22 Jul 2020 20:11:45 +0000 (13:11 -0700)]
Merge pull request #655 from lightning-signer/per-commitment
ChannelKeys - separate commitment revocation from getting the per-commitment point
Devrandom [Sat, 11 Jul 2020 10:19:43 +0000 (03:19 -0700)]
ChannelKeys - separate commitment revocation from getting the per-commitment point
The commitment secret is sensitive - it can be used by an attacker to
steal funds if the node also signs the same transaction. Therefore,
only release the secret from ChannelKeys when we are revoking a
transaction.
Gleb Naumenko [Mon, 29 Jun 2020 17:48:01 +0000 (20:48 +0300)]
Improve routing announcement test
Gleb Naumenko [Thu, 25 Jun 2020 14:01:42 +0000 (17:01 +0300)]
Fix formatting
Gleb Naumenko [Tue, 16 Jun 2020 15:58:06 +0000 (18:58 +0300)]
Use constant for max msats
Gleb Naumenko [Tue, 16 Jun 2020 10:17:43 +0000 (13:17 +0300)]
Update get_route comment to reflect new parameters
Matt Corallo [Wed, 22 Jul 2020 03:04:44 +0000 (20:04 -0700)]
Merge pull request #644 from joemphilips/improve_error_message
Improve error message.
Matt Corallo [Wed, 22 Jul 2020 03:03:37 +0000 (20:03 -0700)]
Merge pull request #623 from LNP-BP/feat-msgsizelimit
Making message size limit an exportable constant
joe.miyamoto [Mon, 13 Jul 2020 04:24:40 +0000 (13:24 +0900)]
slightly refactor internal_announcement_signatures
For making debugging easy.
If the user gives a different node_secret for transport
layer (`PeerManager`) and for routing msg, internal_announcement_signatures
is the first place it causes an error.
By giving a detailed error message, user will be able to
fix the bug quickly.
joe.miyamoto [Mon, 13 Jul 2020 04:16:32 +0000 (13:16 +0900)]
Improve error message.
... for ChannelError and APIMisuseError
Before this commit, When rl returns error, we don't know
The actual parameter which caused the error.
By returning parameterised `String` instead of predefined `&'static str`,
We can give a caller improved error message.
TestLogger now has two additional methods
1. `assert_log_contains` which checks the logged messsage
has how many entry which includes the specified string as a substring.
2. `aasert_log_regex` mostly the same with `assert_log_contains`
but it is more flexible that caller specifies regex which has
to be satisfied instead of just a substring.
For regex, tests now includes `regex` as dev-dependency.
Dr. Maxim Orlovsky [Tue, 21 Jul 2020 12:14:01 +0000 (14:14 +0200)]
Moving LN_MAX_MSG_LEN const to the actual use place
Dr. Maxim Orlovsky [Tue, 21 Jul 2020 12:11:46 +0000 (14:11 +0200)]
Removing spec quotation from LN_MAX_MSG_LEN definition
Dr. Maxim Orlovsky [Tue, 21 Jul 2020 12:00:02 +0000 (14:00 +0200)]
Removing duplicated code in message decryption test cases
Dr. Maxim Orlovsky [Tue, 21 Jul 2020 11:48:37 +0000 (13:48 +0200)]
Test cases for message encryption/decryption size limits
Dr. Maxim Orlovsky [Tue, 21 Jul 2020 11:39:39 +0000 (13:39 +0200)]
Fixing panic messages for decryption procedures
Dr. Maxim Orlovsky [Sun, 17 May 2020 14:02:56 +0000 (16:02 +0200)]
Making message size limit an exportable constant
Matt Corallo [Thu, 16 Jul 2020 17:00:32 +0000 (10:00 -0700)]
Merge pull request #656 from erasmospunk/typo
Fix typo
John L. Jegutanis [Wed, 15 Jul 2020 13:43:18 +0000 (16:43 +0300)]
Fix typo
Matt Corallo [Thu, 2 Jul 2020 18:31:31 +0000 (11:31 -0700)]
Merge pull request #652 from lightning-signer/commitment-secret
ChannelKeys provides individual commitment secrets
Devrandom [Wed, 1 Jul 2020 10:31:53 +0000 (03:31 -0700)]
ChannelKeys provides individual commitment secrets
Matt Corallo [Sun, 28 Jun 2020 18:01:43 +0000 (18:01 +0000)]
Merge pull request #650 from TheBlueMatt/2020-06-fix-build
Fix silent merge conflict between
bcd65be and
940d7ac
Matt Corallo [Sun, 28 Jun 2020 17:21:45 +0000 (13:21 -0400)]
Fix unused-parentheses warnings newer rustcs have added
Matt Corallo [Sun, 28 Jun 2020 17:19:40 +0000 (13:19 -0400)]
Fix silent merge conflict between
bcd65bed7bd9a and
940d7ac8d897589
Matt Corallo [Sat, 27 Jun 2020 00:41:35 +0000 (00:41 +0000)]
Merge pull request #647 from valentinewallace/test-remote-fee-spike-buffer-violation
Test remote fee spike buffer violation
Matt Corallo [Wed, 24 Jun 2020 00:16:28 +0000 (00:16 +0000)]
Merge pull request #638 from TheBlueMatt/2020-06-c-bindings-cleanups-2
Pre-C bindings cleanups (2)
Matt Corallo [Sat, 13 Jun 2020 01:01:32 +0000 (21:01 -0400)]
Use usize for transaction-position-in-block values
We use them largely as indexes into a Vec<Transaction> so there's
little reason for them to be u32s. Instead, use them as usize
everywhere.
We also take this opportunity to add range checks before
short_channel_id calculation, as we could otherwise end up with a
bogus short_channel_id due to an output index out of range.
Matt Corallo [Thu, 11 Jun 2020 20:05:41 +0000 (16:05 -0400)]
Drop unused import in fuzz router.rs
Matt Corallo [Thu, 11 Jun 2020 19:40:28 +0000 (15:40 -0400)]
Take &NetworkGraph as input in get_route, not a NetGraphMsgHandler
This was just an oversight when route calculation was split up into
parts - it makes no sense for get_route to require that we have a
full route message handler, only a network graph (which can always
be accessed from a NetGraphMsgHandler anyway).
Matt Corallo [Sat, 13 Jun 2020 21:33:21 +0000 (17:33 -0400)]
Make ChainWatchInterface::filter_block return only idxes, not refs
Instead of making the filter_block fn in the ChainWatchInterface
trait return both a list of indexes of transaction positions within
the block and references to the transactions themselves, return
only the list of indexes and then build the reference list at the
callsite.
While this may be slightly less effecient from a memory locality
perspective, it shouldn't be materially different.
This should make it more practical to generate bindings for
filter_block as it no longer needs to reference Rust Transaction
objects that are contained in a Rust Block object (which we'd
otherwise just pass over the FFI in fully-serialized form).