Skip to content

Commit 3130301

Browse files
committed
cargo test works
1 parent 46577ad commit 3130301

File tree

6 files changed

+102
-91
lines changed

6 files changed

+102
-91
lines changed

src/descriptor/dsl.rs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -700,10 +700,10 @@ macro_rules! fragment {
700700
$crate::keys::make_pkh($key, &secp)
701701
});
702702
( after ( $value:expr ) ) => ({
703-
$crate::impl_leaf_opcode_value!(After, $value)
703+
$crate::impl_leaf_opcode_value!(After, $crate::bitcoin::PackedLockTime($value)) // TODO!! https://github.com/rust-bitcoin/rust-bitcoin/issues/1302
704704
});
705705
( older ( $value:expr ) ) => ({
706-
$crate::impl_leaf_opcode_value!(Older, $value)
706+
$crate::impl_leaf_opcode_value!(Older, $crate::bitcoin::Sequence($value)) // TODO!!
707707
});
708708
( sha256 ( $hash:expr ) ) => ({
709709
$crate::impl_leaf_opcode_value!(Sha256, $hash)
@@ -795,7 +795,7 @@ macro_rules! fragment {
795795
mod test {
796796
use bitcoin::hashes::hex::ToHex;
797797
use bitcoin::secp256k1::Secp256k1;
798-
use miniscript::descriptor::{DescriptorPublicKey, DescriptorTrait, KeyMap};
798+
use miniscript::descriptor::{DescriptorPublicKey, KeyMap};
799799
use miniscript::{Descriptor, Legacy, Segwitv0};
800800

801801
use std::str::FromStr;
@@ -806,8 +806,6 @@ mod test {
806806
use bitcoin::util::bip32;
807807
use bitcoin::PrivateKey;
808808

809-
use crate::descriptor::derived::AsDerived;
810-
811809
// test the descriptor!() macro
812810

813811
// verify descriptor generates expected script(s) (if bare or pk) or address(es)
@@ -817,17 +815,15 @@ mod test {
817815
is_fixed: bool,
818816
expected: &[&str],
819817
) {
820-
let secp = Secp256k1::new();
821-
822818
let (desc, _key_map, _networks) = desc.unwrap();
823819
assert_eq!(desc.is_witness(), is_witness);
824-
assert_eq!(!desc.is_deriveable(), is_fixed);
820+
assert_eq!(!desc.has_wildcard(), is_fixed);
825821
for i in 0..expected.len() {
826822
let index = i as u32;
827-
let child_desc = if !desc.is_deriveable() {
828-
desc.as_derived_fixed(&secp)
823+
let child_desc = if !desc.has_wildcard() {
824+
desc.at_derivation_index(0)
829825
} else {
830-
desc.as_derived(index, &secp)
826+
desc.at_derivation_index(index)
831827
};
832828
let address = child_desc.address(Regtest);
833829
if let Ok(address) = address {

src/descriptor/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,8 @@ mod test {
851851

852852
#[test]
853853
fn test_sh_wsh_sortedmulti_redeemscript() {
854+
use miniscript::psbt::PsbtInputExt;
855+
854856
let secp = Secp256k1::new();
855857

856858
let descriptor = "sh(wsh(sortedmulti(3,tpubDEsqS36T4DVsKJd9UH8pAKzrkGBYPLEt9jZMwpKtzh1G6mgYehfHt9WCgk7MJG5QGSFWf176KaBNoXbcuFcuadAFKxDpUdMDKGBha7bY3QM/0/*,tpubDF3cpwfs7fMvXXuoQbohXtLjNM6ehwYT287LWtmLsd4r77YLg6MZg4vTETx5MSJ2zkfigbYWu31VA2Z2Vc1cZugCYXgS7FQu6pE8V6TriEH/0/*,tpubDE1SKfcW76Tb2AASv5bQWMuScYNAdoqLHoexw13sNDXwmUhQDBbCD3QAedKGLhxMrWQdMDKENzYtnXPDRvexQPNuDrLj52wAjHhNEm8sJ4p/0/*,tpubDFLc6oXwJmhm3FGGzXkfJNTh2KitoY3WhmmQvuAjMhD8YbyWn5mAqckbxXfm2etM3p5J6JoTpSrMqRSTfMLtNW46poDaEZJ1kjd3csRSjwH/0/*,tpubDEWD9NBeWP59xXmdqSNt4VYdtTGwbpyP8WS962BuqpQeMZmX9Pur14dhXdZT5a7wR1pK6dPtZ9fP5WR493hPzemnBvkfLLYxnUjAKj1JCQV/0/*,tpubDEHyZkkwd7gZWCTgQuYQ9C4myF2hMEmyHsBCCmLssGqoqUxeT3gzohF5uEVURkf9TtmeepJgkSUmteac38FwZqirjApzNX59XSHLcwaTZCH/0/*,tpubDEqLouCekwnMUWN486kxGzD44qVgeyuqHyxUypNEiQt5RnUZNJe386TKPK99fqRV1vRkZjYAjtXGTECz98MCsdLcnkM67U6KdYRzVubeCgZ/0/*)))";
@@ -862,7 +864,9 @@ mod test {
862864
let script = Script::from_str("5321022f533b667e2ea3b36e21961c9fe9dca340fbe0af5210173a83ae0337ab20a57621026bb53a98e810bd0ee61a0ed1164ba6c024786d76554e793e202dc6ce9c78c4ea2102d5b8a7d66a41ffdb6f4c53d61994022e886b4f45001fb158b95c9164d45f8ca3210324b75eead2c1f9c60e8adeb5e7009fec7a29afcdb30d829d82d09562fe8bae8521032d34f8932200833487bd294aa219dcbe000b9f9b3d824799541430009f0fa55121037468f8ea99b6c64788398b5ad25480cad08f4b0d65be54ce3a55fd206b5ae4722103f72d3d96663b0ea99b0aeb0d7f273cab11a8de37885f1dddc8d9112adb87169357ae").unwrap();
863865

864866
let mut psbt_input = psbt::Input::default();
865-
psbt_input.update_with_descriptor_unchecked(&descriptor).unwrap();
867+
psbt_input
868+
.update_with_descriptor_unchecked(&descriptor)
869+
.unwrap();
866870

867871
assert_eq!(psbt_input.redeem_script, Some(script.to_v0_p2wsh()));
868872
assert_eq!(psbt_input.witness_script, Some(script));

src/descriptor/policy.rs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,7 +1148,6 @@ mod test {
11481148
use bitcoin::secp256k1::Secp256k1;
11491149
use bitcoin::util::bip32;
11501150
use bitcoin::Network;
1151-
use miniscript::DescriptorTrait;
11521151
use std::str::FromStr;
11531152
use std::sync::Arc;
11541153

@@ -1346,9 +1345,8 @@ mod test {
13461345
let (wallet_desc, keymap) = desc
13471346
.into_wallet_descriptor(&secp, Network::Testnet)
13481347
.unwrap();
1349-
let single_key = wallet_desc.derive(0);
13501348
let signers_container = Arc::new(SignersContainer::build(keymap, &wallet_desc, &secp));
1351-
let policy = single_key
1349+
let policy = wallet_desc
13521350
.extract_policy(&signers_container, BuildSatisfaction::None, &secp)
13531351
.unwrap()
13541352
.unwrap();
@@ -1360,16 +1358,15 @@ mod test {
13601358
let (wallet_desc, keymap) = desc
13611359
.into_wallet_descriptor(&secp, Network::Testnet)
13621360
.unwrap();
1363-
let single_key = wallet_desc.derive(0);
13641361
let signers_container = Arc::new(SignersContainer::build(keymap, &wallet_desc, &secp));
1365-
let policy = single_key
1362+
let policy = wallet_desc
13661363
.extract_policy(&signers_container, BuildSatisfaction::None, &secp)
13671364
.unwrap()
13681365
.unwrap();
13691366

1370-
assert!(matches!(&policy.item, EcdsaSignature(PkOrF::Fingerprint(f)) if f == &fingerprint));
1367+
assert!(matches!(policy.item, EcdsaSignature(PkOrF::Fingerprint(f)) if f == fingerprint));
13711368
assert!(
1372-
matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None)
1369+
matches!(policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None)
13731370
);
13741371
}
13751372

@@ -1385,21 +1382,20 @@ mod test {
13851382
let (wallet_desc, keymap) = desc
13861383
.into_wallet_descriptor(&secp, Network::Testnet)
13871384
.unwrap();
1388-
let single_key = wallet_desc.derive(0);
13891385
let signers_container = Arc::new(SignersContainer::build(keymap, &wallet_desc, &secp));
1390-
let policy = single_key
1386+
let policy = wallet_desc
13911387
.extract_policy(&signers_container, BuildSatisfaction::None, &secp)
13921388
.unwrap()
13931389
.unwrap();
13941390

13951391
assert!(
1396-
matches!(&policy.item, Multisig { keys, threshold } if threshold == &1
1392+
matches!(policy.item, Multisig { keys, threshold } if threshold == 1
13971393
&& keys[0] == PkOrF::Fingerprint(fingerprint0)
13981394
&& keys[1] == PkOrF::Fingerprint(fingerprint1))
13991395
);
14001396
assert!(
1401-
matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
1402-
&& m == &1
1397+
matches!(policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == 2
1398+
&& m == 1
14031399
&& items.len() == 2
14041400
&& conditions.contains_key(&vec![0])
14051401
&& conditions.contains_key(&vec![1])
@@ -1663,7 +1659,7 @@ mod test {
16631659
let signers_container = Arc::new(SignersContainer::build(keymap, &wallet_desc, &secp));
16641660

16651661
let addr = wallet_desc
1666-
.as_derived(0, &secp)
1662+
.at_derivation_index(0)
16671663
.address(Network::Testnet)
16681664
.unwrap();
16691665
assert_eq!(

src/descriptor/template.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -468,12 +468,10 @@ mod test {
468468
use std::str::FromStr;
469469

470470
use super::*;
471-
use crate::descriptor::derived::AsDerived;
472471
use crate::descriptor::{DescriptorError, DescriptorMeta};
473472
use crate::keys::ValidNetworks;
474473
use bitcoin::network::constants::Network::Regtest;
475-
use bitcoin::secp256k1::Secp256k1;
476-
use miniscript::descriptor::{DescriptorPublicKey, DescriptorTrait, KeyMap};
474+
use miniscript::descriptor::{DescriptorPublicKey, KeyMap};
477475
use miniscript::Descriptor;
478476

479477
// BIP44 `pkh(key/44'/{0,1}'/0'/{0,1}/*)`
@@ -517,17 +515,15 @@ mod test {
517515
is_fixed: bool,
518516
expected: &[&str],
519517
) {
520-
let secp = Secp256k1::new();
521-
522518
let (desc, _key_map, _networks) = desc.unwrap();
523519
assert_eq!(desc.is_witness(), is_witness);
524-
assert_eq!(!desc.is_deriveable(), is_fixed);
520+
assert_eq!(!desc.has_wildcard(), is_fixed);
525521
for i in 0..expected.len() {
526522
let index = i as u32;
527-
let child_desc = if !desc.is_deriveable() {
528-
desc.as_derived_fixed(&secp)
523+
let child_desc = if !desc.has_wildcard() {
524+
desc.at_derivation_index(0)
529525
} else {
530-
desc.as_derived(index, &secp)
526+
desc.at_derivation_index(index)
531527
};
532528
let address = child_desc.address(Regtest).unwrap();
533529
assert_eq!(address.to_string(), *expected.get(i).unwrap());

src/wallet/mod.rs

Lines changed: 72 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,7 @@ where
690690
// No RBF requested, use the value from CSV. Note that this value is by definition
691691
// non-final, so even if a timelock is enabled this nSequence is fine, hence why we
692692
// don't bother checking for it here. The same is true for all the other branches below
693-
(None, Some(csv)) => csv,
693+
(None, Some(csv)) => Sequence(csv),
694694

695695
// RBF with a specific value but that value is too high
696696
(Some(tx_builder::RbfValue::Value(rbf)), _) if rbf >= 0xFFFFFFFE => {
@@ -709,10 +709,10 @@ where
709709
}
710710

711711
// RBF enabled with the default value with CSV also enabled. CSV takes precedence
712-
(Some(tx_builder::RbfValue::Default), Some(csv)) => csv,
712+
(Some(tx_builder::RbfValue::Default), Some(csv)) => Sequence(csv),
713713
// Valid RBF, either default or with a specific value. We ignore the `CSV` value
714714
// because we've already checked it before
715-
(Some(rbf), _) => rbf.get_value(),
715+
(Some(rbf), _) => Sequence(rbf.get_value()), // TODO: remove wrapping Sequence
716716
};
717717

718718
let (fee_rate, mut fee_amount) = match params
@@ -840,7 +840,7 @@ where
840840
.map(|u| bitcoin::TxIn {
841841
previous_output: u.outpoint(),
842842
script_sig: Script::default(),
843-
sequence: Sequence(n_sequence),
843+
sequence: n_sequence,
844844
witness: Witness::new(),
845845
})
846846
.collect();
@@ -1615,29 +1615,41 @@ where
16151615
&self,
16161616
psbt: &mut psbt::PartiallySignedTransaction,
16171617
) -> Result<(), Error> {
1618-
// We need to borrow `psbt` mutably within the loop, so we have to allocate a vec for all
1619-
// the utxos first
1618+
// We need to borrow `psbt` mutably within the loops, so we have to allocate a vec for all
1619+
// the input utxos and outputs
16201620
let utxos = (0..psbt.inputs.len())
1621-
.filter_map(|i| psbt.get_utxo_for(i))
1621+
.filter_map(|i| psbt.get_utxo_for(i).map(|utxo| (true, i, utxo)))
1622+
.chain(
1623+
psbt.unsigned_tx
1624+
.output
1625+
.iter()
1626+
.enumerate()
1627+
.map(|(i, out)| (false, i, out.clone())),
1628+
)
16221629
.collect::<Vec<_>>();
16231630

1624-
// Try to figure out the keychain and derivation for every input
1625-
for (index, out) in utxos.into_iter().enumerate() {
1631+
// Try to figure out the keychain and derivation for every input and output
1632+
for (is_input, index, out) in utxos.into_iter() {
16261633
if let Some((keychain, child)) = self
16271634
.database
16281635
.borrow()
16291636
.get_path_from_script_pubkey(&out.script_pubkey)?
16301637
{
1631-
debug!("Found descriptor {:?}/{}", keychain, child);
1638+
debug!(
1639+
"Found descriptor for input #{} {:?}/{}",
1640+
index, keychain, child
1641+
);
16321642

1633-
// Update the metadata
16341643
let desc = self.get_descriptor_for_keychain(keychain);
16351644
let desc = desc.at_derivation_index(child);
16361645

1637-
psbt.update_input_with_descriptor(index, &desc)
1638-
.map_err(MiniscriptPsbtError::UtxoUpdateError)?;
1639-
psbt.update_output_with_descriptor(index, &desc)
1640-
.map_err(MiniscriptPsbtError::OutputUpdateError)?;
1646+
if is_input {
1647+
psbt.update_input_with_descriptor(index, &desc)
1648+
.map_err(MiniscriptPsbtError::UtxoUpdateError)?;
1649+
} else {
1650+
psbt.update_output_with_descriptor(index, &desc)
1651+
.map_err(MiniscriptPsbtError::OutputUpdateError)?;
1652+
}
16411653
}
16421654
}
16431655

@@ -1815,7 +1827,7 @@ pub fn get_funded_wallet(
18151827

18161828
#[cfg(test)]
18171829
pub(crate) mod test {
1818-
use bitcoin::{util::psbt, Network, Sequence, PackedLockTime};
1830+
use bitcoin::{util::psbt, Network, PackedLockTime, Sequence};
18191831

18201832
use crate::database::Database;
18211833
use crate::types::KeychainKind;
@@ -2176,7 +2188,10 @@ pub(crate) mod test {
21762188
let (psbt, _) = builder.finish().unwrap();
21772189

21782190
// If there's no current_height we're left with using the last sync height
2179-
assert_eq!(psbt.unsigned_tx.lock_time, PackedLockTime(sync_time.block_time.height));
2191+
assert_eq!(
2192+
psbt.unsigned_tx.lock_time,
2193+
PackedLockTime(sync_time.block_time.height)
2194+
);
21802195
}
21812196

21822197
#[test]
@@ -4736,48 +4751,50 @@ pub(crate) mod test {
47364751
.policy_path(path, KeychainKind::External);
47374752
let (psbt, _) = builder.finish().unwrap();
47384753

4754+
let mut input_key_origins = psbt.inputs[0]
4755+
.tap_key_origins
4756+
.clone()
4757+
.into_iter()
4758+
.collect::<Vec<_>>();
4759+
input_key_origins.sort();
4760+
47394761
assert_eq!(
4740-
psbt.inputs[0]
4741-
.tap_key_origins
4742-
.clone()
4743-
.into_iter()
4744-
.collect::<Vec<_>>(),
4745-
vec![(
4746-
from_str!("2b0558078bec38694a84933d659303e2575dae7e91685911454115bfd64487e3"),
4762+
input_key_origins,
4763+
vec![
47474764
(
4748-
vec![
4749-
from_str!(
4750-
"858ad7a7d7f270e2c490c4d6ba00c499e46b18fdd59ea3c2c47d20347110271e"
4751-
),
4752-
from_str!(
4753-
"f6e927ad4492c051fe325894a4f5f14538333b55a35f099876be42009ec8f903"
4754-
)
4755-
],
4756-
(Default::default(), Default::default())
4765+
from_str!("b511bd5771e47ee27558b1765e87b541668304ec567721c7b880edc0a010da55"),
4766+
(
4767+
vec![],
4768+
(FromStr::from_str("871fd295").unwrap(), vec![].into())
4769+
)
4770+
),
4771+
(
4772+
from_str!("2b0558078bec38694a84933d659303e2575dae7e91685911454115bfd64487e3"),
4773+
(
4774+
vec![
4775+
from_str!(
4776+
"858ad7a7d7f270e2c490c4d6ba00c499e46b18fdd59ea3c2c47d20347110271e"
4777+
),
4778+
from_str!(
4779+
"f6e927ad4492c051fe325894a4f5f14538333b55a35f099876be42009ec8f903"
4780+
),
4781+
],
4782+
(FromStr::from_str("ece52657").unwrap(), vec![].into())
4783+
)
47574784
)
4758-
)],
4785+
],
47594786
"Wrong input tap_key_origins"
47604787
);
4788+
4789+
let mut output_key_origins = psbt.outputs[0]
4790+
.tap_key_origins
4791+
.clone()
4792+
.into_iter()
4793+
.collect::<Vec<_>>();
4794+
output_key_origins.sort();
4795+
47614796
assert_eq!(
4762-
psbt.outputs[0]
4763-
.tap_key_origins
4764-
.clone()
4765-
.into_iter()
4766-
.collect::<Vec<_>>(),
4767-
vec![(
4768-
from_str!("2b0558078bec38694a84933d659303e2575dae7e91685911454115bfd64487e3"),
4769-
(
4770-
vec![
4771-
from_str!(
4772-
"858ad7a7d7f270e2c490c4d6ba00c499e46b18fdd59ea3c2c47d20347110271e"
4773-
),
4774-
from_str!(
4775-
"f6e927ad4492c051fe325894a4f5f14538333b55a35f099876be42009ec8f903"
4776-
)
4777-
],
4778-
(Default::default(), Default::default())
4779-
)
4780-
)],
4797+
input_key_origins, output_key_origins,
47814798
"Wrong output tap_key_origins"
47824799
);
47834800
}
@@ -5029,7 +5046,7 @@ pub(crate) mod test {
50295046
#[test]
50305047
fn test_taproot_script_spend_sign_include_some_leaves() {
50315048
use crate::signer::TapLeavesOptions;
5032-
use crate::wallet::taproot::TapLeafHash;
5049+
use bitcoin::util::taproot::TapLeafHash;
50335050

50345051
let (wallet, _, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
50355052
let addr = wallet.get_address(AddressIndex::New).unwrap();
@@ -5071,7 +5088,7 @@ pub(crate) mod test {
50715088
#[test]
50725089
fn test_taproot_script_spend_sign_exclude_some_leaves() {
50735090
use crate::signer::TapLeavesOptions;
5074-
use crate::wallet::taproot::TapLeafHash;
5091+
use bitcoin::util::taproot::TapLeafHash;
50755092

50765093
let (wallet, _, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
50775094
let addr = wallet.get_address(AddressIndex::New).unwrap();

0 commit comments

Comments
 (0)