Commit graph

140 commits

Author SHA1 Message Date
Matt Corallo
739ffe18ba Migrate chan_utils vec_type TLVs to required/optional
* `CommitmentTransaction::htlcs` has always been written since the
  struct was converted to TLVs in 66784e32fe.
* `HolderCommitmentTransaction::counterparty_htlc_sigs` have always
  been written since the struct was converted to TLVs in
  c8bc1b6d3d.
2023-07-07 21:07:06 +00:00
Arik Sosman
4c9fbe8e79
Fix warning about deserialization marker.
Specifically, the legacy deserialization
prevention marker variable was not being
read.
2023-06-24 10:52:27 -07:00
Wilmer Paulino
82b646c548
Remove anchors config flag
Now that all of the core functionality for anchor outputs has landed,
we're ready to remove the config flag that was temporarily hiding it
from our API.
2023-06-23 13:32:08 -07:00
Arik Sosman
ed5f9f6a9b
Verify channel type features for decoding. 2023-06-23 10:37:14 -07:00
Arik Sosman
1d9a709529
Replace opt_anchors with ChannelTypeFeatures
This change modifies six structs that were keeping
track of anchors features with an `opt_anchors` field,
as well as another field keeping track of nonzero-fee-
anchor-support.
2023-06-23 10:37:14 -07:00
Arik Sosman
970b174e90
Method for ChannelTypeFeatures serialization compatibility. 2023-06-22 15:23:11 -07:00
Wilmer Paulino
d4b6f8c08e
Add BumpTransaction event handler
This allows users to bump their commitments and HTLC transactions
without having to worry about all the little details to do so. Instead,
we'll just require that they implement the `CoinSelectionSource` trait
over their wallet/UTXO source, granting the event handler permission to
spend confirmed UTXOs for the transactions it'll produce.

While the event handler should in most cases produce valid transactions,
assuming the provided confirmed UTXOs are valid, it may not produce
relayable transactions due to not satisfying certain Replace-By-Fee
(RBF) mempool policy requirements. Some of these require that the
replacement transactions have a higher feerate and absolute fee than the
conflicting transactions it aims to replace. To make sure we adhere to
these requirements, we'd have to persist some state for all transactions
the event handler has produced, greatly increasing its complexity. While
we may consider implementing so in the future, we choose to go with a
simple initial version that relies on the OnchainTxHandler's bumping
frequency. For each new bumping attempt, the OnchainTxHandler proposes a
25% feerate increase to ensure transactions can propagate under
constrained mempool circumstances.
2023-06-19 14:05:45 -07:00
Arik Sosman
6cb9919f0c
Move keysinterface.rs to a directory-level module called sign. 2023-05-02 21:48:08 -07:00
Wilmer Paulino
78b967f5b0
Generate local signatures with additional randomness
Previously, our local signatures would always be deterministic, whether
we'd grind for low R value signatures or not. For peers supporting
SegWit, Bitcoin Core will generally use a transaction's witness-txid, as
opposed to its txid, to advertise transactions. Therefore, to ensure a
transaction has the best chance to propagate across node mempools in the
network, each of its broadcast attempts should have a unique/distinct
witness-txid, which we can achieve by introducing random nonce data when
generating local signatures, such that they are no longer deterministic.
2023-04-20 12:14:21 -07:00
Matt Corallo
ba1349982b
Merge pull request #2101 from TheBlueMatt/2023-03-one-less-sig
Support future removal of redundant per-HTLC signatures in `CMU`s
2023-04-06 18:07:55 +00:00
Matt Corallo
b72f6b1b84 Support future removal of redundant per-HTLC data in ChanMonUpds
`ChannelMonitorUpdate`s are our most size-sensitive objects - they
are the minimal objects which need to be written to disk on each
commitment update. Thus, we should be careful to ensure we don't
pack too much extraneous information into each one.

Here we add future support for removing the per-HTLC explicit
`Option<Signature>` and `HTLCInCommitmentUpdate` for non-dust HTLCs
in holder commitment tx updates, which are redundant with the
`HolderCommitmentTransaction`.

While we cannot remove them entirely as previous versions rely on
them, adding support for filling in the in-memory structures from
the redundant fields will let us remove them in a future version.

We also add test-only generation logic to test the new derivation.
2023-03-24 19:02:08 +00:00
munjesi
b0bf50fa24 Replacing (C-not exported) in the docs 2023-03-22 14:30:36 +03:00
Matt Corallo
9f8e832c7b
Merge pull request #2034 from wpaulino/anchor-revoked-aggregate-claim
Add test for aggregated revoked HTLC claim on anchors channel
2023-03-21 22:32:18 +00:00
Allan Douglas R. de Oliveira
963d6c4a51 Docs improvements 2023-03-21 14:11:13 +00:00
Wilmer Paulino
e7fb47b05a
Derive Eq on structs behind anchors build flag 2023-03-20 11:32:07 -07:00
Alec Chen
4c1055d4ad Cache NodeId by converting their_node_id to tuple
This is done to avoid redundantly serializing peer node
ids when forwarding gossip messages in
`PeerManager::forward_broadcast_msg`.
2023-02-08 11:56:58 -06:00
Alec Chen
1fd95496d1 Swap PublicKey for NodeId in UnsignedChannelAnnouncement
Adds the macro `get_pubkey_from_node_id`
to parse `PublicKey`s back from `NodeId`s for signature
verification, as well as `make_funding_redeemscript_from_slices`
to avoid parsing back and forth between types.
2023-02-07 10:51:54 -06:00
Arik Sosman
30c45469e5
Separate channel-type-agnostic methods into ChannelSigner trait. 2023-01-23 15:48:26 -08:00
Arik Sosman
1b245da370
Rename BaseSign to EcdsaChannelSigner. 2023-01-23 15:47:43 -08:00
Arik Sosman
5824e226ca
Remove KeysInterface trait. 2023-01-12 09:18:08 -08:00
Arik Sosman
9d7bb73b59
Split out KeysInterface into EntropySource, NodeSigner, and SignerProvider. 2022-12-20 10:09:11 -08:00
Matt Corallo
381e8b9678 Use Witness::push_bitcoin_signature where relevant 2022-12-07 23:17:58 +00:00
Wilmer Paulino
8170c84d9d
Yield BumpHTLCResolution events 2022-12-06 16:48:24 -08:00
Wilmer Paulino
c17ce2e593
Expose HTLC transaction construction helpers 2022-12-06 16:48:23 -08:00
Matt Corallo
5588eeb06b
Merge pull request #1867 from wpaulino/remove-signer-persistence
Re-derive signers instead of persisting them
2022-12-06 18:13:49 +00:00
Wilmer Paulino
444fce71f4
Remove unnecessary byte_utils helpers
Now that to_be_bytes is available under our current MSRV of 1.41, we
can use it instead of our own version.
2022-12-05 12:11:38 -08:00
Wilmer Paulino
648a69a1e3
Rename KeysInterface ready_channel to provide_channel_parameters
Now that ready_channel is also called on startup upon deserializing
channels, we opt to rename it to a more indicative name.

We also derive `PartialEq` on ChannelTransactionParameters to allow
implementations to determine whether `provide_channel_parameters` calls
are idempotent after the channel parameters have already been provided.
2022-12-05 12:11:26 -08:00
Wilmer Paulino
b04d1b868f
Split KeysInterface::get_channel_signer into two
`get_channel_signer` previously had two different responsibilites:
generating unique `channel_keys_id` and using said ID to derive channel
keys. We decide to split it into two methods `generate_channel_keys_id`
and `derive_channel_signer`, such that we can use the latter to fulfill
our goal of re-deriving signers instead of persisting them. There's no
point in storing data that can be easily re-derived.
2022-12-05 12:11:23 -08:00
Matt Corallo
14d2e97965
Merge pull request #1887 from TheBlueMatt/2022-11-definitely-valid
Remove cryptographically unreachable error conditions
2022-12-03 19:01:15 +00:00
Matt Corallo
2cfc1dbb44 Remove unreachable Err cases when constructing TxCreationKeys 2022-11-30 22:43:29 +00:00
Matt Corallo
5671d2930d Remove unreachable Err cases on derive_*_revocation_key
The `derive_{public,private}_revocation_key` methods hash the two
input keys and then multiply the two input keys by hashed values
before adding them together. Because addition can fail if the tweak
is the inverse of the secret key this method currently returns a
`Result`.

However, it is not cryptographically possible to reach the error
case - in order to create an issue, the point-multiplied-by-hash
values must be the inverse of each other, however each point
commits the SHA-256 hash of both keys together. Thus, because
changing either key changes the hashes (and the ultimate points
added together) in an unpredictable way, there should be no way to
construct such points.
2022-11-30 22:34:11 +00:00
Matt Corallo
27461902ab Remove unreachable Err cases on derive_{public,private}_key
The `derive_{public,private}_key` methods hash the two input keys
and then add them to the input public key. Because addition can
fail if the tweak is the inverse of the secret key this method
currently returns a `Result`.

However, it is not cryptographically possible to reach the error
case - in order to create an issue, the SHA-256 hash of the
`base_point` (and other data) must be the inverse of the
`base_point`('s secret key). Because changing the `base_point`
changes the hash in an unpredictable way, there should be no way to
construct such a `base_point`.
2022-11-30 22:21:24 +00:00
Matt Corallo
2f0ddf0763
Merge pull request #1839 from ariard/2022-11-increase-visibility-helpers
Chan_utils helpers visibility relaxation
2022-11-30 18:56:15 +00:00
Antoine Riard
605d30eb03 Remove get_p2wpkh_redeemscript in favor of lib helper 2022-11-29 19:50:30 -05:00
Antoine Riard
263d76eb3d Increase visibility of script helper 2022-11-29 19:50:30 -05:00
Antoine Riard
2e4fab028b Increase visibility of protocol-level consts 2022-11-29 19:50:25 -05:00
Devrandom
e6b9694498 Re-add support for non-zero-fee-anchors to chan_utils and InMemorySigner 2022-11-22 12:28:51 +01:00
Wilmer Paulino
f4f1093edc
Bump workspace to rust edition 2018
Mostly motivated by the need of async/await.
2022-10-21 14:47:34 -07:00
Wilmer Paulino
abe85a1f44
Add public helper to build anchor input witnesses 2022-10-18 12:23:29 -07:00
Wilmer Paulino
892f8fe843
Yield channel close bump events 2022-10-18 12:23:15 -07:00
Wilmer Paulino
e9ac2b1669
Generate ClaimEvent for HolderFundingOutput inputs from anchor channels 2022-10-18 12:23:10 -07:00
Gabriel Comte
aa916bb594
Derive Eq for all structs that derive PartialEq 2022-10-14 13:24:02 +02:00
Wilmer Paulino
cd0d19c005
Update HTLC script detection to check for anchor output variants 2022-09-13 10:58:32 -07:00
Wilmer Paulino
a447965b80
Use zero fee HTLC transactions for anchor channels
This is based on the assumption that we only support the zero HTLC
transaction fee variant of anchor channels.
2022-09-13 10:58:29 -07:00
Devrandom
7e05623bef Update bitcoin crate to 0.29.0 2022-08-11 00:21:26 +02:00
Elias Rohrer
ba7935d1f3 Use new spec repository URL. 2022-05-20 17:17:29 +02:00
Devrandom
28d33ff9e0 bitcoin crate 0.28.1 2022-05-05 18:04:42 +02:00
Devrandom
8d7b38fcf1 Add low_r signature grinding
default on, can be turned off via a feature gate
2022-03-25 20:34:02 +01:00
Matt Corallo
acb4c539f7 Drop fuzztarget feature entirely
Some time ago we started transitioning to `cfg(fuzzing)` instead of
exposing a full feature. Here we complete the transition.
2022-02-18 17:03:04 +00:00
Tibo-lg
ba289b8872 Make CounterpartyCommitmentSecrets public 2022-02-10 15:25:08 +09:00