feat: use bdk names for CanonicalTx and ChainPosition exposed structures

This commit is contained in:
thunderbiscuit 2024-04-09 12:23:43 -04:00
parent ab9763bb58
commit f698d46392
No known key found for this signature in database
GPG Key ID: 88253696EB836462
5 changed files with 55 additions and 60 deletions

View File

@ -100,6 +100,17 @@ dictionary TxOut {
Script script_pubkey; Script script_pubkey;
}; };
[Enum]
interface ChainPosition {
Confirmed(u32 height, u64 timestamp);
Unconfirmed(u64 timestamp);
};
dictionary CanonicalTx {
Transaction transaction;
ChainPosition chain_position;
};
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// bdk crate - wallet module // bdk crate - wallet module
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
@ -147,7 +158,7 @@ interface Wallet {
SentAndReceivedValues sent_and_received([ByRef] Transaction tx); SentAndReceivedValues sent_and_received([ByRef] Transaction tx);
sequence<TransactionDetails> transactions(); sequence<CanonicalTx> transactions();
[Throws=CalculateFeeError] [Throws=CalculateFeeError]
u64 calculate_fee([ByRef] Transaction tx); u64 calculate_fee([ByRef] Transaction tx);
@ -363,17 +374,6 @@ interface Address {
boolean is_valid_for_network(Network network); boolean is_valid_for_network(Network network);
}; };
[Enum]
interface ConfirmationDetails {
Confirmed(u32 height, u64 timestamp);
Unconfirmed(u64 timestamp);
};
dictionary TransactionDetails {
Transaction transaction;
ConfirmationDetails confirmation;
};
interface Transaction { interface Transaction {
[Throws=Alpha3Error] [Throws=Alpha3Error]
constructor(sequence<u8> transaction_bytes); constructor(sequence<u8> transaction_bytes);

View File

@ -1,3 +1,5 @@
use crate::error::Alpha3Error;
use bdk::bitcoin::address::{NetworkChecked, NetworkUnchecked}; use bdk::bitcoin::address::{NetworkChecked, NetworkUnchecked};
use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf; use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf;
use bdk::bitcoin::blockdata::transaction::TxOut as BdkTxOut; use bdk::bitcoin::blockdata::transaction::TxOut as BdkTxOut;
@ -8,10 +10,7 @@ use bdk::bitcoin::Network;
use bdk::bitcoin::OutPoint as BdkOutPoint; use bdk::bitcoin::OutPoint as BdkOutPoint;
use bdk::bitcoin::Transaction as BdkTransaction; use bdk::bitcoin::Transaction as BdkTransaction;
use bdk::bitcoin::Txid; use bdk::bitcoin::Txid;
use bdk::chain::tx_graph::CanonicalTx as BdkCanonicalTx;
use crate::error::Alpha3Error;
use bdk::chain::{ChainPosition, ConfirmationTimeHeightAnchor};
use std::io::Cursor; use std::io::Cursor;
use std::str::FromStr; use std::str::FromStr;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
@ -116,36 +115,6 @@ impl From<BdkAddress> for Address {
} }
} }
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConfirmationDetails {
Confirmed { height: u32, timestamp: u64 },
Unconfirmed { timestamp: u64 },
}
pub struct TransactionDetails {
pub transaction: Arc<Transaction>,
pub confirmation: ConfirmationDetails,
}
impl<'a> From<BdkCanonicalTx<'a, BdkTransaction, ConfirmationTimeHeightAnchor>>
for TransactionDetails
{
fn from(tx: BdkCanonicalTx<'a, BdkTransaction, ConfirmationTimeHeightAnchor>) -> Self {
let confirmation = match tx.chain_position {
ChainPosition::Confirmed(anchor) => ConfirmationDetails::Confirmed {
height: anchor.confirmation_height,
timestamp: anchor.confirmation_time,
},
ChainPosition::Unconfirmed(timestamp) => ConfirmationDetails::Unconfirmed { timestamp },
};
TransactionDetails {
transaction: Arc::new(Transaction::from(tx.tx_node.tx)),
confirmation,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct Transaction { pub struct Transaction {
inner: BdkTransaction, inner: BdkTransaction,

View File

@ -17,6 +17,8 @@ use crate::error::Alpha3Error;
use crate::error::CalculateFeeError; use crate::error::CalculateFeeError;
use crate::error::EsploraError; use crate::error::EsploraError;
use crate::error::FeeRateError; use crate::error::FeeRateError;
use crate::error::PersistenceError;
use crate::error::WalletCreationError;
use crate::esplora::EsploraClient; use crate::esplora::EsploraClient;
use crate::keys::DerivationPath; use crate::keys::DerivationPath;
use crate::keys::DescriptorPublicKey; use crate::keys::DescriptorPublicKey;
@ -25,6 +27,8 @@ use crate::keys::Mnemonic;
use crate::types::AddressIndex; use crate::types::AddressIndex;
use crate::types::AddressInfo; use crate::types::AddressInfo;
use crate::types::Balance; use crate::types::Balance;
use crate::types::CanonicalTx;
use crate::types::ChainPosition;
use crate::types::FeeRate; use crate::types::FeeRate;
use crate::types::LocalOutput; use crate::types::LocalOutput;
use crate::types::ScriptAmount; use crate::types::ScriptAmount;
@ -34,11 +38,6 @@ use crate::wallet::TxBuilder;
use crate::wallet::Update; use crate::wallet::Update;
use crate::wallet::Wallet; use crate::wallet::Wallet;
use crate::bitcoin::ConfirmationDetails;
use crate::bitcoin::TransactionDetails;
use crate::error::PersistenceError;
use crate::error::WalletCreationError;
use bdk::bitcoin::Network; use bdk::bitcoin::Network;
use bdk::keys::bip39::WordCount; use bdk::keys::bip39::WordCount;
use bdk::wallet::tx_builder::ChangeSpendPolicy; use bdk::wallet::tx_builder::ChangeSpendPolicy;

View File

@ -1,16 +1,46 @@
use crate::bitcoin::{Address, OutPoint, Script, TxOut}; use crate::bitcoin::{Address, OutPoint, Script, Transaction, TxOut};
use crate::error::FeeRateError;
use bdk::bitcoin::FeeRate as BdkFeeRate;
use bdk::bitcoin::Transaction as BdkTransaction;
use bdk::chain::tx_graph::CanonicalTx as BdkCanonicalTx;
use bdk::chain::{ChainPosition as BdkChainPosition, ConfirmationTimeHeightAnchor};
use bdk::wallet::AddressIndex as BdkAddressIndex; use bdk::wallet::AddressIndex as BdkAddressIndex;
use bdk::wallet::AddressInfo as BdkAddressInfo; use bdk::wallet::AddressInfo as BdkAddressInfo;
use bdk::wallet::Balance as BdkBalance; use bdk::wallet::Balance as BdkBalance;
use bdk::KeychainKind; use bdk::KeychainKind;
use bdk::LocalOutput as BdkLocalOutput; use bdk::LocalOutput as BdkLocalOutput;
use bdk::bitcoin::FeeRate as BdkFeeRate;
use crate::error::FeeRateError;
use std::sync::Arc; use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ChainPosition {
Confirmed { height: u32, timestamp: u64 },
Unconfirmed { timestamp: u64 },
}
pub struct CanonicalTx {
pub transaction: Arc<Transaction>,
pub chain_position: ChainPosition,
}
impl From<BdkCanonicalTx<'_, BdkTransaction, ConfirmationTimeHeightAnchor>> for CanonicalTx {
fn from(tx: BdkCanonicalTx<'_, BdkTransaction, ConfirmationTimeHeightAnchor>) -> Self {
let chain_position = match tx.chain_position {
BdkChainPosition::Confirmed(anchor) => ChainPosition::Confirmed {
height: anchor.confirmation_height,
timestamp: anchor.confirmation_time,
},
BdkChainPosition::Unconfirmed(timestamp) => ChainPosition::Unconfirmed { timestamp },
};
CanonicalTx {
transaction: Arc::new(Transaction::from(tx.tx_node.tx)),
chain_position,
}
}
}
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct FeeRate(pub BdkFeeRate); pub struct FeeRate(pub BdkFeeRate);

View File

@ -1,10 +1,7 @@
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction, TransactionDetails}; use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Script, Transaction};
use crate::descriptor::Descriptor; use crate::descriptor::Descriptor;
use crate::error::{Alpha3Error, CalculateFeeError, PersistenceError, WalletCreationError}; use crate::error::{Alpha3Error, CalculateFeeError, PersistenceError, WalletCreationError};
use crate::types::ScriptAmount; use crate::types::{AddressIndex, AddressInfo, Balance, CanonicalTx, FeeRate, ScriptAmount};
use crate::types::{Balance, FeeRate};
use crate::Script;
use crate::{AddressIndex, AddressInfo};
use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf; use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf;
use bdk::bitcoin::psbt::PartiallySignedTransaction as BdkPartiallySignedTransaction; use bdk::bitcoin::psbt::PartiallySignedTransaction as BdkPartiallySignedTransaction;
@ -104,7 +101,7 @@ impl Wallet {
SentAndReceivedValues { sent, received } SentAndReceivedValues { sent, received }
} }
pub fn transactions(&self) -> Vec<TransactionDetails> { pub fn transactions(&self) -> Vec<CanonicalTx> {
self.get_wallet() self.get_wallet()
.transactions() .transactions()
.map(|tx| tx.into()) .map(|tx| tx.into())