mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-11-11 13:10:39 +00:00
ASB reloads the default wallet after generate_from_keys atomically
This commit is contained in:
parent
684cbe4d0b
commit
947bcb6192
@ -156,7 +156,11 @@ async fn init_wallets(
|
|||||||
bitcoin_balance
|
bitcoin_balance
|
||||||
);
|
);
|
||||||
|
|
||||||
let monero_wallet = monero::Wallet::new(config.monero.wallet_rpc_url.clone(), MONERO_NETWORK);
|
let monero_wallet = monero::Wallet::new(
|
||||||
|
config.monero.wallet_rpc_url.clone(),
|
||||||
|
MONERO_NETWORK,
|
||||||
|
DEFAULT_WALLET_NAME.to_string(),
|
||||||
|
);
|
||||||
|
|
||||||
// Setup the Monero wallet
|
// Setup the Monero wallet
|
||||||
let open_wallet_response = monero_wallet.open_wallet(DEFAULT_WALLET_NAME).await;
|
let open_wallet_response = monero_wallet.open_wallet(DEFAULT_WALLET_NAME).await;
|
||||||
|
@ -289,7 +289,11 @@ async fn init_wallets(
|
|||||||
bitcoin_balance
|
bitcoin_balance
|
||||||
);
|
);
|
||||||
|
|
||||||
let monero_wallet = monero::Wallet::new(config.monero.wallet_rpc_url.clone(), monero_network);
|
let monero_wallet = monero::Wallet::new(
|
||||||
|
config.monero.wallet_rpc_url.clone(),
|
||||||
|
monero_network,
|
||||||
|
MONERO_BLOCKCHAIN_MONITORING_WALLET_NAME.to_string(),
|
||||||
|
);
|
||||||
|
|
||||||
// Setup the temporary Monero wallet necessary for monitoring the blockchain
|
// Setup the temporary Monero wallet necessary for monitoring the blockchain
|
||||||
let open_monitoring_wallet_response = monero_wallet
|
let open_monitoring_wallet_response = monero_wallet
|
||||||
|
@ -220,6 +220,16 @@ pub trait CreateWalletForOutput {
|
|||||||
) -> Result<()>;
|
) -> Result<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
pub trait CreateWalletForOutputThenLoadDefaultWallet {
|
||||||
|
async fn create_and_load_wallet_for_output_then_load_default_wallet(
|
||||||
|
&self,
|
||||||
|
private_spend_key: PrivateKey,
|
||||||
|
private_view_key: PrivateViewKey,
|
||||||
|
restore_height: BlockHeight,
|
||||||
|
) -> Result<()>;
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
pub trait OpenWallet {
|
pub trait OpenWallet {
|
||||||
async fn open_wallet(&self, file_name: &str) -> Result<()>;
|
async fn open_wallet(&self, file_name: &str) -> Result<()>;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use crate::monero::{
|
use crate::monero::{
|
||||||
Amount, CreateWallet, CreateWalletForOutput, GetAddress, InsufficientFunds, OpenWallet,
|
Amount, CreateWallet, CreateWalletForOutput, CreateWalletForOutputThenLoadDefaultWallet,
|
||||||
PrivateViewKey, PublicViewKey, Refresh, Transfer, TransferProof, TxHash, WalletBlockHeight,
|
GetAddress, InsufficientFunds, OpenWallet, PrivateViewKey, PublicViewKey, Refresh, Transfer,
|
||||||
WatchForTransfer,
|
TransferProof, TxHash, WalletBlockHeight, WatchForTransfer,
|
||||||
};
|
};
|
||||||
use ::monero::{Address, Network, PrivateKey, PublicKey};
|
use ::monero::{Address, Network, PrivateKey, PublicKey};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
@ -25,13 +25,15 @@ use url::Url;
|
|||||||
pub struct Wallet {
|
pub struct Wallet {
|
||||||
pub inner: Mutex<wallet::Client>,
|
pub inner: Mutex<wallet::Client>,
|
||||||
pub network: Network,
|
pub network: Network,
|
||||||
|
pub default_wallet_name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Wallet {
|
impl Wallet {
|
||||||
pub fn new(url: Url, network: Network) -> Self {
|
pub fn new(url: Url, network: Network, default_wallet_name: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
inner: Mutex::new(wallet::Client::new(url)),
|
inner: Mutex::new(wallet::Client::new(url)),
|
||||||
network,
|
network,
|
||||||
|
default_wallet_name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +105,38 @@ impl CreateWalletForOutput for Wallet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl CreateWalletForOutputThenLoadDefaultWallet for Wallet {
|
||||||
|
async fn create_and_load_wallet_for_output_then_load_default_wallet(
|
||||||
|
&self,
|
||||||
|
private_spend_key: PrivateKey,
|
||||||
|
private_view_key: PrivateViewKey,
|
||||||
|
restore_height: BlockHeight,
|
||||||
|
) -> Result<()> {
|
||||||
|
let public_spend_key = PublicKey::from_private_key(&private_spend_key);
|
||||||
|
let public_view_key = PublicKey::from_private_key(&private_view_key.into());
|
||||||
|
|
||||||
|
let address = Address::standard(self.network, public_spend_key, public_view_key);
|
||||||
|
|
||||||
|
let wallet = self.inner.lock().await;
|
||||||
|
|
||||||
|
let _ = wallet
|
||||||
|
.generate_from_keys(
|
||||||
|
&address.to_string(),
|
||||||
|
&private_spend_key.to_string(),
|
||||||
|
&PrivateKey::from(private_view_key).to_string(),
|
||||||
|
restore_height.height,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
let _ = wallet
|
||||||
|
.open_wallet(self.default_wallet_name.as_str())
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl OpenWallet for Wallet {
|
impl OpenWallet for Wallet {
|
||||||
async fn open_wallet(&self, file_name: &str) -> Result<()> {
|
async fn open_wallet(&self, file_name: &str) -> Result<()> {
|
||||||
|
@ -10,7 +10,7 @@ use crate::{
|
|||||||
database::Database,
|
database::Database,
|
||||||
execution_params::ExecutionParams,
|
execution_params::ExecutionParams,
|
||||||
monero,
|
monero,
|
||||||
monero::{CreateWalletForOutput, WalletBlockHeight},
|
monero::{CreateWalletForOutputThenLoadDefaultWallet, WalletBlockHeight},
|
||||||
monero_ext::ScalarExt,
|
monero_ext::ScalarExt,
|
||||||
protocol::{
|
protocol::{
|
||||||
alice,
|
alice,
|
||||||
@ -402,7 +402,7 @@ async fn run_until_internal(
|
|||||||
let view_key = state3.v;
|
let view_key = state3.v;
|
||||||
|
|
||||||
monero_wallet
|
monero_wallet
|
||||||
.create_and_load_wallet_for_output(
|
.create_and_load_wallet_for_output_then_load_default_wallet(
|
||||||
spend_key,
|
spend_key,
|
||||||
view_key,
|
view_key,
|
||||||
monero_wallet_restore_blockheight,
|
monero_wallet_restore_blockheight,
|
||||||
|
@ -592,6 +592,7 @@ async fn init_test_wallets(
|
|||||||
let xmr_wallet = swap::monero::Wallet {
|
let xmr_wallet = swap::monero::Wallet {
|
||||||
inner: Mutex::new(monero.wallet(name).unwrap().client()),
|
inner: Mutex::new(monero.wallet(name).unwrap().client()),
|
||||||
network: monero::Network::default(),
|
network: monero::Network::default(),
|
||||||
|
default_wallet_name: "irrelevant_for_tests".to_string(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let electrum_rpc_url = {
|
let electrum_rpc_url = {
|
||||||
|
Loading…
Reference in New Issue
Block a user