From 64f692b9174f82362b168fb5a9c57916a9fde6b6 Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Thu, 18 Dec 2025 11:46:34 +0100 Subject: [PATCH 1/5] wollet: fix esplora asyncr used without wildcard --- lwk_wollet/src/clients/asyncr/esplora.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lwk_wollet/src/clients/asyncr/esplora.rs b/lwk_wollet/src/clients/asyncr/esplora.rs index 1ea04192..1395d088 100644 --- a/lwk_wollet/src/clients/asyncr/esplora.rs +++ b/lwk_wollet/src/clients/asyncr/esplora.rs @@ -470,6 +470,11 @@ impl EsploraClient { } batch_count += 1; + + if !descriptor.descriptor.has_wildcard() { + // No wildcard, 1 loop is enough + return Ok(data); + } } } Ok(data) From 41ade6e90f812b311f925b80eadda8589e5d2a97 Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Thu, 18 Dec 2025 11:54:13 +0100 Subject: [PATCH 2/5] wollet: add test with esplora async and single key wallet --- lwk_wollet/tests/tr.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/lwk_wollet/tests/tr.rs b/lwk_wollet/tests/tr.rs index 7551044b..e5c6f1c6 100644 --- a/lwk_wollet/tests/tr.rs +++ b/lwk_wollet/tests/tr.rs @@ -1,6 +1,7 @@ use crate::test_wollet::*; use lwk_common::Signer; use lwk_test_util::*; +use lwk_wollet::{ElementsNetwork, WolletBuilder, WolletDescriptor}; #[test] fn test_single_address_tr() { @@ -40,3 +41,41 @@ fn test_single_address_tr() { let sigs_added = signer.sign(&mut pset).unwrap(); assert_eq!(sigs_added, 0); } + +#[tokio::test(flavor = "multi_thread")] +async fn test_single_address_tr_async() { + let env = TestEnvBuilder::from_env().with_esplora().build(); + + let view_key = generate_view_key(); + let pk = "0202020202020202020202020202020202020202020202020202020202020202"; + + let desc = format!("ct({view_key},eltr({pk}))"); + let mut client = lwk_wollet::asyncr::EsploraClient::new( + ElementsNetwork::default_regtest(), + &env.esplora_url(), + ); + let network = ElementsNetwork::default_regtest(); + let descriptor: WolletDescriptor = desc.parse().unwrap(); + let mut wollet = WolletBuilder::new(network, descriptor).build().unwrap(); + + let addr = wollet.address(None).unwrap(); + + let _txid = env.elementsd_sendtoaddress(addr.address(), 2_000_011, None); + + // TODO: wait_update_with_txs is not working correctly in this case. It seems + // it returns even if the tx is not yet in the wallet, fix it and remove this unconditional wait + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + + let update = client.full_scan(&wollet).await.unwrap().unwrap(); + + wollet.apply_update(update).unwrap(); + + let balance = *wollet + .balance() + .unwrap() + .get(®test_policy_asset()) + .unwrap(); + assert!(balance > 0); + let utxos = wollet.utxos().unwrap(); + assert_eq!(utxos.len(), 1); +} From 7a1969a3eb9bd262d41e7dc82c082cbb138a2957 Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Thu, 18 Dec 2025 12:06:10 +0100 Subject: [PATCH 3/5] ci: remove retired macos-13 github job --- .github/workflows/wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index c00ea9c7..b7eec35c 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -27,7 +27,7 @@ jobs: osx-wheels: strategy: matrix: - os: ["macos-13", "macos-14"] # 13 -> x86_64, 14 -> arm64 # https://github.com/actions/runner-images?tab=readme-ov-file#available-images + os: ["macos-14"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 From c28a18ae812506794e770bbfa6fba2ffa0a8c420 Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Thu, 18 Dec 2025 19:38:55 +0100 Subject: [PATCH 4/5] ci: upgrade electrs esplora --- context/download_bins.sh | 8 +++++--- context/env.sh | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/context/download_bins.sh b/context/download_bins.sh index 06cf840d..c9744852 100755 --- a/context/download_bins.sh +++ b/context/download_bins.sh @@ -4,9 +4,11 @@ set -e mkdir -p bin cd bin || exit 1 -# electrs -FNAME=electrs_linux_esplora_a33e97e1a1fc63fa9c20a116bb92579bbf43b254_liquid && \ -curl -Ls https://github.com/RCasatta/electrsd/releases/download/electrs_releases/${FNAME}.gz | gunzip > ${FNAME} && \ +FNAME=electrs_linux_esplora_027e38d3ebc2f85b28ae76f8f3448438ee4fc7b1_liquid && \ +wget https://github.com/RCasatta/electrsd/releases/download/electrs_releases/${FNAME}.zip && \ +unzip ${FNAME}.zip && \ +rm ${FNAME}.zip && \ +mv electrs $FNAME && \ chmod +x $FNAME # waterfalls diff --git a/context/env.sh b/context/env.sh index cc670fb6..1ac765fb 100755 --- a/context/env.sh +++ b/context/env.sh @@ -1,5 +1,5 @@ #!/bin/sh -export ELECTRS_LIQUID_EXEC="$PWD/bin/electrs_linux_esplora_a33e97e1a1fc63fa9c20a116bb92579bbf43b254_liquid" +export ELECTRS_LIQUID_EXEC="$PWD/bin/electrs_linux_esplora_027e38d3ebc2f85b28ae76f8f3448438ee4fc7b1_liquid" export ELEMENTSD_EXEC="$PWD/bin/elements-23.2.4/bin/elementsd" export BITCOIND_EXEC="$PWD/bin/bitcoin-26.0/bin/bitcoind" export WATERFALLS_EXEC="$PWD/bin/waterfalls_b8818e1" From 9b430a5976502a469528d44bb18305122721f924 Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Thu, 18 Dec 2025 19:39:30 +0100 Subject: [PATCH 5/5] ci: use upgraded docker --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d617669c..0ca4d8dd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ variables: DOCKER_TLS_CERTDIR: "" .base: - image: xenoky/lwk-builder@sha256:688515310b737b51a672d49fbdce1dc7c98d3c1f8a7a62c20ec62df01bef87b7 + image: xenoky/lwk-builder@sha256:d6bed899f62f5d9e935c43627f431b5098815211a9f9ad3db4198cf6ecc8a31d tags: - cloud retry: