fix(abs): open existing monero wallet if it already exists#260
Closed
Einliterflasche wants to merge 2 commits intomasterfrom
Closed
fix(abs): open existing monero wallet if it already exists#260Einliterflasche wants to merge 2 commits intomasterfrom
Einliterflasche wants to merge 2 commits intomasterfrom
Conversation
This commit introduces logic that, if we fail to generate a new monero wallet because it already exists, tries to open the existing wallet instead of aborting instantly. I also ran dprint and clippy.
|
I think there's already some other code that does the same. Can you check how it's done there (and fix it there as well if needed) |
Author
|
I removed code from one instance where we did the fallback as well and now use the updated function. Also changed some function names to be more consistent. |
binarybaron
reviewed
Jan 30, 2025
|
|
||
| impl Wallet { | ||
| /// Connect to a wallet RPC and load the given wallet by name. | ||
| pub async fn open_or_create(url: Url, name: String, env_config: Config) -> Result<Self> { |
There was a problem hiding this comment.
I think the previous name was better. It should be made explicit that we'll be creating a wallet if it does not exist.
|
@Einliterflasche I'd recommend squashing the changes from this PR into #281, and closing this one. |
Einliterflasche
added a commit
that referenced
this pull request
Apr 22, 2025
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.
binarybaron
pushed a commit
that referenced
this pull request
Apr 24, 2025
* 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR introduces logic that, if we fail to generate a new monero wallet because it already exists, tries to open the existing wallet instead of aborting instantly.
Also ran dprint and clippy.