Commit Graph
1517 Commits
Author SHA1 Message Date
Olaoluwa Osuntokun 995e6cd66b lnwallet: update NewBreachRetribution to handle taproot chans
For our local output, we need a valid control block. To sweep the remote
output, we use the taptweak so we can spend the keyspend path.
2023-08-22 16:33:14 -07:00
Olaoluwa Osuntokun 1f887a1b14 lnwallet: add support for taproot chans to createHtlcRetribution
As these are revoked HTLCs, we need to set the taptweak since the
revocation case is just a keyspend.
2023-08-22 16:33:12 -07:00
Olaoluwa Osuntokun 52b122a8bb lnwallet: NewUnilateralCloseSummary for local taproot output sweep 2023-08-22 16:33:09 -07:00
Olaoluwa Osuntokun b72f368673 lnwallet: update NewLocalForceCloseSummary for local taproot output sweep 2023-08-22 16:33:07 -07:00
Olaoluwa Osuntokun ad5305b99c lnwallet: update newIncomingHtlcResolution for taproot chans
Similar to the outgoing resolutions, the main change here is ensuring
the sign method and control block are properly set for the various spend
types.
2023-08-22 16:33:04 -07:00
Olaoluwa Osuntokun a0a3c7aa89 lnwallet: update newOutgoingHtlcResolution for taproot chans
For taproot channels, we need to thread through the control block in the
sign descriptor. We also ensure that the proper sign method is set. We
leverage the new input.Signature generalization be able to support
handling both schnorr and ECDSA signatures for the second level output.
2023-08-22 16:33:01 -07:00
Olaoluwa Osuntokun ee59e3f181 lnwallet: update NewAnchorResolution to support taproot anchors 2023-08-22 16:32:59 -07:00
Olaoluwa Osuntokun a128b74dc1 lnwallet: add tapscript tree to ScriptInfo
In this commit, we add the tapscript tree to the ScriptInfo struct, as
in many cases the caller needs the tree in order to generate the control
block or obtain the taptweak which is needed to spend revoked outputs.
2023-08-22 16:32:56 -07:00
Olaoluwa Osuntokun a74c30fbdd lnwallet: update HtlcSuccessFee + HtlcTimeoutFee for taproot chans
There's no fee, as taproot channels are always zero fee HTLC.
2023-08-22 16:32:54 -07:00
Olaoluwa Osuntokun ebc61818a3 lnwallet: update CommitWeight to return taproot commit weight 2023-08-22 16:32:51 -07:00
Olaoluwa Osuntokun 405a435a84 input: add weight estimation + tests for all taproot witness gen types 2023-08-22 16:32:44 -07:00
Olaoluwa Osuntokun 0d3bed66c0 lnwallet: properly set witness script in CommitScriptToSelf 2023-08-22 16:32:40 -07:00
Olaoluwa Osuntokun 638516879f lnwallet: add extra sanity check in VerifyCommitSig 2023-08-22 16:32:20 -07:00
Olaoluwa Osuntokun 410baae0c7 lnwallet: generate local nonces if non passed in for taproot chans
This ensures that when loading the channel again after a normal chan
reest, we generate the local nonces, which ensures we can then process
nonces the remote party sends us in their chan reest message.
2023-08-22 16:32:18 -07:00
Olaoluwa Osuntokun aaba144804 multi: fix linter warnings 2023-08-22 16:32:00 -07:00
Olaoluwa Osuntokun da1282c17e lnwallet: refactor revocation tests to test for tweakless+taproot 2023-08-22 16:31:57 -07:00
Olaoluwa Osuntokun 3270a29e3e lnwallet: handle nonce init in ProcessChanSyncMsg
In this commit, we update the logic to handle nonce init in
ProcessChanSyncMsg. Once a channel is already open, this is where we'll
get the new nonce data from the remote party we'll use to gain the nonce
we need to sign for their next state.
2023-08-22 16:31:54 -07:00
Olaoluwa Osuntokun 911becb431 lnwallet: move nonce generation into generateRevocation
Before this commit, we would conditionally generate nonces in
RevokeCurrentCommitment. We move this to generateRevocation as this is
called when doing channel sync, and we want to make sure we send the
correct set of nonces.
2023-08-22 16:31:52 -07:00
Olaoluwa Osuntokun 349eee3263 input: ensure sessionOpts is properly threaded through 2023-08-22 16:31:47 -07:00
Olaoluwa Osuntokun d2bc4f29e1 lnwallet: fix bug in deriveMusig2Shachain
In this commit, we fix a bug in the `deriveMusig2Shachain` function
where it didn't actually use the passed in revocation root as part of
the hmac invocation.

We also modify the function to be more generally useable as well, as now
the caller can just pass in the revocation root things should be derived
from.
2023-08-22 16:31:44 -07:00
Olaoluwa Osuntokun 83f1bd4717 lnwallet: return structured error from VerifyCommitSig 2023-08-22 16:31:41 -07:00
Olaoluwa Osuntokun 3879138018 lnwallet: update internal co-op close flow to support musig2 keyspend
In this commit, we update the co-op close flow to support the new musig2
keyspend flow. We'll use some new functional options to allow a caller
to pass in an active musig2 session. If this is present, then we'll use
that to complete the musig2 flow by signing with a partial signature,
and then ultimately combining the signatures at the end.
2023-08-22 16:31:38 -07:00
Olaoluwa Osuntokun c9fc508083 lnwallet/chanvalidate: update ValidateChannel to recognize taproot chans 2023-08-22 16:31:36 -07:00
Olaoluwa Osuntokun b38f9000d5 lnwallet: update testAddSettleWorkflow to test the new taproot flow 2023-08-22 16:31:33 -07:00
Olaoluwa Osuntokun 39d5dffd56 lnwallet: update genHtlcSigValidationJobs to be taproot aware
In this commit, we update the genHtlcSigValidationJobs function to be
taproot aware. As we actually need a schnorr signature for the taproot
validation, we need to coerce the entire wire type into a schnorr sig
with the ForceSchnorr() method.
2023-08-22 16:31:31 -07:00
Olaoluwa Osuntokun 5336f03ac6 lnwallet: update to genRemoteHtlcSigJobs to generate taproot jobs
In this commit, we update the genRemoteHtlcSigJobs function to be able
to generate taproot jobs. We also modify the sigpool to now use a
input.Signature everywhere. This'll allow us to pass around both ECDSA
and Schnorr signatures via the same interface.

We use a tapscript sighash in this case, as all the HTLC spends will
actually be script path spends.
2023-08-22 16:31:28 -07:00
Olaoluwa Osuntokun ca21c4bdb4 lnwallet: update channel state machine to add musig session initialization
In this commit, we update the channel state machine with a new set of
functional options that can be used to create/set the musig session
state. When a channel is made during the funding process, the set of
nonces we want to use is already known, so we allow them to be passed
in. Similarly, once the channel is confirmed, then we'll need to create
another channel instance that this times carries the newly generated
nonces to send along side funding_locked.

We also add some utility methods to permit callers to properly generate
nonces in the various contexts.
2023-08-22 16:31:25 -07:00
Olaoluwa Osuntokun d2526c75f4 lnwallet: update genHTLC script to support segwit v0 + v1 (taproot) HTLCs 2023-08-22 16:31:23 -07:00
Olaoluwa Osuntokun 2a22f5b959 lnwallet: update CreateHtlcTimeoutTx+CreateHtlcSuccessTx for taproot 2023-08-22 16:31:20 -07:00
Olaoluwa Osuntokun 11c62e3951 lnwallet+htlcswitch: add NewCommitState struct, modify send/recv sig to accept
In this commit, we add a new NewCommitState struct. This preps us for
the future change wherein a partial signature is also added to the mix.
All related tests and type signatures have also been updated
accordingly.
2023-08-22 16:31:18 -07:00
Olaoluwa Osuntokun 72d41ae408 lnwallet: export MusigCommitType enum
We need to export the enum as it'll now be used in areas such as the
chan closer.
2023-08-22 16:31:15 -07:00
Olaoluwa Osuntokun c6308130aa lnwallet: add test case for musig2 channel funding 2023-08-22 16:31:10 -07:00
Olaoluwa Osuntokun 67ecefaac3 lnwallet: integrate new taproot channels into internal funding flow
In this commit, we build on all the prior commits and integrate the new
taproot channels into the existing internal funding flow. Along the way,
we do some refactoring to unify things like signing and verifying
incoming commitment transaction signatures.

For our local nonce, we use the existing functional option type to
derive the nonce based on the initial shachain pre-image we'll use as
our revocation.
2023-08-22 16:31:07 -07:00
Olaoluwa Osuntokun 9e8b00241f lnwallet: set new musig2 bool for chanfunding.Request in handleFundingReserveRequest 2023-08-22 16:31:05 -07:00
Olaoluwa Osuntokun 5e511e35fd lnwallet: update CommitScriptAnchors to add taproot awareness
We also update some of the resolutions (even though they aren't hooked
up yet), as they need to be able to properly re-create the set of
scripts.
2023-08-22 16:31:02 -07:00
Olaoluwa Osuntokun cb0229d437 lnwallet: update CommitScriptToRemote to add taproot awareness 2023-08-22 16:31:00 -07:00
Olaoluwa Osuntokun 0e7e29455a lnwallet: update CommitScriptToSelf to add taproot awareness 2023-08-22 16:30:57 -07:00
Olaoluwa Osuntokun f7ba08e147 lnwallet: add new CommitmentTypeSimpleTaproot chan type
In this commit, we add a new wallet level channel type, along with the
new fields we'll need to accept from both parties within the
contribution messages. In this case, we now have a local nonce, along
with the internal musig session.
2023-08-22 16:30:54 -07:00
Olaoluwa Osuntokun 1ed6439c3a lnwallet: add initial unit test coverage for musig chan session 2023-08-22 16:30:49 -07:00
Olaoluwa Osuntokun dafc2a3e5a lnwallet: add new structs to abstract over the asymmetric musig commitment state
In this commit, we add a series of abstractions that'll allow us to
easily do funding and also state updates for the new taproot channels. A
partial session is defined by the knowledge of a verification nonce.
Once the remote party sends a signature, we learn of their signing
nonce, and can then complete a session. By using a JIT nonce approach,
we ensure that the signer can generate their nonces randomly and also
at the very last step to avoid having to maintain state.

For our local nonces, we also have an option to use a counter based
nonce derived from the shachain instead of fully random nonces. This
allows us to not have to store ay additional state. Instead, when we
need to go to broadcast, we can just regenerate the nonce then use that
to broadcast.
2023-08-22 16:30:44 -07:00
Olaoluwa Osuntokun 95d627af4e lnwallet/chanfunding: update assemblers to support musig2
In this commit, we update the set of intents and assemblers to recognize
musig2. For this change, we use a new bool, `musig2`, then use that to
determine if we need to use the new taproot funding scripts or not.
2023-08-22 16:30:42 -07:00
Olaoluwa Osuntokun 9a65806c09 input+wallet: extract musig2 session management into new module
In this commit, we extract the musig2 session management into a new
module. This allows us to re-use the session logic elsewhere in unit
tests so we don't need to instantiate the entire wallet.
2023-08-22 16:30:39 -07:00
Olaoluwa Osuntokun b368e476c5 lnwire: update Sig to support both ECDSA and schnorr sigs
In this commit, we update the Sig type to support ECDSA and schnorr
signatures. We need to do this as the HTLC signatures will become
schnorr sigs for taproot channels. The current spec draft opts to
overload this field since both the sigs are actually 64 bytes in length.
The only consideration with this move is that callers need to "coerce" a
sig to the proper type if they need schnorr signatures.
2023-08-22 16:29:19 -07:00
ziggie 2708626d62 lnwallet: add CancelRebroadcast method.
Adding the ability to stop rebroadcasting a transaction. This is
useful when we want to abandon a channel and grantee that this
transaction will not confirm accidentally.
2023-08-08 09:31:16 +02:00
Oliver Gugger 5919615416 Merge pull request #7746 from ziggie1984/min-relay-fee
Handle Min Mempool Fee error so that lnd will startup correctly
2023-07-26 14:42:49 +02:00
ziggie 54bacec422 lnwallet: add new ErrMempoolFee error. 2023-07-25 01:12:39 +02:00
Slyghtning baa1419187 chanfunding: fix typo 2023-07-24 13:07:01 +02:00
Slyghtning d327c92188 lnwallet: adds selected Outpoints for funding 2023-07-24 12:10:54 +02:00
Slyghtning ac523f93ee chanfunding: adds ability to fund a selected set of coins 2023-07-24 12:10:53 +02:00
Olaoluwa Osuntokun 7f95810359 Merge pull request #7710 from carlaKC/7297-updateaddtlvs
Channeldb: Store HTLC Extra TLVs in Onion Blob Varbytes
2023-06-16 14:31:11 -05:00