Commit graph

115 commits

Author SHA1 Message Date
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
Raphael
3fa31ba139
feat(gui): Tor toggle (#300)
* re-add tor info box, show switch for toggling tor

* add use_tor to TauriSettings, only initialize tor client when it's true

* add warning log message when not using tor client

* change the label text of the switch, fail to align switch with SettingsBox icons

* move Tor settings to SettingsBox
2025-04-22 16:36:09 +02:00
unstoppableswap-botty
ffe103cb49
Prepare release 1.0.0-rc.17 (#297)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-04-18 02:06:09 +02:00
Mohan
9ddf2daafe
feat(gui): Approve dialog before publishing Bitcoin lock transaction (#291)
This diff introduces a new "approvals" mechanism that alters the swap flow by requiring explicit user intervention before the Bitcoin lock transaction is broadcast. Previously, the Bitcoin lock was executed automatically without any user prompt. Now, the backend defines `ApprovalRequestType` (e.g. a `PreBtcLock` variant with details like `btc_lock_amount`, `btc_network_fee`, and `xmr_receive_amount`) and `ApprovalEvent` (with statuses such as `Pending`, `Resolved`, and `Rejected`). The method `request_approval()` in the `TauriHandle` struct uses a oneshot channel and concurrent timeout handling via `tokio::select!` to wait for the user's decision. Based on the outcome—explicit approval or timeout/rejection—the approval event is emitted through the `emit_approval()` helper, thereby gating the subsequent broadcast of the Bitcoin lock transaction.

On the UI side, changes have been made to reflect the new flow; the modal (for example, in `SwapSetupInflightPage.tsx`) now displays the swap details along with explicit action buttons that call `resolveApproval()` via RPC when clicked. The Redux store, selectors, and hooks like `usePendingPreBtcLockApproval()` have been updated to track and display these approval events. As a result, the overall functionality now requires the user to explicitly approve the swap offer before proceeding, ensuring they are aware of the swap's key parameters and that the locking of funds occurs only after their confirmation.
2025-04-18 01:51:55 +02:00
unstoppableswap-botty
ab5f93ff44
Prepare release 1.0.0-rc.16 (#294) 2025-04-17 22:00:52 +02:00
Mohan
b3559421ae
feat(asb): Cache quotes (#288) 2025-04-17 16:22:30 +02:00
unstoppableswap-botty
8d4f714015
Prepare release 1.0.0-rc.14 (#290)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2025-04-16 15:10:24 +02:00
Raphael
24cfa71932
cli: log the reason we can't find tx_cancel (#289)
* cli: log the reason we can't find tx_cancel

When we can't find tx_cancel even though the cancel timelock
expired, we publish it ourselves.

However, some users had a problem where the tx_cancel wasn't
found even though it was already published.
This leads to the cli getting stuck in `CancelTimelockExpired`
when it should go to `BtcCancelled`.
This commit introduces an additional log statement that will
help us narrow down why that is.

* gui: update the documentation icon
2025-04-16 13:44:37 +02:00
Mohan
7023a186b1
fix(swap): Error handling for fallback during Monero tx monitoring (#278) 2025-03-17 15:58:51 +01:00
unstoppableswap-botty
dfe1a28267
Prepare release 1.0.0-rc.13 (#259) 2025-01-24 02:54:38 +01:00
Mohan
c9d3536f36
fix(gui): Button to open data directory (#256) 2025-01-22 16:29:11 +01:00
binarybaron
29da23ea60
fix(asb): Would silently fail if Monero refund transaction publish failed (#254) 2025-01-21 14:01:57 +01:00
unstoppableswap-botty
3e6b25a0c8
Prepare release 1.0.0-rc.12 (#252) 2025-01-16 11:46:02 +01:00
binarybaron
5e9240b628
fix(cli): Correctly check for available nodes, remove dead nodes (#251)
There was an issue before we were falsely applying a default node to use and not actually iterating through our list and checking for availiability. This commit fixes this issue and removes a few dead nodes.
2025-01-14 23:23:33 +01:00
binarybaron
cf20891638
fix(gui): Fetch balance after swap is released, re-fetch database after progress event, change wording in progress page (#237) 2024-12-23 11:59:40 +01:00
unstoppableswap-botty
27e8467ac5
Prepare release 1.0.0-rc.11 (#236) 2024-12-23 00:33:51 +01:00
binarybaron
a138f29d67
bump: arti to 0.25.0 (#233) 2024-12-20 12:15:29 +01:00
binarybaron
b7929ca0c4
feat(asb): Print more information when history command is invoked (#218) 2024-12-20 12:00:56 +01:00
unstoppableswap-botty
b7631d2d47
Prepare release 1.0.0-rc.10 (#226) 2024-12-05 17:16:15 +01:00
Binarybaron
23ccee1436 Revert "Prepare release 1.0.0-rc.9 (#224)"
This reverts commit e11dbed14d.
2024-12-05 16:51:37 +01:00
unstoppableswap-botty
e11dbed14d
Prepare release 1.0.0-rc.9 (#224) 2024-12-04 18:48:42 +01:00
unstoppableswap-botty
1dca3b852b
Prepare release 1.0.0-rc.8 (#223)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-12-04 16:23:29 +01:00
binarybaron
c5894eacdc
feat(asb): Retry publishing Bitcoin redeem transaction (#221) 2024-12-04 15:24:10 +01:00
binarybaron
2633e8e6bf
fix(asb): Compilation error introduced in #203 (#222) 2024-12-03 22:18:24 +01:00
binarybaron
d53c12d64e
feat(asb, cli): Listen on onion address, dial onion addresses (#203)
This pull requests
- Adds rust native support for the `asb` to listen on an onion service. Previously we were depedent on a seperately running `torc` client. Instead we now use [arti](https://tpo.pages.torproject.net/core/arti/), a rust implementation of the tor protocol.
- Removes the `tor.control_port` and `tor.socks5_port` property from the config of the `asb`
- Adds a new `tor.register_hidden_service` boolean property to the config of the `asb` which when enabled automatically runs a hidden service at startup
- Adds a new `tor.hidden_service_num_intro_points` config property to specify how many introduction points to register the onion service at
- Adds support for the `cli` to dial onion addresses

This is dependent on https://github.com/umgefahren/libp2p-tor/pull/24

Closes https://github.com/UnstoppableSwap/core/issues/16
2024-12-03 21:24:33 +01:00
binarybaron
45a4cf4fb7
fix(docs): Link to asb docs 2024-12-03 17:56:48 +01:00
Binarybaron
22878c8270 fix(gui): Do not fail get_swap_infos_call if >1 retrieval fails 2024-11-29 22:39:20 +01:00
binarybaron
3143a02d06
fix(asb): Check for updates in background (#215) 2024-11-29 20:37:33 +01:00
Einliterflasche
d9d12fabec
Merge pull request #214 from UnstoppableSwap/docs/fix-links
fix(docs): update links that pointed to docs/ to dev-docs/
2024-11-29 16:17:43 +01:00
einliterflasche
a333725577 remove sqlx cache data from git 2024-11-29 16:14:04 +01:00
einliterflasche
a67814868c update more links from docs/ to dev-docs/ 2024-11-29 16:11:40 +01:00
binarybaron
72d324780e
fix(gui): Only refund swaps in the background that haven't been refunded yet (#212) 2024-11-26 17:55:17 +01:00
unstoppableswap-botty
9b4e8540b5
Prepare release 1.0.0-rc.7 (#210)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-11-26 14:57:32 +01:00
binarybaron
b2e74df37e
feat: Maker avatar (#205)
- GUI: Changed terminology from "swap providers" to "makers"
- GUI: For each maker, we now display a unique deterministically generated avatar derived from the maker's public key
2024-11-25 20:15:09 +01:00
unstoppableswap-botty
92f6efc34b
Prepare release 1.0.0-rc.6 (#200)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-11-21 11:20:51 +01:00
binarybaron
a051cffb66
fix(swap): Disable verbose libp2p logging 2024-11-21 11:11:48 +01:00
binarybaron
689dd89e72
feat(swap): Start wallets and tor client in parallel (#198)
CLI + GUI: At startup the wallets and tor client are started in parallel. This will speed up the startup time of the application.
2024-11-21 01:51:19 +01:00
binarybaron
6cd228fada
feat(swap): Use art_client to dial over Tor (#196)
- Upgrade `sqlx` to `0.8`
- Use `arti_client@0.24` in combination with [`libp2p-community-tor`](https://crates.io/crates/libp2p-community-tor/0.4.1). https://github.com/umgefahren/libp2p-tor/pull/18 was required for this.
- Display spinner in GUI while Tor circuits are being established
- Remove unused dependencies (`once_cell`, `tauri-plugin-devtools`, `digest`, `hyper`, `itertools`, `erased_serde`)
- Bundle roboto font from npm registry
2024-11-21 01:00:36 +01:00
unstoppableswap-botty
d0108fd857
Prepare release 1.0.0-rc.5 (#195)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-11-19 17:28:21 +01:00
binarybaron
81f41183ae
feat(asb): Change log level of rendezvous register logs to TRACE (#188) 2024-11-19 14:57:49 +01:00
unstoppableswap-botty
56363da214
Prepare release 1.0.0-rc.4 (#187) 2024-11-17 17:07:38 +01:00
binarybaron
82c4b600c8
fix(ci): Use ubuntu-22.04 to build GUI, enable preview builds, revert 1.0.0-rc.3 (#185)
* fix(ci): Use ubuntu-22.04 to build GUI

* Revert "Prepare release 1.0.0-rc.3 (#184)"

This reverts commit 6bf90eb28e.
2024-11-17 12:42:57 +01:00
unstoppableswap-botty
6bf90eb28e
Prepare release 1.0.0-rc.3 (#184)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-11-17 12:21:38 +01:00
binarybaron
3085eee19f
feat(swap): Log tracing in rolling log files (#155)
We now log verbose messages to hourly rotating `tracing*.log` which are kept for 24 hours. General logs are written to `swap-all.log`.
2024-11-16 21:54:02 +01:00
unstoppableswap-botty
56102fa379
Prepare release 1.0.0-rc.2 (#179) 2024-11-16 13:01:44 +01:00
unstoppableswap-botty
38e07c9937
Prepare release 1.0.0-rc.1 (#175)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-11-15 14:51:07 +01:00
unstoppableswap-botty
afdf310890
Prepare release 1.0.0-alpha.3 (#174)
Co-authored-by: UnstoppableSwap Botty <help@unstoppableswap.net>
2024-11-15 00:26:07 +01:00