feat: expose get_tx method on wallet type

This commit is contained in:
thunderbiscuit 2024-04-10 12:12:37 -04:00
parent 97a104fd5f
commit 806e29b93c
No known key found for this signature in database
GPG Key ID: 88253696EB836462
4 changed files with 24 additions and 7 deletions

View File

@ -104,6 +104,11 @@ interface DescriptorError {
Hex(string e);
};
[Error]
interface TxidParseError {
InvalidTxid(string txid);
};
// ------------------------------------------------------------------------
// bdk crate - types module
// ------------------------------------------------------------------------
@ -212,6 +217,9 @@ interface Wallet {
sequence<CanonicalTx> transactions();
[Throws=TxidParseError]
CanonicalTx? get_tx(string txid);
[Throws=CalculateFeeError]
u64 calculate_fee([ByRef] Transaction tx);

View File

@ -109,6 +109,12 @@ pub enum FeeRateError {
ArithmeticOverflow,
}
#[derive(Debug, thiserror::Error)]
pub enum TxidParseError {
#[error("invalid txid: {txid}")]
InvalidTxid { txid: String },
}
#[derive(Debug, thiserror::Error)]
pub enum AddressError {
#[error("base58 address encoding error")]
@ -318,12 +324,6 @@ impl From<std::io::Error> for PersistenceError {
}
}
// impl From<DescriptorError> for Alpha3Error {
// fn from(_: DescriptorError) -> Self {
// Alpha3Error::Generic
// }
// }
impl From<AllowShrinkingError> for Alpha3Error {
fn from(_: AllowShrinkingError) -> Self {
Alpha3Error::Generic

View File

@ -22,6 +22,7 @@ use crate::error::FeeRateError;
use crate::error::PersistenceError;
use crate::error::PsbtParseError;
use crate::error::TransactionError;
use crate::error::TxidParseError;
use crate::error::WalletCreationError;
use crate::esplora::EsploraClient;
use crate::keys::DerivationPath;

View File

@ -1,6 +1,8 @@
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Script, Transaction};
use crate::descriptor::Descriptor;
use crate::error::{Alpha3Error, CalculateFeeError, PersistenceError, WalletCreationError};
use crate::error::{
Alpha3Error, CalculateFeeError, PersistenceError, TxidParseError, WalletCreationError,
};
use crate::types::{AddressIndex, AddressInfo, Balance, CanonicalTx, FeeRate, ScriptAmount};
use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf;
@ -108,6 +110,12 @@ impl Wallet {
.collect()
}
pub fn get_tx(&self, txid: String) -> Result<Option<CanonicalTx>, TxidParseError> {
let txid =
Txid::from_str(txid.as_str()).map_err(|_| TxidParseError::InvalidTxid { txid })?;
Ok(self.get_wallet().get_tx(txid).map(|tx| tx.into()))
}
pub fn calculate_fee(&self, tx: &Transaction) -> Result<u64, CalculateFeeError> {
self.get_wallet()
.calculate_fee(&tx.into())