[wallet] Make 'unspendable' into a HashSet

to avoid awkwardly later on.
This commit is contained in:
LLFourn 2020-10-21 15:53:55 +11:00
parent c549281ace
commit b87c7c5dc7
No known key found for this signature in database
GPG Key ID: A27093B54DA11F65
2 changed files with 6 additions and 10 deletions

View File

@ -969,14 +969,9 @@ where
&self,
change_policy: tx_builder::ChangeSpendPolicy,
utxo: &Option<Vec<OutPoint>>,
unspendable: &Option<Vec<OutPoint>>,
unspendable: &HashSet<OutPoint>,
send_all: bool,
) -> Result<(Vec<(UTXO, usize)>, bool), Error> {
let unspendable_set = match unspendable {
None => HashSet::new(),
Some(vec) => vec.iter().collect(),
};
let external_weight = self
.get_descriptor_for_script_type(ScriptType::External)
.0
@ -1016,7 +1011,7 @@ where
// otherwise limit ourselves to the spendable utxos for the selected policy, and the `send_all` setting
None => {
let utxos = self.list_unspent()?.into_iter().filter(|u| {
change_policy.is_satisfied_by(u) && !unspendable_set.contains(&u.outpoint)
change_policy.is_satisfied_by(u) && !unspendable.contains(&u.outpoint)
});
Ok((utxos.map(add_weight).collect(), send_all))

View File

@ -42,6 +42,7 @@
//! ```
use std::collections::BTreeMap;
use std::collections::HashSet;
use std::default::Default;
use std::marker::PhantomData;
@ -63,7 +64,7 @@ pub struct TxBuilder<D: Database, Cs: CoinSelectionAlgorithm<D>> {
pub(crate) fee_policy: Option<FeePolicy>,
pub(crate) policy_path: Option<BTreeMap<String, Vec<usize>>>,
pub(crate) utxos: Option<Vec<OutPoint>>,
pub(crate) unspendable: Option<Vec<OutPoint>>,
pub(crate) unspendable: HashSet<OutPoint>,
pub(crate) sighash: Option<SigHashType>,
pub(crate) ordering: TxOrdering,
pub(crate) locktime: Option<u32>,
@ -197,7 +198,7 @@ impl<D: Database, Cs: CoinSelectionAlgorithm<D>> TxBuilder<D, Cs> {
/// [`TxBuilder::add_utxo`] have priority over these. See the docs of the two linked methods
/// for more details.
pub fn unspendable(mut self, unspendable: Vec<OutPoint>) -> Self {
self.unspendable = Some(unspendable);
self.unspendable = unspendable.into_iter().collect();
self
}
@ -207,7 +208,7 @@ impl<D: Database, Cs: CoinSelectionAlgorithm<D>> TxBuilder<D, Cs> {
/// [`TxBuilder::add_utxo`] have priority over this. See the docs of the two linked methods
/// for more details.
pub fn add_unspendable(mut self, unspendable: OutPoint) -> Self {
self.unspendable.get_or_insert(vec![]).push(unspendable);
self.unspendable.insert(unspendable);
self
}