Update LDK dependency for splicing, http, and wallet_utils#794
Update LDK dependency for splicing, http, and wallet_utils#794jkczyz wants to merge 5 commits intolightningdevkit:mainfrom
Conversation
|
👋 Thanks for assigning @tnull as a reviewer! |
| Ok(txid) | ||
| } | ||
|
|
||
| pub(crate) fn select_confirmed_utxos( |
There was a problem hiding this comment.
@tnull I'm wondering if we should implement CoinSelectionSource and use this rather than using LdkWallet for UTXO selection. It would prevent double persistence when we need a change output and the need for an explicit persist method after selection.
There was a problem hiding this comment.
Yeah, that seems preferable, if we have everything we need in the API by now?
There was a problem hiding this comment.
Right, I think the question may be whether we use our own CoinSelectionSource for anchor bumping, too. It depends on how UTXO locking will work. LdkWallet manages whether or not to try to double-spend based on the claim id, whereas for splicing we may accidentally double spend one of those if using our own CoinSelectionSource. Pushed a fixup commit implementing CoinSelectionSource for splicing.
There was a problem hiding this comment.
Huh, well the branch shows the fixup. Not sure why the PR hasn't updated.
There was a problem hiding this comment.
Right, I think the question may be whether we use our own CoinSelectionSource for anchor bumping, too.
It would be great to reuse the same codepaths, IMO. That is, if the API now permits for it.
It depends on how UTXO locking will work. LdkWallet manages whether or not to try to double-spend based on the claim id, whereas for splicing we may accidentally double spend one of those if using our own CoinSelectionSource.
Right, we're still waiting on bitcoindevkit/bdk_wallet#259 to ship with BDK 3.0. For now I'm not sure if we'd then need to also do some tracking based on ClaimId.
There was a problem hiding this comment.
Discussed offline. We'll use the current approach and then once BDK ships a new release we can revisit coin selection for anchor bumping.
Alternatives would be to either (1) drop the fixup such that we use LdkWallet for both coin selections or (2) maintain a locked UTXO list for splice coin selection and filter WalletSource::list_confirmed_utxos so that anchor bumping doesn't double spend splicing.
| Ok(txid) | ||
| } | ||
|
|
||
| pub(crate) fn select_confirmed_utxos( |
There was a problem hiding this comment.
Yeah, that seems preferable, if we have everything we need in the API by now?
4c01c07 to
4891c0b
Compare
7ccaa2a to
01102e6
Compare
There was a problem hiding this comment.
Seems this should be based on lightningdevkit/rust-lightning#4382 as it now has landed, as is the next related breaking change?
tnull
left a comment
There was a problem hiding this comment.
Changes LGTM, but as mentioned above it would be good to add a second commit to bump once more and include latest wallet-related API fixes, so that after this PR we can build against current LDK main again.
| fn sign_psbt<'a>( | ||
| &'a self, psbt: Psbt, | ||
| ) -> impl Future<Output = Result<Transaction, ()>> + Send + 'a { | ||
| debug_assert!(false); |
There was a problem hiding this comment.
It's only used for anchor bumping. For splicing, we provide signatures when handling FundingTransactionReadyForSigning and calling ChannelManager::funding_transaction_signed.
Yeah, unfortunately lightningdevkit/rust-lightning#4350 landed between the two PRs. Working on updating now. |
01102e6 to
f78aa6c
Compare
splice_in/splice_out to use new LDK two-phase funding API |
Ok, I changed the branch I used for updating |
|
May need to rebase to fix CI. Looking... |
Ah, actually looks like we still need to update for lightningdevkit/rust-lightning#4425. Will update shortly. |
f78aa6c to
ad6c554
Compare
tnull
left a comment
There was a problem hiding this comment.
Mostly looks good, two questions.
src/wallet/mod.rs
Outdated
| .filter(|txout| must_pay_to.iter().all(|output| output != txout)) | ||
| .next(); | ||
|
|
||
| locked_wallet.persist(&mut locked_persister).map_err(|e| { |
There was a problem hiding this comment.
Remind me, why is this persist call necessary now? I'm not positive any of the wallet state should change here?
There was a problem hiding this comment.
We probably only need to do so if change_output is Some actually. Previously, we persisted in splice_in when calling get_new_internal_address to give to LDK a change script.
| impl TryInto<FeeResponse> for JsonResponse { | ||
| type Error = std::io::Error; | ||
| fn try_into(self) -> std::io::Result<FeeResponse> { | ||
| type Error = String; |
There was a problem hiding this comment.
Hmm, I think we previously used std::io::Result in these internal APIs as it was used by lightning-block-sync to begin with. If we now don't use it in lightning-block-sync and have rpc_client_error_to_io and http_client_error_to_io, I do wonder if we should rather introduce a dedicated local error type that then implements std::error::Error and we can add From<{HttpClientError,RpcClientError}> for NewLocalRpcError for?
There was a problem hiding this comment.
Yeah, good idea. Though just made the conversions explicit with map_err.
ad6c554 to
9617ea5
Compare
Update splice_in/splice_out to use new LDK two-phase funding API The LDK dependency bump introduced a new splicing API that separates negotiation from coin selection, letting LDK handle transaction construction internally rather than requiring manual UTXO selection and change address management. Generated with the assistance of AI (Claude Code). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The latest LDK dependency bump replaced the custom HTTP implementation in lightning-block-sync with the `bitreq` crate, changing constructor signatures, error types, and response parsing constraints. Update the bitcoind chain source to use the new string-based URL constructors and structured error enums. Use a dedicated BitcoindClientError type since std::io::Error was only used previously because that was used upstream. Generated with the assistance of AI (Claude Code). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The macro was removed in favor of a function.
Some types previously existing in lightning::events::bump_transaction have been moved to lightning::util::wallet_utils.
9617ea5 to
3d1bb98
Compare
| #lightning-liquidity = { version = "0.2.0", features = ["std"] } | ||
| #lightning-macros = { version = "0.2.0" } | ||
|
|
||
| lightning = { git = "https://github.com/lightningdevkit/rust-lightning", rev = "b6c17c593a5d7bacb18fe3b9f69074a0596ae8f0", features = ["std"] } |
There was a problem hiding this comment.
can we do commit 2d2151a4e40734b871289e8bb0fa13466c0ea60a to include the paginated kv store stuff? Will need this for #772
There was a problem hiding this comment.
Whoops... Looks like I need to account for some test changes. Will do so in little bit.
There was a problem hiding this comment.
Hmm, but we also need to add the PaginatedKVStore impls for SqliteStore and VssStore. @benthecarman Do you plan to do that in commits in #772? IMO that's a bit odd as the PR is somewhat orthogonal? Or would you prefer me to do it in a separate PR?
e95e7a9 to
759a4d4
Compare
The LDK dependency bump introduced a new splicing API that separates negotiation from coin selection (lightningdevkit/rust-lightning#4290), letting LDK handle transaction construction internally rather than requiring manual UTXO selection and change address management.
Also handles changes to
lightning-block-syncmoving tobitreq(lightningdevkit/rust-lightning#4350), making a test macro a function (lightningdevkit/rust-lightning#4425), and moving some coin selection utils towallet_utils(lightningdevkit/rust-lightning#4382).