Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions examples/taker_basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
};
use coinswap::{
taker::{SwapParams, Taker},
wallet::RPCConfig,
wallet::{AddressType, RPCConfig},
};
println!("=== Coinswap Taker Basic Example ===");
println!("NOTE: When prompted for encryption passphrase, press Enter for no encryption");
Expand Down Expand Up @@ -117,7 +117,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("\nFunding wallet with test coins...");

let wallet_mut = taker.get_wallet_mut();
let funding_address = wallet_mut.get_next_external_address().unwrap();
let funding_address = wallet_mut
.get_next_external_address(AddressType::P2WPKH)
.unwrap();

// Send coins from bitcoind to the taker wallet
let fund_amount = Amount::from_btc(0.01).unwrap();
Expand Down Expand Up @@ -151,13 +153,18 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {

// Generate a new receiving address
let wallet_mut = taker.get_wallet_mut();
let new_address = wallet_mut.get_next_external_address().unwrap();
let new_address = wallet_mut
.get_next_external_address(AddressType::P2WPKH)
.unwrap();
println!("\nGenerated new receiving address: {}", new_address);

// Demonstrate sending coins (send small amount to ourselves)
println!("\nDemonstrating send functionality:");
let send_amount = Amount::from_btc(0.001).unwrap();
let internal_address = wallet_mut.get_next_internal_addresses(1).unwrap()[0].clone();
let internal_address = wallet_mut
.get_next_internal_addresses(1, AddressType::P2WPKH)
.unwrap()[0]
.clone();

println!(
"Sending {} BTC to internal address: {}",
Expand Down
14 changes: 10 additions & 4 deletions examples/wallet_basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use bitcoind::{
};
use coinswap::{
utill::MIN_FEE_RATE,
wallet::{Destination, RPCConfig, Wallet},
wallet::{AddressType, Destination, RPCConfig, Wallet},
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
Expand Down Expand Up @@ -95,7 +95,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Wallet synced with blockchain");

// Fund the wallet for demonstration
let funding_address = wallet.get_next_external_address().unwrap();
let funding_address = wallet
.get_next_external_address(AddressType::P2WPKH)
.unwrap();
let fund_amount = Amount::from_btc(0.05).unwrap();
let _txid = bitcoind
.client
Expand Down Expand Up @@ -165,8 +167,12 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {

// Generate addresses
println!("\nAddress Generation:");
let external_address = wallet.get_next_external_address().unwrap();
let internal_addresses = wallet.get_next_internal_addresses(2).unwrap();
let external_address = wallet
.get_next_external_address(AddressType::P2WPKH)
.unwrap();
let internal_addresses = wallet
.get_next_internal_addresses(2, AddressType::P2WPKH)
.unwrap();
println!(" External (receiving): {external_address}");
println!(
" Internal (change): {} {}",
Expand Down
7 changes: 5 additions & 2 deletions src/bin/taker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use clap::Parser;
use coinswap::{
taker::{error::TakerError, offers::MakerState, SwapParams, Taker, TaprootTaker},
utill::{parse_proxy_auth, setup_taker_logger, MIN_FEE_RATE, UTXO},
wallet::{Destination, RPCConfig, Wallet},
wallet::{AddressType, Destination, RPCConfig, Wallet},
};
use log::LevelFilter;
use serde_json::{json, to_string_pretty};
Expand Down Expand Up @@ -284,7 +284,9 @@ fn main() -> Result<(), TakerError> {
);
}
Commands::GetNewAddress => {
let address = taker.get_wallet_mut().get_next_external_address()?;
let address = taker
.get_wallet_mut()
.get_next_external_address(AddressType::P2WPKH)?;
println!("{address:?}");
}
Commands::SendToAddress {
Expand Down Expand Up @@ -318,6 +320,7 @@ fn main() -> Result<(), TakerError> {
let destination = Destination::Multi {
outputs,
op_return_data: None,
change_address_type: AddressType::P2WPKH,
};

let tx = taker.get_wallet_mut().spend_from_wallet(
Expand Down
13 changes: 8 additions & 5 deletions src/maker/api2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ use crate::{
},
},
utill::{check_tor_status, get_maker_dir, HEART_BEAT_INTERVAL, MIN_FEE_RATE},
wallet::{Destination, IncomingSwapCoinV2, OutgoingSwapCoinV2, RPCConfig, Wallet, WalletError},
wallet::{
AddressType, Destination, IncomingSwapCoinV2, OutgoingSwapCoinV2, RPCConfig, Wallet,
WalletError,
},
watch_tower::{
registry_storage::FileRegistry,
rpc_backend::BitcoinRpc,
Expand Down Expand Up @@ -626,6 +629,7 @@ impl Maker {
Destination::Multi {
outputs: vec![(contract_address, outgoing_contract_amount)],
op_return_data: None,
change_address_type: AddressType::P2TR,
},
&selected_utxos,
)?;
Expand Down Expand Up @@ -681,7 +685,7 @@ impl Maker {
script_pubkey: self
.wallet
.read()?
.get_next_internal_addresses(1)
.get_next_internal_addresses(1, AddressType::P2TR)
.map_err(MakerError::Wallet)?[0]
.script_pubkey(),
}],
Expand Down Expand Up @@ -923,11 +927,10 @@ impl Maker {

// Record the swept coin to track swap balance
let output_scriptpubkey = spending_tx.output[0].script_pubkey.clone();
// [TODO] Look into the key value pair later, it shouldn't be both sriptpubkey
wallet
.store
.swept_incoming_swapcoins
.insert(output_scriptpubkey.clone(), output_scriptpubkey);
.insert(output_scriptpubkey);

wallet.remove_incoming_swapcoin_v2(&incoming_txid);
log::info!(
Expand Down Expand Up @@ -976,7 +979,7 @@ impl Maker {
let destination_address = {
let wallet = self.wallet.read()?;
wallet
.get_next_internal_addresses(1)
.get_next_internal_addresses(1, AddressType::P2TR)
.map_err(MakerError::Wallet)?[0]
.clone()
};
Expand Down
8 changes: 6 additions & 2 deletions src/maker/rpc/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use super::messages::RpcMsgReq;
use crate::{
maker::{config::MakerConfig, error::MakerError, rpc::messages::RpcMsgResp},
utill::{get_tor_hostname, read_message, send_message, HEART_BEAT_INTERVAL, UTXO},
wallet::{Destination, Wallet},
wallet::{AddressType, Destination, Wallet},
};
use std::{path::Path, str::FromStr, sync::RwLock};

Expand Down Expand Up @@ -78,7 +78,10 @@ fn handle_request<M: MakerRpc>(maker: &Arc<M>, socket: &mut TcpStream) -> Result
RpcMsgResp::TotalBalanceResp(balances)
}
RpcMsgReq::NewAddress => {
let new_address = maker.wallet().write()?.get_next_external_address()?;
let new_address = maker
.wallet()
.write()?
.get_next_external_address(AddressType::P2WPKH)?;
RpcMsgResp::NewAddressResp(new_address.to_string())
}
RpcMsgReq::SendToAddress {
Expand All @@ -94,6 +97,7 @@ fn handle_request<M: MakerRpc>(maker: &Arc<M>, socket: &mut TcpStream) -> Result
let destination = Destination::Multi {
outputs,
op_return_data: None,
change_address_type: AddressType::P2WPKH,
};

let coins_to_send = maker.wallet().read()?.coin_select(amount, feerate, None)?;
Expand Down
18 changes: 14 additions & 4 deletions src/maker/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ use crate::{
},
protocol::messages::TakerToMakerMessage,
utill::{read_message, send_message, HEART_BEAT_INTERVAL, MIN_FEE_RATE},
wallet::WalletError,
wallet::{AddressType, WalletError},
};

use crate::maker::error::MakerError;
Expand Down Expand Up @@ -84,7 +84,10 @@ fn network_bootstrap(maker: Arc<Maker>) -> Result<String, MakerError> {
/// 1. Redeems all expired fidelity bonds in the maker's wallet, if any are found.
/// 2. Creates a new fidelity bond if no valid bonds remain after redemption.
fn manage_fidelity_bonds(maker: &Maker, maker_addr: &str) -> Result<(), MakerError> {
maker.wallet.write()?.redeem_expired_fidelity_bonds()?;
maker
.wallet
.write()?
.redeem_expired_fidelity_bonds(AddressType::P2WPKH)?;
let fidelity = setup_fidelity_bond(maker, maker_addr)?;
broadcast_bond_on_nostr(fidelity)?;
Ok(())
Expand Down Expand Up @@ -256,6 +259,7 @@ fn setup_fidelity_bond(maker: &Maker, maker_address: &str) -> Result<FidelityPro
locktime,
Some(maker_address),
MIN_FEE_RATE,
AddressType::P2WPKH,
);

match fidelity_result {
Expand All @@ -269,7 +273,10 @@ fn setup_fidelity_bond(maker: &Maker, maker_address: &str) -> Result<FidelityPro
{
log::warn!("Insufficient fund to create fidelity bond.");
let amount = required - available;
let addr = maker.get_wallet().write()?.get_next_external_address()?;
let addr = maker
.get_wallet()
.write()?
.get_next_external_address(AddressType::P2WPKH)?;

log::info!("Send at least {:.8} BTC to {:?} | If you send extra, that will be added to your wallet balance", Amount::from_sat(amount).to_btc(), addr);

Expand Down Expand Up @@ -316,7 +323,10 @@ fn setup_fidelity_bond(maker: &Maker, maker_address: &str) -> Result<FidelityPro
fn check_swap_liquidity(maker: &Maker) -> Result<(), MakerError> {
let sleep_incremental = 10;
let mut sleep_duration = 0;
let addr = maker.get_wallet().write()?.get_next_external_address()?;
let addr = maker
.get_wallet()
.write()?
.get_next_external_address(AddressType::P2WPKH)?;
while !maker.shutdown.load(Relaxed) {
maker.get_wallet().write()?.sync_and_save()?;
let offer_max_size = maker.get_wallet().read()?.store.offer_maxsize;
Expand Down
13 changes: 10 additions & 3 deletions src/maker/server2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ use crate::{
get_tor_hostname, read_message, send_message, COINSWAP_KIND, HEART_BEAT_INTERVAL,
MIN_FEE_RATE, NOSTR_RELAYS,
},
wallet::WalletError,
wallet::{AddressType, WalletError},
};

use crate::maker::error::MakerError;
Expand Down Expand Up @@ -73,7 +73,10 @@ fn network_bootstrap_taproot(maker: Arc<Maker>) -> Result<String, MakerError> {
/// Setup's maker fidelity
fn manage_fidelity_bonds_taproot(maker: &Maker, maker_addr: &str) -> Result<(), MakerError> {
// Redeem expired fidelity bonds first
maker.wallet().write()?.redeem_expired_fidelity_bonds()?;
maker
.wallet()
.write()?
.redeem_expired_fidelity_bonds(AddressType::P2TR)?;

// Create or get existing fidelity proof for taproot maker
let fidelity_proof = setup_fidelity_bond_taproot(maker, maker_addr)?;
Expand Down Expand Up @@ -272,6 +275,7 @@ fn setup_fidelity_bond_taproot(
locktime,
Some(maker_address),
MIN_FEE_RATE,
AddressType::P2TR,
);

match fidelity_result {
Expand All @@ -288,7 +292,10 @@ fn setup_fidelity_bond_taproot(
maker.config.network_port
);
let amount = required - available;
let addr = maker.wallet().write()?.get_next_external_address()?;
let addr = maker
.wallet()
.write()?
.get_next_external_address(AddressType::P2TR)?;

log::info!("[{}] Send at least {:.8} BTC to {:?} | If you send extra, that will be added to your wallet balance", maker.config.network_port, Amount::from_sat(amount).to_btc(), addr);

Expand Down
7 changes: 4 additions & 3 deletions src/taker/api2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use crate::{
utill::{check_tor_status, get_taker_dir, read_message, send_message},
wallet::{
ffi::{MakerFeeInfo, SwapReport},
IncomingSwapCoinV2, OutgoingSwapCoinV2, RPCConfig, Wallet, WalletError,
AddressType, IncomingSwapCoinV2, OutgoingSwapCoinV2, RPCConfig, Wallet, WalletError,
},
watch_tower::{
registry_storage::FileRegistry,
Expand Down Expand Up @@ -997,6 +997,7 @@ impl Taker {
self.ongoing_swap_state.swap_params.send_amount,
)],
op_return_data: None,
change_address_type: AddressType::P2TR,
},
&selected_utxos,
)?
Expand Down Expand Up @@ -1369,7 +1370,7 @@ impl Taker {

let destination_address = self
.wallet
.get_next_internal_addresses(1)
.get_next_internal_addresses(1, AddressType::P2TR)
.map_err(TakerError::Wallet)?
.into_iter()
.next()
Expand Down Expand Up @@ -1505,7 +1506,7 @@ impl Taker {
self.wallet
.store
.swept_incoming_swapcoins
.insert(output_scriptpubkey.clone(), output_scriptpubkey);
.insert(output_scriptpubkey);
log::info!(
"Recorded swept incoming swapcoin V2: {}",
incoming_contract_txid
Expand Down
Loading