fix: Allow bitcoin change address to be omitted when making a request to RPC server

This commit is contained in:
binarybaron 2024-07-24 19:18:32 +02:00
parent 5d31c27890
commit f70696e70c
No known key found for this signature in database
GPG Key ID: 99B75D3E1476A26E
3 changed files with 36 additions and 31 deletions

View File

@ -31,7 +31,7 @@ pub struct Request {
pub enum Method { pub enum Method {
BuyXmr { BuyXmr {
seller: Multiaddr, seller: Multiaddr,
bitcoin_change_address: bitcoin::Address, bitcoin_change_address: Option<bitcoin::Address>,
monero_receive_address: monero::Address, monero_receive_address: monero::Address,
swap_id: Uuid, swap_id: Uuid,
}, },
@ -335,6 +335,25 @@ impl Request {
let env_config = context.config.env_config; let env_config = context.config.env_config;
let seed = context.config.seed.clone().context("Could not get seed")?; let seed = context.config.seed.clone().context("Could not get seed")?;
// When no change address was provided we default to the internal wallet
let bitcoin_change_address = match bitcoin_change_address {
Some(addr) => addr,
None => {
let internal_wallet_address = context
.bitcoin_wallet()
.expect("bitcoin wallet should exist")
.new_address()
.await?;
tracing::info!(
internal_wallet_address=%internal_wallet_address,
"No --change-address supplied. Any change will be received to the internal wallet."
);
internal_wallet_address
}
};
let seller_peer_id = seller let seller_peer_id = seller
.extract_peer_id() .extract_peer_id()
.context("Seller address must contain peer ID")?; .context("Seller address must contain peer ID")?;

View File

@ -81,29 +81,12 @@ where
) )
.await?; .await?;
// when no refund address was provided we default to the internal wallet
let bitcoin_change_address = match bitcoin_change_address {
Some(addr) => addr,
None => {
let internal_wallet_address = context
.bitcoin_wallet()
.expect("bitcoin wallet should exist")
.new_address()
.await?;
tracing::info!(
internal_wallet_address=%internal_wallet_address,
"No --change-address supplied. Any change will be received to the internal wallet."
);
internal_wallet_address
}
};
let monero_receive_address = let monero_receive_address =
monero_address::validate_is_testnet(monero_receive_address, is_testnet)?; monero_address::validate_is_testnet(monero_receive_address, is_testnet)?;
let bitcoin_change_address = let bitcoin_change_address = bitcoin_change_address.map(|address| {
bitcoin_address::validate_is_testnet(bitcoin_change_address, is_testnet)?; bitcoin_address::validate_is_testnet(address, is_testnet)
}).transpose()?;
let request = Request::new(Method::BuyXmr { let request = Request::new(Method::BuyXmr {
seller, seller,

View File

@ -135,16 +135,19 @@ pub fn register_modules(context: Arc<Context>) -> Result<RpcModule<Arc<Context>>
module.register_async_method("buy_xmr", |params_raw, context| async move { module.register_async_method("buy_xmr", |params_raw, context| async move {
let params: HashMap<String, String> = params_raw.parse()?; let params: HashMap<String, String> = params_raw.parse()?;
let bitcoin_change_address = let bitcoin_change_address = params
bitcoin::Address::from_str(params.get("bitcoin_change_address").ok_or_else(|| { .get("bitcoin_change_address")
jsonrpsee_core::Error::Custom("Does not contain bitcoin_change_address".to_string()) .map(|addr_str| {
})?) bitcoin::Address::from_str(addr_str)
.map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; .map_err(|err| {
jsonrpsee_core::Error::Custom(format!("Could not parse bitcoin address: {}", err))
let bitcoin_change_address = bitcoin_address::validate( })
bitcoin_change_address, .and_then(|address| {
context.config.env_config.bitcoin_network, bitcoin_address::validate(address, context.config.env_config.bitcoin_network)
)?; .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))
})
})
.transpose()?;
let monero_receive_address = let monero_receive_address =
monero::Address::from_str(params.get("monero_receive_address").ok_or_else(|| { monero::Address::from_str(params.get("monero_receive_address").ok_or_else(|| {