Merge bitcoindevkit/bdk#1190: Add Wallet::list_output method
278210bb89docs(bdk): clarify `insert_txout` docs (志宇)6fb45d8a73test(bdk): add `test_list_output` (志宇)e803ee9010feat(bdk): add `Wallet::list_output` method (志宇)82632897aarefactor(bdk)!: rename `LocalUtxo` to `LocalOutput` (志宇) Pull request description: Fixes #1184 ### Description Introduce `Wallet::list_output` method that lists all outputs (both spent and unspent) in a consistent history. ### Changelog notice - Rename `LocalUtxo` to `LocalOutput`. - Add `Wallet::list_output` method. ### Checklists #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing #### New Features: * [x] I've added tests for the new feature * [x] I've added docs for the new feature ACKs for top commit: notmandatory: re-ACK278210bb89danielabrozzoni: ACK278210bb89Tree-SHA512: 151af0e05e55d9c682271ef0c7a82e189531db963f65aa62c2ba0507f203dde39ab7561521c56e72c26830828e94ff96b7bd7e3f46082b23f79c5e0f89470136
This commit is contained in:
@@ -735,7 +735,7 @@ impl<D> Wallet<D> {
|
||||
}
|
||||
|
||||
/// Return the list of unspent outputs of this wallet
|
||||
pub fn list_unspent(&self) -> impl Iterator<Item = LocalUtxo> + '_ {
|
||||
pub fn list_unspent(&self) -> impl Iterator<Item = LocalOutput> + '_ {
|
||||
self.indexed_graph
|
||||
.graph()
|
||||
.filter_chain_unspents(
|
||||
@@ -746,6 +746,20 @@ impl<D> Wallet<D> {
|
||||
.map(|((k, i), full_txo)| new_local_utxo(k, i, full_txo))
|
||||
}
|
||||
|
||||
/// List all relevant outputs (includes both spent and unspent, confirmed and unconfirmed).
|
||||
///
|
||||
/// To list only unspent outputs (UTXOs), use [`Wallet::list_unspent`] instead.
|
||||
pub fn list_output(&self) -> impl Iterator<Item = LocalOutput> + '_ {
|
||||
self.indexed_graph
|
||||
.graph()
|
||||
.filter_chain_txouts(
|
||||
&self.chain,
|
||||
self.chain.tip().block_id(),
|
||||
self.indexed_graph.index.outpoints().iter().cloned(),
|
||||
)
|
||||
.map(|((k, i), full_txo)| new_local_utxo(k, i, full_txo))
|
||||
}
|
||||
|
||||
/// Get all the checkpoints the wallet is currently storing indexed by height.
|
||||
pub fn checkpoints(&self) -> CheckPointIter {
|
||||
self.chain.iter_checkpoints()
|
||||
@@ -784,7 +798,7 @@ impl<D> Wallet<D> {
|
||||
|
||||
/// Returns the utxo owned by this wallet corresponding to `outpoint` if it exists in the
|
||||
/// wallet's database.
|
||||
pub fn get_utxo(&self, op: OutPoint) -> Option<LocalUtxo> {
|
||||
pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput> {
|
||||
let (&spk_i, _) = self.indexed_graph.index.txout(op)?;
|
||||
self.indexed_graph
|
||||
.graph()
|
||||
@@ -798,15 +812,20 @@ impl<D> Wallet<D> {
|
||||
}
|
||||
|
||||
/// Inserts a [`TxOut`] at [`OutPoint`] into the wallet's transaction graph.
|
||||
/// Any inserted TxOuts are not persisted until [`commit`] is called.
|
||||
///
|
||||
/// This can be used to add a `TxOut` that the wallet doesn't own but is used as an input to
|
||||
/// a [`Transaction`] passed to the [`calculate_fee`] or [`calculate_fee_rate`] functions.
|
||||
/// This is used for providing a previous output's value so that we can use [`calculate_fee`]
|
||||
/// or [`calculate_fee_rate`] on a given transaction. Outputs inserted with this method will
|
||||
/// not be returned in [`list_unspent`] or [`list_output`].
|
||||
///
|
||||
/// Only insert TxOuts you trust the values for!
|
||||
/// Any inserted `TxOut`s are not persisted until [`commit`] is called.
|
||||
///
|
||||
/// **WARNING:** This should only be used to add `TxOut`s that the wallet does not own. Only
|
||||
/// insert `TxOut`s that you trust the values for!
|
||||
///
|
||||
/// [`calculate_fee`]: Self::calculate_fee
|
||||
/// [`calculate_fee_rate`]: Self::calculate_fee_rate
|
||||
/// [`list_unspent`]: Self::list_unspent
|
||||
/// [`list_output`]: Self::list_output
|
||||
/// [`commit`]: Self::commit
|
||||
pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut)
|
||||
where
|
||||
@@ -1614,7 +1633,7 @@ impl<D> Wallet<D> {
|
||||
.max_satisfaction_weight()
|
||||
.unwrap();
|
||||
WeightedUtxo {
|
||||
utxo: Utxo::Local(LocalUtxo {
|
||||
utxo: Utxo::Local(LocalOutput {
|
||||
outpoint: txin.previous_output,
|
||||
txout: txout.clone(),
|
||||
keychain,
|
||||
@@ -1933,7 +1952,7 @@ impl<D> Wallet<D> {
|
||||
descriptor.at_derivation_index(child).ok()
|
||||
}
|
||||
|
||||
fn get_available_utxos(&self) -> Vec<(LocalUtxo, usize)> {
|
||||
fn get_available_utxos(&self) -> Vec<(LocalOutput, usize)> {
|
||||
self.list_unspent()
|
||||
.map(|utxo| {
|
||||
let keychain = utxo.keychain;
|
||||
@@ -2130,7 +2149,7 @@ impl<D> Wallet<D> {
|
||||
/// get the corresponding PSBT Input for a LocalUtxo
|
||||
pub fn get_psbt_input(
|
||||
&self,
|
||||
utxo: LocalUtxo,
|
||||
utxo: LocalOutput,
|
||||
sighash_type: Option<psbt::PsbtSighashType>,
|
||||
only_witness_utxo: bool,
|
||||
) -> Result<psbt::Input, CreateTxError<D::WriteError>>
|
||||
@@ -2336,8 +2355,8 @@ fn new_local_utxo(
|
||||
keychain: KeychainKind,
|
||||
derivation_index: u32,
|
||||
full_txo: FullTxOut<ConfirmationTimeHeightAnchor>,
|
||||
) -> LocalUtxo {
|
||||
LocalUtxo {
|
||||
) -> LocalOutput {
|
||||
LocalOutput {
|
||||
outpoint: full_txo.outpoint,
|
||||
txout: full_txo.txout,
|
||||
is_spent: full_txo.spent_by.is_some(),
|
||||
|
||||
Reference in New Issue
Block a user