1891 Commits
Author SHA1 Message Date
Oliver Gugger 31ba616b1c Merge pull request #7925 from Crypt-iQ/funding_maturity
funding: wait for coinbase maturity before sending channel_ready
2023-10-05 15:26:30 +00:00
Oliver Gugger 563d6d5427 Merge pull request #7970 from bartoli/master
Fix missing space in message
2023-10-05 15:20:14 +00:00
Oliver Gugger 529dc203a5 Merge pull request #8017 from Rooke/master
trivial: Fix spelling errors
2023-10-05 08:42:08 +00:00
yyforyongyu 522518922f lnwallet+rpcserver: fix weight calculation for taproot channels 2023-09-28 19:42:13 +08:00
Michael Rooke 78d9996620 trivial: Fix spelling errors
- Fixes some spelling in code comments and a couple of function names
2023-09-21 22:35:33 -04:00
eugene 5e6ebf561b chanfunding: introduce NewShimIntent for testing
This is needed so that the next commit can create a ShimIntent
without having to export the ShimIntent's fields.
2023-09-21 11:33:42 -04:00
Olaoluwa Osuntokun 8405590152 lnrpc/signrpc+lnwallet/rpcwallet: expose local nonces over RPC
In this commit, we update the set of protos to accept the local secret
nonces over RPC. This is actually a 97 byte value, as it includes the
two 32 byte nonces, as well as the 33 byte value of the public key of
the signer.

This is needed in order to be able to open taproot channels over the RPC
interface.
2023-09-18 11:42:15 -07:00
Olaoluwa Osuntokun ce93b236aa input+lnwallet: modify musig2 interfaces use explicit optional local nonces
In this commit, we modify the musig2 interfaces to instead use an
explicit value for the local nonces. Before this commit, we used the
functional option, but we want to also support specifying this value
over RPC for the remote signer. The functional option pattern is opaque,
so we can't get the nonce value we need. To get around this, we'll just
make this an explicit pointer, then map this to the functional option at
the very last moment.
2023-09-18 11:42:13 -07:00
Olaoluwa Osuntokun de54a603b7 lnwallet+contractcourt: gracefully handle auto force close post data loss
In this commit, update the start up logic to gracefully handle a
seemingly rare case. In this case, a peer detects local data loss with a
set of active HTLCs. These HTLCs then eventually expire (they may or may
not actually "exist"), causing a force close decision. Before this PR,
this attempt would fail with a fatal error that can impede start up.

To better handle such a scenario, we'll now catch the error when we fail
to force close due to entering the DLP and instead terminate the state
machine at the broadcast state. When a commitment transaction eventually
confirms, we'll play it as normal.

Fixes https://github.com/lightningnetwork/lnd/issues/7984
2023-09-15 18:29:09 -07:00
Olaoluwa Osuntokun 0c815af7ff build: update lnd sub modules, and btcd + btcutil 2023-09-11 20:35:06 -07:00
bartoli 92059a5278 Update channel.go
Fix missing space between words
2023-09-09 17:56:34 +02:00
yyforyongyu d8924d26ce chainfee: fix unit test for WebAPIEstimator 2023-09-05 07:44:01 +08:00
Olaoluwa Osuntokunandziggie 01c64712a3 multi: ensure link is always torn down due to db failures, add exponential back off for sql-kvdb failures (#7927)
* lnwallet: fix log output msg

The log message is off by one.

* htlcswitch: fail channel when revoking it fails.

When the revocation of a channel state fails after receiving a new
CommitmentSigned msg we have to fail the channel otherwise we
continue with an unclean state.

* docs: update release-docs

* htlcswitch: tear down connection if revocation processing fails

If we couldn't revoke due to a DB error, then we want to also tear down
the connection, as we don't want the other party to continue to send
updates. That may lead to de-sync'd state an eventual force close.
Otherwise, the database might be able to recover come the next
reconnection attempt.

* kvdb: use sql.LevelSerializable for all backends

In this commit, we modify the default isolation level to be
`sql.LevelSerializable. This is the strictness isolation type for
postgres. For sqlite, there's only ever a single writer, so this doesn't
apply directly.

* kvdb/sqlbase: add randomized exponential backoff for serialization failures

In this commit, we add randomized exponential backoff for serialization
failures. For postgres, we''ll his this any time a transaction set fails
to be linearized. For sqlite, we'll his this if we have many writers
trying to grab the write lock at time same time, manifesting as a
`SQLITE_BUSY` error code.

As is, we'll retry up to 10 times, waiting a minimum of 50 miliseconds
between each attempt, up to 5 seconds without any delay at all. For
sqlite, this is also bounded by the busy timeout set, which applies on
top of this retry logic (block for busy timeout seconds, then apply this
back off logic).

* docs/release-notes: add entry for sqlite/postgres tx retry

---------

Co-authored-by: ziggie <ziggie1984@protonmail.com>
2023-08-30 16:48:00 -07:00
Oliver Gugger 646444cdfe chanfunding: fix PSBT funding for taproot chans 2023-08-29 10:57:38 +02:00
Olaoluwa Osuntokun 92da6b1d44 multi: fix linter warnings with updated linter 2023-08-22 16:34:47 -07:00
Olaoluwa Osuntokun fcbf6f2483 lnwallet: add taproot case to TestForceClose
This adds some extra assertions to ensure things like the taproot
commitment weight estimation is correct.
2023-08-22 16:34:25 -07:00
Olaoluwa Osuntokun ff055ce0a4 lnwallet: uniformly use sighash default everywhere for taproot chans
We use a helper function to ensure that anytime we're about to make a
normal sighash, we consult the channel type to check if we should use
the default value or sighash all explicitly.
2023-08-22 16:34:23 -07:00
Olaoluwa Osuntokun 4b65c71213 lnwallet: for musig2 coop close fee estimation
Co-op close for musig2 chans needs to use the proper witness size.
2023-08-22 16:34:17 -07:00
Olaoluwa Osuntokun a2b277cf1d multi: fix linter errors 2023-08-22 16:34:15 -07:00
Olaoluwa Osuntokun 5739061f13 lnwallet: add first+second level taptweaks to htlc retribution
The first and second level taptweaks need to be stored in order to
ensure the breach arb can play revocations at both the first and second
level.
2023-08-22 16:34:04 -07:00
Olaoluwa Osuntokun 82a5addd3d lnwallet: add error logging to getSignedCommitTx 2023-08-22 16:33:58 -07:00
Olaoluwa Osuntokun 93e8428b6b lnwallet: for taproot channels allow the co-op close tx to be RBF'd
This is a preparatory change for the upcoming "simple channel close"
feature which'll utilize RBF to allow either side to resign the co-op
close transaction for broadcast at any point.
2023-08-22 16:33:48 -07:00
Olaoluwa Osuntokun 4b0139c9ba lnwallet: update channel state machine to use new ScriptDescriptor interface
In this commit, we update the channel state machine to use the new
ScriptDescriptor interface. This fixes some subtle issues with the
existing commits, as for p2wsh we always sign the same witness script,
but for p2tr, the witness script differs depending on which branch is
taken.

With the new abstractions, we can treat p2wsh and p2tr as the same
mostly, right up until we need to obtain a control block or a tap tweak.

All tests have been updated accordingly.
2023-08-22 16:33:46 -07:00
Olaoluwa Osuntokun cdcde6e0a5 contractcourt: update breach arbiter to support taproot chans
In this commit, we update the breach arb to support taproot channels. We
utilize the new taproot briefcase space to store both control blocks,
and also the first+second level scripts for the set of HTLCs.
2023-08-22 16:33:40 -07:00
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