rust-lightning
3 years agoTest that txn pay at least a minimum relay fee in functional tests 2020-09-fee-tests
Matt Corallo [Fri, 18 Sep 2020 22:28:19 +0000 (18:28 -0400)]
Test that txn pay at least a minimum relay fee in functional tests

This also pays a fee on the transactions we generate in response to
SpendableOutputDescriptors in tests.

This fixes the known issues in #630, though we should test for
standardness in other ways as well.

3 years agoFix feerate calculation on closing transactions
Matt Corallo [Fri, 18 Sep 2020 22:26:12 +0000 (18:26 -0400)]
Fix feerate calculation on closing transactions

This resolves a number of bugs around how we calculate feerates on
closing transactions:

 * We previously calculated the weight wrong both by always
   counting two outputs instead of counting the number of outputs
   that actually exist in the closing transaction and by not
   counting the witness redeemscript.
 * We use assertions to check the calculated weight matches what we
   actually build (with debug_assertions for variable-length sigs).
 * As an additional sanity check, we really should check that the
   transaction had at least min-relay-fee when we were the channel
   initator.

3 years agoFix max fee_satoshis constant to be 21 million, not 2.1 million.
Matt Corallo [Fri, 18 Sep 2020 17:05:43 +0000 (13:05 -0400)]
Fix max fee_satoshis constant to be 21 million, not 2.1 million.

Though hopefully we never see a fee of 2.1 million BTC, either...

3 years agoMerge pull request #731 from TheBlueMatt/2020-10-fix-big-lock
Matt Corallo [Fri, 2 Oct 2020 18:53:48 +0000 (11:53 -0700)]
Merge pull request #731 from TheBlueMatt/2020-10-fix-big-lock

Actually hold the total_consistency_lock instead of take-and-drop

3 years agoMerge pull request #730 from TheBlueMatt/2020-09-no-rescan
Matt Corallo [Fri, 2 Oct 2020 18:22:44 +0000 (11:22 -0700)]
Merge pull request #730 from TheBlueMatt/2020-09-no-rescan

Drop last bits of rescan as its too complicated to be worth having

3 years agoActually hold the total_consistency_lock instead of take-and-drop 2020-10-fix-big-lock
Matt Corallo [Fri, 2 Oct 2020 16:51:25 +0000 (12:51 -0400)]
Actually hold the total_consistency_lock instead of take-and-drop

It was noticed (via clippy) by @casey that we were taking and then
immediately dropping the total_consistency_lock because `let _ =`
doesn't actually bind the response to anything. This appears to be
a consequence of wanting `if let Some(_) =` to not hold a ref to
the contained value at all, but is relatively surprising to me.

3 years agoDrop last bits of rescan as its too complicated to be worth having 2020-09-no-rescan
Matt Corallo [Wed, 30 Sep 2020 19:18:29 +0000 (15:18 -0400)]
Drop last bits of rescan as its too complicated to be worth having

Previously, we had a concept of "rescaning" blocks when we detected
a need to monitor for a new set of outputs in future blocks while
connecting a block. In such cases, we'd need to possibly learn about
these new spends later in the *same block*, requiring clients who
filter blocks to get a newly-filtered copy of the same block. While
redoing the chain access API, it became increasingly clear this was
an overly complicated API feature, and it seems likely most clients
will not use it anyway.

Further, any client who *does* filter blocks can simply update their
filtering algorithm to include any descendants of matched
transactions in the filter results, avoiding the need for rescan
support entirely.

Thus, it was decided that we'd move forward without rescan support
in #649, however to avoid significant further changes in the
already-large 649, we decided to fully remove support in a
follow-up.

Here, we remove the API features that existed for rescan and fix
the few tests to not rely on it.

After this commit, we now only ever have one possible version of
block connection transactions, making it possible to be
significantly more confident in our test coverage actually
capturing all realistic scenarios.

3 years agoDrop stale comment about a rescan that doesn't happen in tests
Matt Corallo [Wed, 30 Sep 2020 19:17:33 +0000 (15:17 -0400)]
Drop stale comment about a rescan that doesn't happen in tests

3 years agoMerge pull request #729 from casey/readme
Matt Corallo [Fri, 2 Oct 2020 16:02:15 +0000 (09:02 -0700)]
Merge pull request #729 from casey/readme

Add content to readme

3 years agoFix capitalization Gleb suggested
Matt Corallo [Fri, 2 Oct 2020 15:16:22 +0000 (11:16 -0400)]
Fix capitalization Gleb suggested

3 years agoClarify that lightning-net-tokio does networking only
Casey Rodarmor [Fri, 2 Oct 2020 03:55:31 +0000 (20:55 -0700)]
Clarify that lightning-net-tokio does networking only

3 years agoReword first paragraph and add tagline
Casey Rodarmor [Fri, 2 Oct 2020 03:28:41 +0000 (20:28 -0700)]
Reword first paragraph and add tagline

3 years agoAdd content to readme
Casey Rodarmor [Fri, 2 Oct 2020 02:34:02 +0000 (19:34 -0700)]
Add content to readme

- Change header to "Rust-Lightning"
- Add crate and documentation badges
- Add introductory paragraph
- Move previous intro content under "Status" heading

3 years agoMerge pull request #649 from jkczyz/2020-06-refactor-chain-listener
Matt Corallo [Thu, 1 Oct 2020 18:10:13 +0000 (11:10 -0700)]
Merge pull request #649 from jkczyz/2020-06-refactor-chain-listener

Refactor chain monitoring

3 years agoMerge branch '2020-06-refactor-chain-listener-move-chainmonitor' into 2020-06-refacto...
Jeffrey Czyz [Thu, 1 Oct 2020 16:35:05 +0000 (09:35 -0700)]
Merge branch '2020-06-refactor-chain-listener-move-chainmonitor' into 2020-06-refactor-chain-listener

3 years agoMove ln/channelmonitor.rs to chain/chainmonitor.rs
Jeffrey Czyz [Thu, 1 Oct 2020 15:50:15 +0000 (08:50 -0700)]
Move ln/channelmonitor.rs to chain/chainmonitor.rs

3 years agoMove channelmonitor.rs from ln to chain module
Jeffrey Czyz [Fri, 7 Aug 2020 17:58:15 +0000 (10:58 -0700)]
Move channelmonitor.rs from ln to chain module

Given the chain::Watch interface is defined in terms of ChannelMonitor
and ChannelMonitorUpdateErr, move channelmonitor.rs from the ln module
to the chain module.

3 years agoMerge ChainMonitor impl blocks
Jeffrey Czyz [Thu, 10 Sep 2020 22:59:59 +0000 (15:59 -0700)]
Merge ChainMonitor impl blocks

3 years agoDefine type alias for enumerated transaction data
Jeffrey Czyz [Wed, 9 Sep 2020 19:16:09 +0000 (12:16 -0700)]
Define type alias for enumerated transaction data

Transaction data from a block may be filtered before it is passed to
block_connected functions, which may need the index of each transaction
within the block. Rather than define each function in terms of a slice
of tuples, define a type alias for the slice where it can be documented.

3 years agoReplace WatchEvent usage with get_outputs_to_watch
Jeffrey Czyz [Fri, 7 Aug 2020 22:13:57 +0000 (15:13 -0700)]
Replace WatchEvent usage with get_outputs_to_watch

Outputs to watch are tracked by ChannelMonitor as of
73dce207dd0ea6c3ac57af3ebb8b87ee03e82c9e. Instead of determining new
outputs to watch independently using ChainWatchedUtil, do so by
comparing against outputs already tracked. Thus, ChainWatchedUtil and
WatchEvent are no longer needed.

3 years agoInclude funding TXO in outputs to watch
Jeffrey Czyz [Sat, 29 Aug 2020 23:04:46 +0000 (16:04 -0700)]
Include funding TXO in outputs to watch

The funding TXO was never added to ChannelMonitor's outputs_to_watch in
73dce207dd0ea6c3ac57af3ebb8b87ee03e82c9e. Include it when constructing a
ChannelMonitor.

3 years agoFix architecture diagram arrow directions
Jeffrey Czyz [Mon, 3 Aug 2020 23:55:11 +0000 (16:55 -0700)]
Fix architecture diagram arrow directions

Arrows should signify "calls" or "generates" unless noted.

3 years agoFix architecture diagram line length
Jeffrey Czyz [Mon, 3 Aug 2020 23:51:10 +0000 (16:51 -0700)]
Fix architecture diagram line length

3 years agoReplace WatchEventProvider with chain::Filter
Jeffrey Czyz [Thu, 30 Jul 2020 17:27:41 +0000 (10:27 -0700)]
Replace WatchEventProvider with chain::Filter

WatchEventProvider served as a means for replacing ChainWatchInterface.
However, it requires users to explicitly fetch WatchEvents, even if not
interested in them. Replace WatchEventProvider by chain::Filter, which
is an optional member of ChainMonitor. If set, interesting transactions
and output spends are registered such that blocks containing them can be
retrieved from a chain source in an efficient manner.

This is useful when the chain source is not a full node. For Electrum,
it allows for pre-filtered blocks. For BIP157/158, it serves as a means
to match against compact filters.

3 years agoRemove ChainListener
Jeffrey Czyz [Wed, 29 Jul 2020 20:02:29 +0000 (13:02 -0700)]
Remove ChainListener

BlockNotifier was removed in the previous commit, thus ChainListener is
no longer needed. Instead, anything needing chain events should be
notified directly.

3 years agoRemove BlockNotifier
Jeffrey Czyz [Wed, 29 Jul 2020 01:08:46 +0000 (18:08 -0700)]
Remove BlockNotifier

BlockNotifier is a convenience for handing blocks to listeners. However,
it requires that each listener conforms to the ChainListener interface.
Additionally, there are only two listeners, ChannelManager and
ChainMonitor, the latter of which may not be used when monitoring
channels remotely. Remove BlockNotifier since it doesn't provide much
value and constrains each listener to a specific interface.

3 years agoRemove Key parameter from ChainMonitor
Jeffrey Czyz [Thu, 6 Aug 2020 23:54:13 +0000 (16:54 -0700)]
Remove Key parameter from ChainMonitor

ChainMonitor's template Key parameter was meant to allow supporting
both local monitoring, where Key=OutPoint, and watchtowers, where Key=
(PublicKey, u32). Use OutPoint directly since the watchtower case will
not be supported this way.

3 years agoRename SimpleManyChannelMonitor to ChainMonitor
Jeffrey Czyz [Tue, 21 Jul 2020 05:12:14 +0000 (22:12 -0700)]
Rename SimpleManyChannelMonitor to ChainMonitor

ManyChannelMonitor was renamed chain::Watch in the previous commit. Use
a more concise name for an implementation that monitors the chain for
channel activity. Future work will parameterize the struct to allow for
different varieties of persistence. Thus, users usually will be able to
use ChainMonitor directly rather than implementing a chain::Watch that
wraps it.

3 years agoReplace ManyChannelMonitor with chain::Watch
Jeffrey Czyz [Tue, 21 Jul 2020 00:03:52 +0000 (17:03 -0700)]
Replace ManyChannelMonitor with chain::Watch

Rename ManyChannelMonitor to chain::Watch and move to chain/mod.rs,
where chain-related interfaces live. Update the documentation for
clarity and to conform to rustdoc formatting.

3 years agoRemove ChainWatchInterface
Jeffrey Czyz [Sat, 18 Jul 2020 06:19:15 +0000 (23:19 -0700)]
Remove ChainWatchInterface

The remaining use of ChainWatchInterface was replaced by chain::Access
in the previous commit, and thus it is no longer needed.

3 years agoReplace ChainWatchInterface in NetGraphMsgHandler
Jeffrey Czyz [Sat, 18 Jul 2020 05:08:34 +0000 (22:08 -0700)]
Replace ChainWatchInterface in NetGraphMsgHandler

ChainWatchInterface was intended as an interface for watching rather
than accessing the chain. Remove get_chain_utxo and add chain::Access
trait for this behavior. Wrap it with an Option in NetGraphMsgHandler in
order to simplify the error interface.

3 years agoRemove ChainWatchInterface from channelmonitor.rs
Jeffrey Czyz [Thu, 16 Jul 2020 05:58:38 +0000 (22:58 -0700)]
Remove ChainWatchInterface from channelmonitor.rs

Use of ChainWatchInterface was replaced with WatchEvent in the previous
commit. Remove it from the parameterization of SimpleManyChannelMonitor
since it is no longer needed.

3 years agoReplace use of ChainWatchInterface with WatchEvent
Jeffrey Czyz [Thu, 9 Jul 2020 06:37:13 +0000 (23:37 -0700)]
Replace use of ChainWatchInterface with WatchEvent

SimpleManyChannelMonitor is parameterized by ChainWatchInterface to
signal what transactions and outputs to watch for on chain. The
interface has grown to cover chain access (via get_chain_utxo) and block
block filtering (via filter_block and reentered), which has added
complexity for implementations and user (see ChainWatchInterfaceUtil).

Pull the watch functionality out as a first step to eliminating
ChainWatchInterface entirely.

3 years agoAdd test utilities for {dis}connecting a block
Jeffrey Czyz [Tue, 14 Jul 2020 17:29:11 +0000 (10:29 -0700)]
Add test utilities for {dis}connecting a block

Replace direct uses of BlockNotifier in functional tests with utility
functions. This is in preparation for signaling watch events back via a
refactoring of ManyChannelMonitor and ChainWatchInterface. Those events
will be processed by connect_block.

3 years agoReplace BlockNotifier with Node in test utilities
Jeffrey Czyz [Tue, 14 Jul 2020 17:11:50 +0000 (10:11 -0700)]
Replace BlockNotifier with Node in test utilities

Change confirm_transaction and connect_blocks to take a Node instead of
a BlockNotifier. This is in preparation for signaling watch events back
via a refactoring of ManyChannelMonitor and ChainWatchInterface.

3 years agoSimplify BlockNotifier tests
Jeffrey Czyz [Tue, 16 Jun 2020 22:24:22 +0000 (15:24 -0700)]
Simplify BlockNotifier tests

Use a simple ChainListner implementation rather than large test objects
for testing BlockNotifier.

Remove unregister_single_listener_ref_test since it is redundant with
unregister_single_listener_test.

Remove unnecessary clone() calls.

3 years agoAlign ChannelMonitor interface with ChainListener
Jeffrey Czyz [Fri, 26 Jun 2020 17:43:24 +0000 (10:43 -0700)]
Align ChannelMonitor interface with ChainListener

ChannelMonitor has block_connected and block_disconnected methods called
by <SimpleManyChannelMonitor as ChainListener>. Use similar parameters
in ChannelMonitor such that transformations are not needed and the
interface is more closely aligned with ChainListener.

3 years agoRemove ChainWatchInterface from BlockNotifier
Jeffrey Czyz [Tue, 16 Jun 2020 22:10:17 +0000 (15:10 -0700)]
Remove ChainWatchInterface from BlockNotifier

ChainListeners should be independent of each other, but in practice this
is not the case because ChainWatchInterface introduces a dependency
between them. Push ChainWatchInterface down into the ChainListener
implementations where needed. Update ChainListener's block_connected
method to take a slice of the form &[(usize, &Transaction)] where each
transaction is paired with its position within the block.

3 years agoMerge pull request #715 from TheBlueMatt/2020-09-no-rescan-tests
Matt Corallo [Tue, 22 Sep 2020 18:31:31 +0000 (11:31 -0700)]
Merge pull request #715 from TheBlueMatt/2020-09-no-rescan-tests

Do not test any block-contents-rescan cases

3 years agoDo not test any block-contents-rescan cases 2020-09-no-rescan-tests
Matt Corallo [Fri, 18 Sep 2020 18:46:58 +0000 (14:46 -0400)]
Do not test any block-contents-rescan cases

In anticipation for removing support for users calling
block_connected multiple times for the same block to include all
relevant transactions in the next PR, this commit stops testing
such cases. Specifically, users who filter blocks for relevant
transactions before calling block_connected will need to filter by
including any transactions which spend a previously-matched
transaction in the same block (and we now do so in our own
filtering logic, which is also used in our testing).

3 years agoClean up test_bump_penalty_txn_on_revoked_htlcs
Matt Corallo [Fri, 18 Sep 2020 20:32:06 +0000 (16:32 -0400)]
Clean up test_bump_penalty_txn_on_revoked_htlcs

Add a few comments to make it clear whats going on a bit more and
assert the basic structure of more transactions.

Further, point out where transactions are double-spends and don't
confirm double-spends.

3 years agoClean up static_spendable_outputs_justice_tx_revoked_htlc_success_tx
Matt Corallo [Fri, 18 Sep 2020 19:07:46 +0000 (15:07 -0400)]
Clean up static_spendable_outputs_justice_tx_revoked_htlc_success_tx

Add a few comments to make it clear whats going on a bit more and
don't test/confirm a double-spend transaction.

3 years agoClean up static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx
Matt Corallo [Fri, 18 Sep 2020 16:38:25 +0000 (12:38 -0400)]
Clean up static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx

Add a few comments to make it clear whats going on a bit more and
don't test/confirm a bogus transaction.

3 years agoderive(Debug) on Events
Matt Corallo [Fri, 18 Sep 2020 22:01:10 +0000 (18:01 -0400)]
derive(Debug) on Events

We'd previously largely not turned on derive(Debug) on any of our
structs, but not for good reason. Especially for Events objects,
Debug can be a very useful for users to quickly print what they
received from us without having to write out a large match.

3 years agoMerge pull request #713 from valentinewallace/cross-platform-ci
Matt Corallo [Fri, 18 Sep 2020 14:48:56 +0000 (07:48 -0700)]
Merge pull request #713 from valentinewallace/cross-platform-ci

Update CI to run on Macos and Windows in addition to Ubuntu.

3 years agoUpdate CI to run build and tests on Macos and Windows in addition to Ubuntu.
Valentine Wallace [Thu, 17 Sep 2020 18:22:55 +0000 (14:22 -0400)]
Update CI to run build and tests on Macos and Windows in addition to Ubuntu.

We only run Macos and Windows on Rust stable, for efficient CI.

3 years agoRemove unnecessary include in Github Actions script.
Valentine Wallace [Thu, 17 Sep 2020 18:13:12 +0000 (14:13 -0400)]
Remove unnecessary include in Github Actions script.

3 years agoOnly link dead code when necessary in CI.
Valentine Wallace [Thu, 17 Sep 2020 18:10:41 +0000 (14:10 -0400)]
Only link dead code when necessary in CI.

3 years agoMerge pull request #690 from TheBlueMatt/2020-09-633-bindings
Matt Corallo [Wed, 16 Sep 2020 15:40:30 +0000 (08:40 -0700)]
Merge pull request #690 from TheBlueMatt/2020-09-633-bindings

Small tweaks post #633/#684

3 years agoFix two bugs which access the wrong peer's htlc_minimum_msat value 2020-09-633-bindings
Matt Corallo [Mon, 14 Sep 2020 21:39:42 +0000 (17:39 -0400)]
Fix two bugs which access the wrong peer's htlc_minimum_msat value

 * Channel::get_counterparty_htlc_minimum_msat() returned
   holder_htlc_minimum_msat, which was obviously incorrect.
 * ChannelManager::get_channel_update set htlc_minimum_msat to
   Channel::get_holder_htlc_minimum_msat(), but the spec explicitly
   states we "MUST set htlc_minimum_msat to the minimum HTLC value
   (in millisatoshi) that the channel peer will accept." This makes
   sense because the reason we're rejecting the HTLC is because our
   counterparty's HTLC minimum value is too small for us to send to
   them, our own HTLC minimum value plays no role. Further, our
   router already expects this - looking at the same directional
   channel info as it does fees.

Finally, we add a test in the existing onion router test cases
which fails if either of the above is incorrect (the second issue
discovered in the process of writing the test).

3 years agoMove onion failure tests from functional_tests to their own file
Matt Corallo [Mon, 14 Sep 2020 20:49:05 +0000 (16:49 -0400)]
Move onion failure tests from functional_tests to their own file

They all have a specific structure, so having them in the mess that
is functional_tests isn't really conducive to readability. More
importantly, functional_tests is so big it slows down compilation,
so even dropping a few hundred lines is a win.

3 years agoUpdate bindings after merge of #633, #679, #683.
Matt Corallo [Mon, 14 Sep 2020 19:52:33 +0000 (15:52 -0400)]
Update bindings after merge of #633, #679, #683.

3 years agoClarify docs on payment_point slightly
Matt Corallo [Mon, 14 Sep 2020 19:52:02 +0000 (15:52 -0400)]
Clarify docs on payment_point slightly

3 years agoMerge pull request #679 from ariard/2020-08-concurrent-watchtowers
Matt Corallo [Wed, 16 Sep 2020 01:01:37 +0000 (21:01 -0400)]
Merge pull request #679 from ariard/2020-08-concurrent-watchtowers

Implement concurrent broadcast tolerance for distributed watchtowers

3 years agoMerge pull request #696 from TheBlueMatt/2020-09-ci-check-commits
Matt Corallo [Wed, 16 Sep 2020 00:45:50 +0000 (17:45 -0700)]
Merge pull request #696 from TheBlueMatt/2020-09-ci-check-commits

Check each commit at least builds in CI

3 years agoCheck each commit at least builds in CI 2020-09-ci-check-commits
Matt Corallo [Tue, 15 Sep 2020 18:39:44 +0000 (14:39 -0400)]
Check each commit at least builds in CI

3 years agoImprove PermanentFailure requiremnts documentation
Antoine Riard [Fri, 28 Aug 2020 20:31:31 +0000 (16:31 -0400)]
Improve PermanentFailure requiremnts documentation

Sources of the failure may be multiple in case of distributed watchtower
deployment. In either case, the channel manager must return a final
update asking to its channel monitor(s) to broadcast the lastest state
available. Revocation secret must not be released for the faultive
channel.

In the future, we may return wider type of failures to take more
fine-grained processing decision (e.g if local disk failure and
redudant remote channel copy available channel may still be processed
forward).

3 years agoAdd test_concurrent_monitor_claim
Antoine Riard [Thu, 27 Aug 2020 23:48:35 +0000 (19:48 -0400)]
Add test_concurrent_monitor_claim

Watchower Alice receives block 134, broadcasts state X, rejects state Y.
Watchtower Bob accepts state Y, receives blocks 135, broadcasts state Y.
State Y confirms onchain. Alice must be able to claim outputs.

3 years agoImplement concurrent broadcast tolerance for distributed watchtowers
Antoine Riard [Fri, 28 Aug 2020 00:47:02 +0000 (20:47 -0400)]
Implement concurrent broadcast tolerance for distributed watchtowers

With a distrbuted watchtowers deployment, where each monitor is plugged
to its own chain view, there is no guarantee that block are going to be
seen in same order. Watchtower may diverge in their acceptance of a
submitted `commitment_signed` update due to a block timing-out a HTLC
and provoking a subset but yet not seen by the other watchtower subset.
Any update reject by one of the watchtower must block offchain coordinator
to move channel state forward and release revocation secret for previous
state.

In this case, we want any watchtower from the rejection subset to still
be able to claim outputs if the concurrent state, has accepted by the
other subset, is confirming. This improve overall watchtower system
fault-tolerance.

This change stores local commitment transaction unconditionally and fail
the update if there is knowledge of an already signed commitment
transaction (ChannelMonitor.local_tx_signed=true).

3 years agoMerge pull request #684 from bmancini55/gossip_queries
Matt Corallo [Mon, 14 Sep 2020 20:45:12 +0000 (13:45 -0700)]
Merge pull request #684 from bmancini55/gossip_queries

Adding gossip_queries messages and serializations

3 years agoAdding fuzzers for gossip_queries messages
bmancini55 [Thu, 10 Sep 2020 21:52:48 +0000 (17:52 -0400)]
Adding fuzzers for gossip_queries messages

This commit adds ser/deser fuzzers for five new structs in ln::msgs used
for gossip_queries.

3 years agoAdding gossip_queries message structs and serialization
bmancini55 [Mon, 7 Sep 2020 18:20:58 +0000 (14:20 -0400)]
Adding gossip_queries message structs and serialization

This adds the message structs and implements Readable and Writeable
traits for the standard gossip_queries messages.

3 years agoMerge pull request #633 from ariard/2020-05-rename-keys-var
Matt Corallo [Mon, 14 Sep 2020 19:49:56 +0000 (12:49 -0700)]
Merge pull request #633 from ariard/2020-05-rename-keys-var

Rename a's keys as local's keys and b's keys as remote's keys

3 years agoCleanup locally-selected-delay
Antoine Riard [Mon, 7 Sep 2020 00:16:42 +0000 (20:16 -0400)]
Cleanup locally-selected-delay

Comment meaning of holder/counterparty

Diverse chan_utils cleanups

Cleanups post-cbindings merge

Fix misusage of holder_selected_contest_delay instead of counterparty
_selected_contest_delay in HolderCommitmentTransaction

Fix old payment_point comment

3 years agoOverhaul LocalCommitmentTx to new nomenclature
Antoine Riard [Mon, 7 Sep 2020 00:07:11 +0000 (20:07 -0400)]
Overhaul LocalCommitmentTx to new nomenclature

3 years agoOverhaul ChannelMonitor/OnchainTxHandler to new nomenclature
Antoine Riard [Sun, 6 Sep 2020 23:51:21 +0000 (19:51 -0400)]
Overhaul ChannelMonitor/OnchainTxHandler to new nomenclature

3 years agoChange ChannelKeys interface nomenclature to holder/counterparty one
Antoine Riard [Mon, 31 Aug 2020 19:31:19 +0000 (15:31 -0400)]
Change ChannelKeys interface nomenclature to holder/counterparty one

Transaction signing methods are changed from local_/remote_ prefix
to newer holder_/counterparty_ wihout any semantic changes.

3 years agoUnderscore TxCreationKeys ownership
Antoine Riard [Thu, 27 Aug 2020 17:24:37 +0000 (13:24 -0400)]
Underscore TxCreationKeys ownership

A TxCreationKeys set represents the key which will be embedded in output
scripts of a party's commitment tx state. Among them there is a always
a key belonging to counter-party, the HTLC pubkey. To dissociate
strongly, prefix keys with broadcaster/countersignatory.

A revocation keypair is attributed to the broadcaster as it's used
to punish a fraudulent broadcast while minding that such keypair
derivation method will be always used by countersignatory as it's
its task to enforce punishement thanks to the release secret.

3 years agoChange variable nomenclature for to_self_delay
Antoine Riard [Wed, 26 Aug 2020 19:27:12 +0000 (15:27 -0400)]
Change variable nomenclature for to_self_delay

To avoid reviewers confusion, rename counterparty_to_self_delay
to counteparty_selected_contest_delay, i.e the justice delay announced
by a channel counterparty restraining our transactions, and to_self_delay
to locally_selected_contest_delay, i.e the justice delay announced by us
restraining counterparty's transactions

We deviate from wider nomenclature by prefixing local data with a
locally_ extension due to the leak of this value in transactions/scripts
builder, where the confusion may happen.

Rename further AcceptChannelData to the new nomenclature.

3 years agoChange variable nomenclature for Channel fields
Antoine Riard [Tue, 9 Jun 2020 00:47:55 +0000 (20:47 -0400)]
Change variable nomenclature for Channel fields

Previously most of variable fields relative to data belonging to
our node or counterparty were labeled "local"/"remote". It has been
deemed confusing with regards to transaction construction which is
always done from a "local" viewpoint, even if owner is our counterparty

3 years agoMerge pull request #688 from TheBlueMatt/2020-09-dev-docs
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

3 years agoAdd a few more things to gitignore for bindings 2020-09-dev-docs
Matt Corallo [Sun, 13 Sep 2020 17:02:35 +0000 (13:02 -0400)]
Add a few more things to gitignore for bindings

3 years agoRename lightning C/C++ bindings library to libldk
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.

3 years agoNote that genbindings.sh is really also a test script.
Matt Corallo [Fri, 11 Sep 2020 23:35:16 +0000 (19:35 -0400)]
Note that genbindings.sh is really also a test script.

3 years agoRemove the bindings crate from the root namespace to let it break
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.

3 years agoAdd developer guideline notes for C/C++ bindings generation
Matt Corallo [Fri, 11 Sep 2020 18:45:45 +0000 (14:45 -0400)]
Add developer guideline notes for C/C++ bindings generation

3 years agoChange variable nomenclature in chan_utils
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.

3 years agoMerge pull request #618 from TheBlueMatt/2020-05-sample-c-bindings
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

3 years agoUse Debian experimental in CI to match LLVM between rustc and clang 2020-05-sample-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

3 years agoSpecify panic = abort in profiles for lightning-c-bindings
Matt Corallo [Tue, 1 Sep 2020 20:11:39 +0000 (16:11 -0400)]
Specify panic = abort in profiles for lightning-c-bindings

3 years agoApply -O1 only to tests, not all dev (which is used for 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)

3 years agoAdd bindings README
Matt Corallo [Thu, 23 Jul 2020 19:14:44 +0000 (15:14 -0400)]
Add bindings README

3 years agoAdd CI run for bindings generation (though we'll allow it to fail)
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)

3 years agoLTO in release mode by default, which is really critical for C libs
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

3 years agoUpdate the root Cargo.toml to point to the new subcrate
Matt Corallo [Fri, 24 Jul 2020 18:31:36 +0000 (14:31 -0400)]
Update the root Cargo.toml to point to the new subcrate

3 years agoAdd automatically generated C/C++ wrapper bindings
Matt Corallo [Thu, 10 Sep 2020 22:19:15 +0000 (18:19 -0400)]
Add automatically generated C/C++ wrapper bindings

3 years agoAdd all the manually-generated bits for the c-bindings crate
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

3 years agoAdd annotations for things which we cannot (yet) expose
Matt Corallo [Tue, 12 May 2020 17:48:07 +0000 (13:48 -0400)]
Add annotations for things which we cannot (yet) expose

3 years agoAdd tool to read a Rust crate and generate C-compatible wrappers
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.

3 years agoRemove a few final ::-containing paths in generic args
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.

3 years agoMerge pull request #686 from TheBlueMatt/2020-09-bump-deps
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

3 years agoSilence new rustc warning about useless muts 2020-09-bump-deps
Matt Corallo [Thu, 10 Sep 2020 20:32:45 +0000 (16:32 -0400)]
Silence new rustc warning about useless muts

3 years agoUse rust-bitcoin's new SigHashCache instead of SignatureHashComp's
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.

3 years agoUpdate to latest upstream rust-bitcoin
Matt Corallo [Tue, 25 Aug 2020 21:12:00 +0000 (17:12 -0400)]
Update to latest upstream rust-bitcoin

3 years agoMerge pull request #676 from TheBlueMatt/2020-08-c-bindings-cleanups-3
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

3 years agoMerge pull request #674 from TheBlueMatt/2020-08-keyif-rand-names
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

3 years agoAdd a C-bindings-compatible read lock type for NetworkGraph 2020-08-c-bindings-cleanups-3
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.

3 years agoRename TxCreationKeys::new to not conflict w/ auto-gen'd C bindings
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.

3 years agoGive ChannelManagerReadArgs HashMap-of-monitors ownership
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.

3 years agoUse ln OutPoints not bitcoin ones in SpendableOutputDescriptors
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.