From 279f304d5df17e24c714151729d03702eebbaa44 Mon Sep 17 00:00:00 2001 From: Sudarsan Balaji Date: Thu, 14 Oct 2021 00:05:50 +0530 Subject: [PATCH] Add a little bit of error handling --- src/bdk.udl | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/lib.rs | 23 +++++++++++------------ 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/bdk.udl b/src/bdk.udl index 5e30901..597833b 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -2,7 +2,50 @@ namespace bdk { }; +[Error] +enum BdkError { + "InvalidU32Bytes", + "Generic", + "ScriptDoesntHaveAddressForm", + "NoRecipients", + "NoUtxosSelected", + "OutputBelowDustLimit", + "InsufficientFunds", + "BnBTotalTriesExceeded", + "BnBNoExactMatch", + "UnknownUtxo", + "TransactionNotFound", + "TransactionConfirmed", + "IrreplaceableTransaction", + "FeeRateTooLow", + "FeeTooLow", + "FeeRateUnavailable", + "MissingKeyOrigin", + "Key", + "ChecksumMismatch", + "SpendingPolicyRequired", + "InvalidPolicyPathError", + "Signer", + "InvalidNetwork", + "InvalidProgressValue", + "ProgressUpdateError", + "InvalidOutpoint", + "Descriptor", + "AddressValidator", + "Encode", + "Miniscript", + "Bip32", + "Secp256k1", + "Json", + "Hex", + "Psbt", + "PsbtParse", + "Electrum", + "Sled", +}; + interface OfflineWallet { + [Throws=BdkError] constructor(string descriptor); string get_new_address(); -}; \ No newline at end of file +}; diff --git a/src/lib.rs b/src/lib.rs index 994a884..2b89c53 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,30 +2,29 @@ use bdk::bitcoin::Network; use bdk::sled; use bdk::sled::Tree; use bdk::wallet::AddressIndex; +use bdk::Error; use bdk::Wallet; use std::sync::Mutex; +type BdkError = Error; + uniffi_macros::include_scaffolding!("bdk"); struct OfflineWallet { wallet: Mutex>, - //wallet: RwLock> } impl OfflineWallet { - fn new(descriptor: String) -> Self { + fn new(descriptor: String) -> Result { let database = sled::open("testdb").unwrap(); let tree = database.open_tree("test").unwrap(); - - let wallet = Wallet::new_offline(&descriptor, None, Network::Regtest, tree).unwrap(); - - OfflineWallet { - wallet: Mutex::new(wallet), - } - - // OfflineWallet { - // wallet: RwLock::new(Vec::new()) - // } + let wallet = Mutex::new(Wallet::new_offline( + &descriptor, + None, + Network::Regtest, + tree, + )?); + Ok(OfflineWallet { wallet }) } fn get_new_address(&self) -> String {