Commit graph

161 commits

Author SHA1 Message Date
Binarybaron
7b194f0499 nitpick: Change "Executing parallel requests on electrum clients" to trace 2025-06-15 14:58:04 +02:00
Mohan
4702bd5bf2
feat: Reliable Peer Discovery (#408)
* feat(swap): Allow discovery at multiple rendezvous points, request quotes from locally stored peers

- Ensure uniqueness of the peer_addresses table (no duplicate entries)
- Add peer to local database even if we just request a quote, and no swap (call to list_sellers)
- Refactor list_sellers to take multiple rendezvous points
- Allow db to be passed into list_sellers, if so request quote from all locally stored peers

* feat: editable list of rendezvous points in settings, new maker box on help page

* Recover old commits

* fix small compile errors due to rebase

* amend

* fixes

* fix(gui): Do not display "Core components are loading..." spinner

* fix(gui): Prefer makers with m.minSwapAmount > 0 BTC

* feat(cli, gui): Fetch version of maker

* feat: display progress bar
2025-06-15 14:47:39 +02:00
Binarybaron
686947e8dc fix: Increase request_timeout to 15s, min_retries to 15 for Electrum balancer 2025-06-13 18:40:03 +02:00
Binarybaron
f7b08d4bd5 fix: make clippy happy 2025-06-12 19:16:49 +02:00
unstoppableswap-botty
e66bd04bce
Prepare release 2.0.3 (#407)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-06-12 18:54:44 +02:00
unstoppableswap-botty
9659b0e8c5
Prepare release 2.0.2 (#406)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-06-12 18:51:05 +02:00
Mohan
0fb12fd240
fix(wallet): Backoff for Electrum balancer (#403)
* fix(wallet): Increase request_timeout to 7s, min_retries to 10 for Electrum load balancer

* fix(wallet): Backoff some time before trying Electrum request
2025-06-12 18:14:41 +02:00
Mohan
5f58669915
fix(wallet): Increase request_timeout to 7s, min_retries to 10 for Electrum load balancer (#402) 2025-06-12 17:37:32 +02:00
unstoppableswap-botty
0f57136362
Prepare release 2.0.0 (#400)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-06-12 13:32:55 +02:00
Mohan
c12742c77b
fix(tests): Electrum balancer unit test (#399) 2025-06-12 13:06:05 +02:00
unstoppableswap-botty
1b3fb6730e
Prepare release 2.0.0-beta.2 (#394)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-06-11 21:27:23 +02:00
Mohan
0ac4bbabe3
fix(bob): Only warn if .expired_timelock(..) check fails in BtcLocked state (#393) 2025-06-11 21:12:21 +02:00
unstoppableswap-botty
1fed703b22
Prepare release 2.0.0-beta.1 (#392)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-06-11 20:48:29 +02:00
Mohan
07f935bfbc
feat(protocol): Early Bitcoin refund (#344)
* feat(protocol): Early Bitcoin refund

Alice can choose to let Bob refund his Bitcoin early (before TxCancel timelock expires)

* feat: Let Bob check for TxEarlyRefund

* fix: compile errors
feat(alice): if we cannot lock Monero within 2 minutes, early refund bitcoin

* satisfy clippy

* fix(gui): Emit tauri event when Bitcoin is early refunded

* tests progress

* rename AliceStates

* progress: working prototype!

* add unit tests for tx_early_refund construction (tx_early_refund_can_be_constructed_and_signed, tx_early weight check)

* fix compile error in swap/tests/alice_zero_xmr_early_refund.rs

* only make [`tx_early_refund_sig_bob`] optional in state machine, not message machine

* feat: working integration test alice_zero_xmr_early_refund.rs

* fix tests

* add changelog entry, add integration test with broken monero-wallet-rpc simulation

* amend

* amend changelog

* nitpick

* feat(gui): Bump MIN_ASB_VERSION to 2.0.0

* feat(bob): explicitly check for tx_early_rewfund

* refactor(bob): Assume tx_early_refund will not be published if timelock has expired

* add todo

* refactor

* refactor(swap): Differentiate between BtcRefundPublished, BtcEarlyRefundPublished, BtcEarlyRefunded and BtcRefunded

* refactor: move weight of tx_early into TX_EARLY_REFUND_WEIGHT const

* efactor(swap): Differentiate between BtcRefundPublished,BtcEarlyRefundPublished, BtcEarlyRefunded and BtcRefunded

* small refactors

* nitpciks

* dprint fmt

* add context to get_raw_transaction

* refactor: remove duplicated code in watch_for_redeem_btc, dprint fmt

* fix: parse -5 electrum transaction not found error correctly

* refactor: send btc_refund_finalized flag to tauri with BtcRefunded state

* remove uncessary .context

* dprint dfmt

* remove unused import

* refactor: explicitly mark state3.expired_timelocks(...) as transient error when locking Monero

* use .context instead of ok_or_else(...)

* fix: in get_raw_transaction also check for "missing transaction"

* add 4 different types of tauri events for different refund states

* display BobStateName.BtcEarlyRefunded as done state

* add global bottom to DialogContentText

* fix(gui): Add missing padding in SwapDialog

* proof of concept: electrum load balancer

* load balancer progress

* wrap Mutex<Vec<Arc<BdkElectrumClient<Client>>>> in electrum_balancer in another Arc, free locks as fast as possible

* refactor

* refactor(electrum balancer): use OnceCell to do lazy initilization

* tests

* refactor(electrum): enhance error handling with MultiError for comprehensive failure analysis

This commit introduces a robust MultiError system for the Electrum balancer that collects
and exposes all individual node failures, enabling better error analysis and decision making.

Key improvements:
- Add MultiError struct with methods for inspecting all collected errors from failed nodes
- Modify electrum_balancer::call() to return MultiError instead of single Error
- Enhance Client::get_tx() to properly detect transaction-not-found across multiple nodes
- Add call_async_with_multi_error() method for detailed async error analysis
- Improve error tracing and logging throughout the Bitcoin wallet operations
- Add comprehensive test coverage for MultiError functionality and edge cases
- Remove obsolete should_retry_on_error() logic in favor of MultiError inspection

The MultiError type maintains backward compatibility through automatic conversion to Error
while providing rich error analysis capabilities for callers that need detailed failure
information. This particularly improves handling of transaction-not-found scenarios where
different nodes may return different error formats.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* add changelog entry for electrum node balancing

* refactors of electrum balancer

* only warn if .check_for_tx_early_refund fails

* clippy

* remove verbose message

* use AtomicUsize

* final touches

* log libp2p crates

* merge master

* display LinearProgressWithSubtitle as indeterminate if progress=100%

* let broadcast return a MultiError, log all libp2p crates

* nitpick

* make clippy happy

* log "kind" for join_all load balancer

* add kind to join_all method, show warning alert if alice takes a long time to redeem Bitcoin

* parse multierrors correctly

* fmt

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-11 20:40:16 +02:00
b-enedict
430a22fbf6
refactor(gui): Update MUI to v7 (#383)
* task(gui): update to mui v5

* task(gui): use sx prop instead of system props

* task(gui): update to mui v6 and replace makeStyles with sx prop

* task(gui): update to mui v7

* task(gui): update react

* fix(gui): fix import

* task(gui): adjust theme and few components to fix migration introduced styling errors

* fix(gui): animation issues with text field animations

* fix(gui): remove 'darker' theme and make 'dark' theme the default

- with the new update 'dark' theme is already quite dark and therefore a 'darker' theme not necessary
- the default theme is set to 'dark' now in settings initialization

* feat(tooling): Upgrade dprint to 0.50.0, eslint config, prettier, justfile commands

- Upgrade dprint to 0.50.0
- Use sane default eslint config (fairly permissive)
- `dprint fmt` now runs prettier for the `src-gui` folder
- Added `check_gui_eslint`, `check_gui_tsc` and `check_gui` commands

* refactor: fix a few eslint errors

* dprint fmt

* fix tsc complains

* nitpick: small spacing issue

---------

Co-authored-by: Binarybaron <binarybaron@protonmail.com>
Co-authored-by: Mohan <86064887+binarybaron@users.noreply.github.com>
2025-06-06 22:31:33 +02:00
Mohan
2ba69ba340
fix(asb): send zero quote on failure (#379)
* fix(asb): send zero quote on failure

* static function for BidQuote::ZERO
2025-06-06 15:02:31 +02:00
Binarybaron
119db50c11 amend: event_loop.rs quote failure logging 2025-06-05 00:17:01 +02:00
Raphael
3b3bea8531
feat(asb): Take ongoing swaps into consideration when crafting quote (#245)
* Subtract monero that is reversed for ongoing swaps from the quote volume

* Also reserve monero tx fee

* dprint fmt

* Add todo for better XMR management

* fix dprint lint

* Warn instead of fail, default to 0 quote when reserved funds exceed monero balance

* Add more information to warning

* Add changelog entry

* feat(monero-sys): Initial commit. Regtest integration test. Wrapper around basic Wallet functions, depends on monero#9464

* merge master, extract logic into unreserved_monero_balance

* fmt

* remove shit

* revert

* refactor

* make clippy happy, add comments

* Split code into smaller portions, add unit tests

* refactor, add unit tests

* fmt

* reorder functions

* fix compile error, max timeout of 10s for mutex lock

---------

Co-authored-by: Binarybaron <binarybaron@protonmail.com>
2025-06-05 00:15:42 +02:00
unstoppableswap-botty
b49b5bdbd6
Release version 1.1.7 (#377)
* Prepare release 1.1.7

* amend: CHANGELOG

---------

Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
Co-authored-by: Binarybaron <binarybaron@protonmail.com>
2025-06-04 16:36:37 +02:00
Mohan
b6bfc2e128
fix(monero): Conservative Monero fee for max giveable calcuation (#376)
Increased from 0.000016 XMR to 0.003 XMR
2025-06-04 16:32:32 +02:00
unstoppableswap-botty
708dee16c9
Prepare release 1.1.4 (#375)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-06-04 14:03:10 +02:00
Binarybaron
0307fa6f59 dprint fmt 2025-06-03 11:09:50 +02:00
Mohan
63de5d407d
refactor(wallet): Optimize Bitcoin timelock subscriptions for BDK upgrade (#374) 2025-06-03 11:06:51 +02:00
unstoppableswap-botty
3c7f863b3b
Prepare release 1.1.3 (#367) 2025-05-31 23:33:26 +02:00
Mohan
a33ebfbb3a
feat(asb): add trace flag for stdout (#366)
* fix(asb): include trace option in raw arguments

* feat(asb): Add --trace flag
2025-05-31 13:09:46 +02:00
Mohan
274c630aba
fix(swap): tx_lock_spending_fee was estimated to be zero if utxos less than dust limit (#363)
* fix(swap): tx_lock_spending_fee was estimated to be zero if we had less funds than dust limit

* fix
2025-05-28 17:43:27 +02:00
Mohan
091ba57547
feat(wallet): Use mempool histogram for fee estimation (#358)
* feat(wallet): Use mempool.space as a secondary fee estimation source

* fix: warn if mempool client cannot be instantiated

* make clippy happy

* nitpick: rename clippy_check to clippy in justfile

* rename `estimate_fee_rate_from_mempool` to `estimate_fee_rate_from_histogram` for clarity

* dprint fmt

* make clippy happy

* change teacing level back to debug!

* change log levels

* refactors

* refactor: estimate_fee and min_relay_fee

* serde camel case

Co-authored-by: Byron Hambly <byron@hambly.dev>

* refactors

* Add comments, use Weight struct where possible

* fmt, fix testrs

* dont fallback to bitcoin::MAX, fail instead

* make mempool space optional

* fmt

* refactor: use estimate_fee(...) in max_giveable(...)

* refactor max_giveable(...)

* refactor max_giveeable to return fee as well, remove safety margin for fee

* fix compile

* fmtr

* fix(integration test): Use pre-calculated cancel / punish fees for assert_alice_punished

* fix(integration test): Use real fees for asserts

* sync wallet before transaction_fee call

* split send_to_address into sweep_balance_to_address_dynamic_fee

---------

Co-authored-by: Byron Hambly <byron@hambly.dev>
2025-05-27 15:41:24 +02:00
Binarybaron
96b61d33c6 fix(monero wallet): Properly delete temporary monitoring wallet 2025-05-26 21:04:52 +02:00
Binarybaron
80ea9a60a9 fix(monero wallet): Check if wallet already exists by JsonRpcError Error Code 2025-05-26 19:02:17 +02:00
Mohan
e1a053a6fc
feat(cli): remove monitoring wallet on startup (#360) 2025-05-26 18:49:10 +02:00
Mohan
2133e33ca1
feat(asb, cli): Add safety margin to chosen Bitcoin fee for pre-signed transactions (#355) 2025-05-24 22:25:05 +02:00
unstoppableswap-botty
24a011d411
Release version 1.1.2 (#354)
* Prepare release 1.1.2

* amend: Add changelog for increase in allowed Bitcoin fee

---------

Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
Co-authored-by: Binarybaron <binarybaron@protonmail.com>
2025-05-24 20:47:02 +02:00
Mohan
7f72779680
Increase Bitcoin lock tx fee limit (#349) 2025-05-23 01:08:03 +02:00
Mohan
8d0af2f8b7
refactor(cli): Remove obsolete RPC server (#346) 2025-05-21 18:43:02 +02:00
Mohan
c2fea91390
Fix use of TempDir::keep (#336) 2025-05-21 09:07:27 +02:00
unstoppableswap-botty
840edc3d9e
Prepare release 1.1.1 (#338)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-05-20 15:11:34 +02:00
Mohan
0e25cb86f0
fix(swap): Add retry logic for Bitcoin wallet sync (#333) 2025-05-20 14:21:39 +02:00
Raphael
c4fb2cbd48
feat: log enviroment info (#332) 2025-05-20 12:57:57 +02:00
unstoppableswap-botty
01bac41625
Prepare release 1.1.0 (#329) 2025-05-19 14:52:27 +02:00
unstoppableswap-botty
0c4de7e4cd
Prepare release 1.1.0-rc.3 (#327)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-05-19 01:20:54 +02:00
unstoppableswap-botty
4f3447eaad
Prepare release 1.1.0-rc.2 (#326) 2025-05-19 00:33:12 +02:00
unstoppableswap-botty
008260a839
Prepare release 1.1.0-rc.1 (#325)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-05-18 23:02:19 +02:00
Raphael
3f4cbddf23
upgrade(swap): Concurrent syncing, bdk upgrade, refactors (#180)
* upgrade sqlx to 0.8, add bdk_wallet and bdk_electrum

The new dependencies are part of the bdk upgrade and
include the improved wallet code.
They, too, depend on sqlite3.
However, they use a newer version than we currently use via sqlx.
This necessitated the sqlx upgrade.
This entailed trivial changes (use Pool directly instead of pool.acquire()).
We might have to fix the CI as well, I kept getting compile
errors from the macro until I ran swap/sqlx_dev_setup.sh.

* move old wallet code to extra module

* fix fee estimation for old client

* bump bitcoin crate, add new wallet constructor

* remove unused old Client, move code around for better readibility

* make Wallet generic over Persister (database) and move more code around for readibility

* add script history, start reimplementing client methods

* update some imports

* cargo fmt

* Add comments, fix fee estimation, address generation and status_of_script

* redo state update and wallet sync

* fix bitcoin address validation and more imports, use Amount everywhere

* fix tx cancel, lock, punish, redeem, refund

* fix bitcoin::Address de-/serialisation

* fix more address validation

* fix more address parsing and validation, also some more imports

* cargo fmt

* fix wallet initialization, start wallet migration

* fail test instead of ignoring it

* perform full scan on creation, load from db if it exists

* add more wallet info, fix wallet initialization

* fix: default to null in config

* migrate from old wallet if needed

* change something

* fix some tests

* temporarily patch bdk_wallet and bdk_electrum

* fix more tests

* fix missing rustls

* asb: only start tor client if register_hidden_service=true in the config

* fix: use p2wsh_signature_hash instead of p2wpkh_signature_hash

* fix some bitcoin address parsing and fee rate parsing

* dprint fmt

* add bitcoin-harness to this project and update to the new bitcoin version

* fix max_givible again

* create electrum client separately from wallet, clean up some code

* add comment

* ignore .env.development

* log config file path on ./asb config

* feat(monero-sys): Initial commit. Regtest integration test. Wrapper around basic Wallet functions, depends on monero#9464

* Revert "feat(monero-sys): Initial commit. Regtest integration test. Wrapper around basic Wallet functions, depends on monero#9464"

This reverts commit 14a5b4c348a109d2524657ffeba306422458ea44.

* upgrade to rust toolchain 1.81

* Use new bdk update for code from master

* fix

* remove

* fix: add empty .gitmodules file to fix Docker build

* fix: clean up submodule references

* fix: properly declare monero submodule with ignore flag

* fix(wallet, bdk): only reveal new address if absolutely necessary

* fix: private keys not loaded into bdk wallet

* refactor: sync wallet progress log

* dprint fmt

* refactor: move bitcoin-harness to outside repo

* refactor: remove redundant log message

* Display sync progress

* Remove redundant arg to  swap/tests/harness/mod.rs function

* fix: call rustls::crypto:💍:default_provider()

* dprint fmt

* refactor: remove debug code

* refactor: move old bdk wallet export to own function, clear log messages

* remove old migr for testnets (checksum mismatch), remove balance and stringified last revealed addresses from migration export

* use revalidate_network function, remove redundant drop

* Display progress of background tasks, TauriBackgroundProgressHandle struct

* fix: almost satisfy clippy

* fix: gen-bindings error

* feat: add BackgroundRefund background type

* feat: use builder pattern for constructing Bitcoin wallet

* dprint ftm

* sync electrum in seperate thread

* do not allow user to start sync while sync is in progress

* remove redundant log message

* display random buffer in AlertWithLinearProgress progress

* fix: use TauriContextStatusEvent.Available), dont show syncing wallet spinner if not syncing

* differentiate between TestWalletBuilder and WalletBuilder

* satisfy clippy

* remove custom BackgroundRefund event, move into background process architecture

* refactor

* dprint fmt

* progress: get unit tests compiling

* fix: bitcoin unit tests specify const values like sync_interval

* fix: get unit tests passing

* make clippy happy

* feat: display full sync progress, fix unit test import issues

* dprint fmt

* make clippy happy, use u32 for target_block and not usize

* always spawn tor for asb

* refactor: remove gen_background_progress_id and just use Uuid::new_v4()

* refactor(hooks.ts): clarify comment on useConservativeBitcoinSyncProgress

* fix typo

* refactor: do not let WalletBuilder take entire env struct

* dprint fmt

* refactor: remove default feature from workspace patch of bdk

* first try for concurrent syncing

* refactor: concurrent syncing

* fix(wallet.rs): Safely convert FeeRate from btc / kb to sats / kwu

* feat(wallet.rs): persist published Bitcoin transactions without requiring re-scan

This allows us to compute an updated Bitcoin balance without requiring a re-scan

* refactor(wallet.rs): use just 5 concurrent sync requests

* refactor: display snackbar error when Wallet refresh fails

* fix: add missing space

* dprint fmt

* refactor: fancy traits for the CumulativeProgress struct, allow limiting amount of callback calls

* make clippy happy

* dprint fmt

* refactor: clearly differntiate between SyncMutex and TokioMutex, use traits for converting to Arc<Mutex<_>>, move sync_ext into own moid

* fix: skip syncing if no spks in wallet

* fix: update bdk.sh to test migration from old wallet (pre 1.0.0 bdk) to new bdk

* fix: increase bitcoin_lock_confirmed_timeout in RegTest env to 5 minutes

* refactor: avoid usize where possible, create persistence only after full scan, transmit assumed_total for full scan to tauri, add some icons to progress displays

* make clippy happy

* fix(ci): change rust toolchain 1.81

* fix(cross compilation arm): use ring instead of aws-lc-rs

* fmt

* ignore failing rendezvous tests

* fix printing_status_change_doesnt_spam_on_same_status

* fix: given_bitcoin_address_network_mismatch_then_error test

* ignore list_sellers_should_report_all_registered_asbs_with_a_quote test

* feat: add tor icon

* refactor(wallet.rs): reorder struct by abstraction level

* refactor(bitcoin wallet): chunk size for syncing

* fix(integration tests): decrease sync interval to 3s

* fix(integration tests): parse_rpc_err method to take new bdk error, not old one

* add changelog entry

---------

Co-authored-by: Binarybaron <binarybaron@protonmail.com>
Co-authored-by: Mohan <86064887+binarybaron@users.noreply.github.com>
2025-05-18 22:54:03 +02:00
unstoppableswap-botty
0f2c406915
Prepare release 1.0.0-rc.21 (#318)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-05-15 19:39:53 +02:00
unstoppableswap-botty
75f48e35af
Prepare release 1.0.0-rc.20 (#315)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-05-14 21:07:29 +02:00
Mohan
9da5e432b3
feat(swap): Upgrade monero-wallet-rpc to v0.18.4.0 (#314) 2025-05-14 21:03:17 +02:00
unstoppableswap-botty
66313ad91f
Prepare release 1.0.0-rc.19 (#305)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-04-28 17:03:18 +02:00
unstoppableswap-botty
3cf2337bfb
Prepare release 1.0.0-rc.18 (#304) 2025-04-28 15:52:48 +02:00
Raphael
f1e5cdfbfe
fix(swap): Monero wallet thread safety (#281)
* add comment to ConfirmationListener

* swap: always wrap monero::Wallet in tokio::sync::Mutex

Before, monero::Wallet wrapped a Mutex<Client>, and locked
the mutex on each operation. This meant releasing the
lock in between operations, even though we rely on the
operations being executed in order.

To remedy this race condition, we wrap monero::Wallet itself
in a mutex, requiring any caller to hold the lock for the duration
of the operation, including any suboperations.

* work on: releasing the lock while waiting for confirmations

Due to the newly introduced thread safety, we are currently holding
lock to the monero wallet while waiting for confirmations
-- since this takes a lot of time, it starves all other tasks
that do anything with the monero wallet.

In this commit I start implementing a change that enables us to release
the lock to the wallet while waiting for confirmations and only acquire it
when necessary.

This breaks with the current system of passing just a generic client
which implements the MoneroWalletRpc trait (which we use to pass a dummy
client for testing).

This commit is the first step towards a small refactor to that system.

* always pass Wallet instead of a MoneroWalletRpc client

By always passing Arc<Mutex<Wallet>> instead of MoneroWalletRpc clients
directly we can allow the wait_for_confirmations functions to lock the
Mutex and access the client when they need to, while releasing the lock
when waiting for the next tick. This stops the current starving of other
tasks waiting for the lock.

Since we use a dummy client for testing, this required adding a generic
parameter to the Wallet. However, since we specify a default type,
this doesn't actually require generic handling anywhere.

* add warning comment to monero::wallet::Wallet::from_dummy

* add timeout when waiting for monero lock during quote

This commit adds a timeout after 60 seconds when trying to acquire
the lock on the monero wallet while making a quote.
Should a timout occur, we return an error.
This makes sure that we get _some_ return value and that
starvation is noticed.

* fix lints, don't keep lock during loop body in wait_for_confirmations

* always immediately drop lock in wait_for_transfer

* fix clippy lints

* open wallet instead of failing when we can't create from keys

When we fail to create a monero wallet from keys, we will now try
to open it instead. I also renamed the method to be more consistent
with Wallet::open_or_create.

These changes are mostly taken from #260.

* improve documentation on monero::Wallet

* use Wallet::open instead of Wallet::Client::open

* use create_from_keys_and_sweep in bob's redeem_xmr

This commit deduplicates logic by using
create_from_keys_and_sweep_to in bob's redeem_xmr
and also adds the create_from_keys_and_sweep_to
method while making create_from_keys_and_sweep a
wrapper around it.

* add error context and improve logging

* fix deadlock in wait_for_confirmation_with, add timout to test
2025-04-24 15:34:01 +02:00
Raphael
e8084d65ec
feat(gui): Review logs before sending feedback (#301)
* add review buttons that open the attached logs before submitting feedback
* add redact switches to redact transaction id's from attached logs
2025-04-23 15:09:19 +02:00