From 8a046da81199c6238b7183f080d4b33941a0d512 Mon Sep 17 00:00:00 2001 From: Dario Anongba Varela Date: Thu, 21 Aug 2025 13:13:11 +0200 Subject: [PATCH] add cloning --- src/bitcoin/wallet.rs | 12 ++++++------ src/types/address.rs | 16 ++++++++++++++++ src/types/amount.rs | 1 + src/types/balance.rs | 1 + src/types/block.rs | 1 + src/types/chain.rs | 1 + src/types/checkpoint.rs | 1 + src/types/fee.rs | 1 + src/types/input.rs | 1 + src/types/network.rs | 2 +- src/types/output.rs | 4 +++- src/types/psbt.rs | 6 ++++++ src/types/transaction.rs | 1 + 13 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/bitcoin/wallet.rs b/src/bitcoin/wallet.rs index ca151b6..6c585da 100644 --- a/src/bitcoin/wallet.rs +++ b/src/bitcoin/wallet.rs @@ -168,18 +168,18 @@ impl Wallet { TxBuilder::new(self.0.clone()) } - pub fn calculate_fee(&self, tx: Transaction) -> JsResult { - let fee = self.0.borrow().calculate_fee(&tx.into())?; + pub fn calculate_fee(&self, tx: &Transaction) -> JsResult { + let fee = self.0.borrow().calculate_fee(tx)?; Ok(fee.into()) } - pub fn calculate_fee_rate(&self, tx: Transaction) -> JsResult { - let fee_rate = self.0.borrow().calculate_fee_rate(&tx.into())?; + pub fn calculate_fee_rate(&self, tx: &Transaction) -> JsResult { + let fee_rate = self.0.borrow().calculate_fee_rate(tx)?; Ok(fee_rate.into()) } - pub fn sent_and_received(&self, tx: Transaction) -> JsResult { - let (sent, received) = self.0.borrow().sent_and_received(&tx.into()); + pub fn sent_and_received(&self, tx: &Transaction) -> JsResult { + let (sent, received) = self.0.borrow().sent_and_received(tx); Ok(SentAndReceived(sent.into(), received.into())) } diff --git a/src/types/address.rs b/src/types/address.rs index afb0042..04ca220 100644 --- a/src/types/address.rs +++ b/src/types/address.rs @@ -48,6 +48,11 @@ impl AddressInfo { pub fn address_type(&self) -> Option { self.0.address_type().map(Into::into) } + + #[wasm_bindgen(js_name = clone)] + pub fn js_clone(&self) -> AddressInfo { + self.clone() + } } impl Deref for AddressInfo { @@ -101,6 +106,11 @@ impl Address { pub fn script_pubkey(&self) -> ScriptBuf { self.0.script_pubkey().into() } + + #[wasm_bindgen(js_name = clone)] + pub fn js_clone(&self) -> Address { + self.clone() + } } impl From for Address { @@ -181,6 +191,11 @@ impl ScriptBuf { pub fn is_op_return(&self) -> bool { self.0.is_op_return() } + + #[wasm_bindgen(js_name = clone)] + pub fn js_clone(&self) -> ScriptBuf { + self.clone() + } } impl From for ScriptBuf { @@ -197,6 +212,7 @@ impl From for BdkScriptBuf { /// The different types of addresses. #[wasm_bindgen] +#[derive(Clone, Copy, PartialEq, Eq)] pub enum AddressType { /// Pay to pubkey hash. P2pkh = "p2pkh", diff --git a/src/types/amount.rs b/src/types/amount.rs index 03e2f26..93402d1 100644 --- a/src/types/amount.rs +++ b/src/types/amount.rs @@ -85,6 +85,7 @@ pub struct SentAndReceived(pub Amount, pub Amount); /// A set of denominations in which amounts can be expressed. #[wasm_bindgen] +#[derive(Clone, Copy, PartialEq, Eq)] pub enum Denomination { /// BTC Bitcoin = "BTC", diff --git a/src/types/balance.rs b/src/types/balance.rs index 554b3cc..c4f2b0b 100644 --- a/src/types/balance.rs +++ b/src/types/balance.rs @@ -7,6 +7,7 @@ use super::Amount; /// Balance, differentiated into various categories. #[wasm_bindgen] +#[derive(Clone)] pub struct Balance(BdkBalance); #[wasm_bindgen] diff --git a/src/types/block.rs b/src/types/block.rs index c138464..9897385 100644 --- a/src/types/block.rs +++ b/src/types/block.rs @@ -5,6 +5,7 @@ use wasm_bindgen::prelude::wasm_bindgen; /// A reference to a block in the canonical chain. #[wasm_bindgen] +#[derive(Clone)] pub struct BlockId(BdkBlockId); #[wasm_bindgen] diff --git a/src/types/chain.rs b/src/types/chain.rs index ab01272..9a3b7f9 100644 --- a/src/types/chain.rs +++ b/src/types/chain.rs @@ -72,6 +72,7 @@ impl From for BdkFullScanRequest { /// An update to [`Wallet`]. #[wasm_bindgen] +#[derive(Clone)] pub struct Update(BdkUpdate); impl Deref for Update { diff --git a/src/types/checkpoint.rs b/src/types/checkpoint.rs index b80c6cf..9112e10 100644 --- a/src/types/checkpoint.rs +++ b/src/types/checkpoint.rs @@ -10,6 +10,7 @@ use super::BlockId; /// Checkpoints are cheaply cloneable and are useful to find the agreement point between two sparse /// block chains. #[wasm_bindgen] +#[derive(Clone)] pub struct CheckPoint(BdkCheckPoint); #[wasm_bindgen] diff --git a/src/types/fee.rs b/src/types/fee.rs index b2a4098..ee86124 100644 --- a/src/types/fee.rs +++ b/src/types/fee.rs @@ -41,6 +41,7 @@ impl From for HashMap { /// This is an integer newtype representing fee rate in `sat/kwu`. It provides protection against mixing /// up the types as well as basic formatting features. #[wasm_bindgen] +#[derive(Clone, Copy)] pub struct FeeRate(BdkFeeRate); impl Deref for FeeRate { diff --git a/src/types/input.rs b/src/types/input.rs index 07ec74f..769a762 100644 --- a/src/types/input.rs +++ b/src/types/input.rs @@ -11,6 +11,7 @@ use crate::types::{OutPoint, ScriptBuf}; /// that it spends and set of scripts that satisfy its spending /// conditions. #[wasm_bindgen] +#[derive(Clone)] pub struct TxIn(BdkTxIn); impl Deref for TxIn { diff --git a/src/types/network.rs b/src/types/network.rs index 5247c8d..58534c8 100644 --- a/src/types/network.rs +++ b/src/types/network.rs @@ -40,7 +40,7 @@ impl From for NetworkKind { /// The cryptocurrency network to act on. #[wasm_bindgen] -#[derive(Clone, Copy)] +#[derive(Clone, Copy, PartialEq, Eq)] pub enum Network { /// Mainnet Bitcoin. Bitcoin = "bitcoin", diff --git a/src/types/output.rs b/src/types/output.rs index dc12a7c..c72c251 100644 --- a/src/types/output.rs +++ b/src/types/output.rs @@ -14,7 +14,7 @@ use super::Txid; /// A reference to a transaction output. #[wasm_bindgen] -#[derive(Clone, PartialEq, Eq)] +#[derive(Clone, Copy, PartialEq, Eq)] pub struct OutPoint(BdkOutPoint); impl Deref for OutPoint { @@ -76,6 +76,7 @@ impl From for BdkOutPoint { /// /// An output that is not yet spent by an input is called Unspent Transaction Output ("UTXO"). #[wasm_bindgen] +#[derive(Clone)] pub struct TxOut(BdkTxOut); impl Deref for TxOut { @@ -129,6 +130,7 @@ impl From for BdkTxOut { /// A reference to a transaction output. #[wasm_bindgen] +#[derive(Clone)] pub struct LocalOutput(BdkLocalOutput); impl Deref for LocalOutput { diff --git a/src/types/psbt.rs b/src/types/psbt.rs index b0a241f..e48386e 100644 --- a/src/types/psbt.rs +++ b/src/types/psbt.rs @@ -16,6 +16,7 @@ use super::{Address, Amount, FeeRate, Transaction}; /// A Partially Signed Transaction. #[wasm_bindgen] +#[derive(Clone)] pub struct Psbt(BdkPsbt); impl Deref for Psbt { @@ -114,6 +115,11 @@ impl Psbt { pub fn to_json(&self) -> String { to_string(&self.0).expect("Serialization should not fail") } + + #[wasm_bindgen(js_name = clone)] + pub fn js_clone(&self) -> Psbt { + self.clone() + } } impl From for Psbt { diff --git a/src/types/transaction.rs b/src/types/transaction.rs index 0253374..ec9345b 100644 --- a/src/types/transaction.rs +++ b/src/types/transaction.rs @@ -138,6 +138,7 @@ impl From for BdkTransaction { /// A bitcoin transaction hash/transaction ID. #[wasm_bindgen] +#[derive(Clone, Copy)] pub struct Txid(BdkTxid); impl Deref for Txid {