spark_rust/wallet/handlers/leaves.rs
1use crate::{
2 error::SparkSdkError, signer::traits::SparkSigner,
3 wallet::internal_handlers::traits::leaves::LeavesInternalHandlers, SparkSdk,
4};
5
6impl<S: SparkSigner + Send + Sync + Clone + 'static> SparkSdk<S> {
7 /// Returns the balance of the wallet in satoshis.
8 ///
9 /// This function calculates the total value of all available leaves in the wallet.
10 ///
11 /// # Returns
12 /// - `Ok(u64)` - The total balance in satoshis
13 /// - `Err(SparkSdkError)` - If there was an error accessing the leaf manager
14 ///
15 /// # Example
16 /// ```
17 /// # use spark_rust::{SparkSdk, SparkNetwork, signer::default_signer::DefaultSigner, signer::traits::SparkSigner};
18 ///
19 /// async fn example() {
20 /// let mnemonic = "abandon ability able about above absent absorb abstract absurd abuse access accident";
21 /// let network = SparkNetwork::Regtest;
22 /// let signer = DefaultSigner::from_mnemonic(mnemonic, network.clone()).await.unwrap();
23 /// let sdk = SparkSdk::new(network, signer).await.unwrap();
24 /// let balance = sdk.get_btc_balance();
25 /// println!("Balance: {}", balance);
26 /// }
27 /// ```
28 #[cfg_attr(feature = "telemetry", tracing::instrument(skip_all))]
29 pub fn get_btc_balance(&self) -> u64 {
30 self.leaf_manager.get_available_bitcoin_value(None)
31 }
32
33 pub async fn sync_wallet(&self) -> Result<(), SparkSdkError> {
34 // TODO leaves: sync token leaves in parallel with claim_transfers
35
36 // claim Bitcoin transfers
37 self.claim_transfers().await?;
38
39 // TODO leaves: refresh timelock nodes
40
41 // sync Bitcoin leaves
42 self.sync_leaves().await?;
43
44 // optimize leaves
45 self.optimize_leaves().await?;
46
47 Ok(())
48 }
49}