Skip to content

Commit

Permalink
fix(cli): allow bitcoin-change-address to be omitted when making requ…
Browse files Browse the repository at this point in the history
…est to rpc server (#1728)
  • Loading branch information
binarybaron authored Jul 24, 2024
1 parent c80bdb2 commit 75cfc6b
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 33 deletions.
2 changes: 1 addition & 1 deletion swap/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ pub mod api_test {

Request::new(Method::BuyXmr {
seller,
bitcoin_change_address,
bitcoin_change_address: Some(bitcoin_change_address),
monero_receive_address,
swap_id: Uuid::new_v4(),
})
Expand Down
21 changes: 20 additions & 1 deletion swap/src/api/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ pub struct Request {
pub enum Method {
BuyXmr {
seller: Multiaddr,
bitcoin_change_address: bitcoin::Address,
bitcoin_change_address: Option<bitcoin::Address>,
monero_receive_address: monero::Address,
swap_id: Uuid,
},
Expand Down Expand Up @@ -335,6 +335,25 @@ impl Request {
let env_config = context.config.env_config;
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
.extract_peer_id()
.context("Seller address must contain peer ID")?;
Expand Down
24 changes: 3 additions & 21 deletions swap/src/cli/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,29 +81,11 @@ where
)
.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 =
monero_address::validate_is_testnet(monero_receive_address, is_testnet)?;
let bitcoin_change_address =
bitcoin_address::validate_is_testnet(bitcoin_change_address, is_testnet)?;
let bitcoin_change_address = bitcoin_change_address
.map(|address| bitcoin_address::validate_is_testnet(address, is_testnet))
.transpose()?;

let request = Request::new(Method::BuyXmr {
seller,
Expand Down
29 changes: 19 additions & 10 deletions swap/src/rpc/methods.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,16 +135,25 @@ pub fn register_modules(context: Arc<Context>) -> Result<RpcModule<Arc<Context>>
module.register_async_method("buy_xmr", |params_raw, context| async move {
let params: HashMap<String, String> = params_raw.parse()?;

let bitcoin_change_address =
bitcoin::Address::from_str(params.get("bitcoin_change_address").ok_or_else(|| {
jsonrpsee_core::Error::Custom("Does not contain bitcoin_change_address".to_string())
})?)
.map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?;

let bitcoin_change_address = bitcoin_address::validate(
bitcoin_change_address,
context.config.env_config.bitcoin_network,
)?;
let bitcoin_change_address = params
.get("bitcoin_change_address")
.map(|addr_str| {
bitcoin::Address::from_str(addr_str)
.map_err(|err| {
jsonrpsee_core::Error::Custom(format!(
"Could not parse bitcoin address: {}",
err
))
})
.and_then(|address| {
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 =
monero::Address::from_str(params.get("monero_receive_address").ok_or_else(|| {
Expand Down

0 comments on commit 75cfc6b

Please sign in to comment.