Skip to content

Commit

Permalink
Merge pull request #288 from keraliss/send_to_address
Browse files Browse the repository at this point in the history
implement send_to_address
  • Loading branch information
Shourya742 authored Nov 25, 2024
2 parents 06a8b8e + 1a5e1e8 commit 0835a5a
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
27 changes: 27 additions & 0 deletions src/bin/maker-cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ enum Commands {
FidelityBalance,
/// Gets a new address
NewAddress,
// Send to an external wallet address.
SendToAddress {
address: String,
amount: u64,
fee: u64,
},
/// Returns the tor address
GetTorAddress,
/// Returns the data dir
GetDataDir,
}

fn main() -> Result<(), MakerError> {
Expand Down Expand Up @@ -74,6 +84,23 @@ fn main() -> Result<(), MakerError> {
Commands::NewAddress => {
send_rpc_req(&RpcMsgReq::NewAddress)?;
}
Commands::SendToAddress {
address,
amount,
fee,
} => {
send_rpc_req(&RpcMsgReq::SendToAddress {
address,
amount,
fee,
})?;
}
Commands::GetTorAddress => {
send_rpc_req(&RpcMsgReq::GetTorAddress)?;
}
Commands::GetDataDir => {
send_rpc_req(&RpcMsgReq::GetDataDir)?;
}
}

Ok(())
Expand Down
10 changes: 10 additions & 0 deletions src/maker/rpc/messages.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ pub enum RpcMsgReq {
ContractBalance,
FidelityBalance,
NewAddress,
SendToAddress {
address: String,
amount: u64,
fee: u64,
},
GetTorAddress,
GetDataDir,
}

#[derive(Serialize, Deserialize, Debug)]
Expand All @@ -27,4 +34,7 @@ pub enum RpcMsgResp {
ContractBalanceResp(u64),
FidelityBalanceResp(u64),
NewAddressResp(String),
SendToAddressResp(String),
GetTorAddressResp(String),
GetDataDirResp(String),
}
48 changes: 47 additions & 1 deletion src/maker/rpc/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ use std::{
time::Duration,
};

use bitcoin::{Address, Amount};

use crate::{
maker::{error::MakerError, rpc::messages::RpcMsgResp, Maker},
utill::{read_message, send_message},
utill::{get_maker_dir, get_tor_addrs, read_message, send_message},
wallet::{Destination, SendAmount},
};
use std::str::FromStr;

use super::messages::RpcMsgReq;

Expand Down Expand Up @@ -111,6 +115,48 @@ fn handle_request(maker: &Arc<Maker>, socket: &mut TcpStream) -> Result<(), Make
log::info!("Error sending RPC response {:?}", e);
};
}
RpcMsgReq::SendToAddress {
address,
amount,
fee,
} => {
let amount = Amount::from_sat(amount);
let fee = Amount::from_sat(fee);
let destination =
Destination::Address(Address::from_str(&address).unwrap().assume_checked());

let coins_to_send = maker.get_wallet().read()?.coin_select(amount + fee)?;

let tx = maker.get_wallet().write()?.spend_from_wallet(
fee,
SendAmount::Amount(amount),
destination,
&coins_to_send,
)?;

let calculated_fee_rate = fee / (tx.weight());
log::info!("Calculated FeeRate : {:#}", calculated_fee_rate);

let resp =
RpcMsgResp::SendToAddressResp(bitcoin::consensus::encode::serialize_hex(&tx));
if let Err(e) = send_message(socket, &resp) {
log::info!("Error sending RPC response {:?}", e);
};
}
RpcMsgReq::GetDataDir => {
let path = get_maker_dir().display().to_string();
let resp = RpcMsgResp::GetDataDirResp(path);
if let Err(e) = send_message(socket, &resp) {
log::info!("Error sending RPC response {:?}", e);
};
}
RpcMsgReq::GetTorAddress => {
let path = get_maker_dir().join("tor");
let resp = RpcMsgResp::GetTorAddressResp(get_tor_addrs(&path));
if let Err(e) = send_message(socket, &resp) {
log::info!("Error sending RPC response {:?}", e);
};
}
}

Ok(())
Expand Down

0 comments on commit 0835a5a

Please sign in to comment.