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

View File

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