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}