Skip to content

Commit bc47538

Browse files
committed
add taproot calls in big executable
1 parent 545bbbe commit bc47538

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

examples/big.rs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
//!
1111
1212
use std::{collections::HashMap, str::FromStr};
13-
use bitcoin::ecdsa;
14-
use miniscript::{descriptor::Wsh, policy::{Concrete, Liftable}, psbt::PsbtExt, DefiniteDescriptorKey, Descriptor, DescriptorPublicKey, MiniscriptKey};
13+
use bitcoin::{ecdsa, XOnlyPublicKey};
14+
use miniscript::{descriptor::Wsh, policy::{Concrete, Liftable}, psbt::PsbtExt, translate_hash_fail, DefiniteDescriptorKey, Descriptor, DescriptorPublicKey, MiniscriptKey, TranslatePk, Translator};
1515
use secp256k1::Secp256k1;
1616
fn main() {
1717
let empty = "".to_string();
@@ -47,11 +47,36 @@ fn main() {
4747
let d = miniscript::Descriptor::<bitcoin::PublicKey>::from_str(&i).unwrap();
4848
let sigs = HashMap::<bitcoin::PublicKey, ecdsa::Signature>::new();
4949
d.satisfy(&mut tx.input[0], &sigs).unwrap();
50+
51+
let pol = Concrete::<String>::from_str(&i).unwrap();
52+
let desc = pol.compile_tr(Some("UNSPENDABLE_KEY".to_string())).unwrap();
53+
println!("{}", desc);
54+
let pk_map =HashMap::new();
55+
let mut t = StrPkTranslator { pk_map };
56+
let real_desc = desc.translate_pk(&mut t).unwrap();
57+
println!("{}", real_desc);
58+
let addr = real_desc.address(bitcoin::Network::Bitcoin).unwrap();
59+
println!("{}", addr);
5060
}
5161

5262
fn use_descriptor<K: MiniscriptKey>(d: Descriptor<K>) {
5363
println!("{}", d);
5464
println!("{:?}", d);
5565
println!("{:?}", d.desc_type());
5666
println!("{:?}", d.sanity_check());
67+
}
68+
69+
70+
struct StrPkTranslator {
71+
pk_map: HashMap<String, XOnlyPublicKey>,
72+
}
73+
74+
impl Translator<String, XOnlyPublicKey, ()> for StrPkTranslator {
75+
fn pk(&mut self, pk: &String) -> Result<XOnlyPublicKey, ()> {
76+
self.pk_map.get(pk).copied().ok_or(())
77+
}
78+
79+
// We don't need to implement these methods as we are not using them in the policy.
80+
// Fail if we encounter any hash fragments. See also translate_hash_clone! macro.
81+
translate_hash_fail!(String, XOnlyPublicKey, ());
5782
}

0 commit comments

Comments
 (0)