|
| 1 | +extern crate bitcoin; |
| 2 | +extern crate miniscript; |
| 3 | + |
| 4 | +#[cfg(feature = "compiler")] |
| 5 | +use miniscript::policy::Concrete; |
| 6 | +use miniscript::Descriptor; |
| 7 | +use std::str::FromStr; |
| 8 | + |
| 9 | +fn main() { |
| 10 | + let policies_str = [ |
| 11 | + "or(1@pk(A),1@pk(B))", |
| 12 | + "or(1@and(pk(A),pk(B)),1@pk(C))", |
| 13 | + "or(9@or(10@or(1@pk(A),100@pk(D)),1@pk(B)),1@pk(C))", |
| 14 | + "or(1@or(1@or(1@pk(A),1@pk(D)),1@pk(B)),1@pk(C))", |
| 15 | + "or(1@pk(A),1@or(1@and(pk(B),pk(C)),1@and(pk(D),older(10))))", |
| 16 | + "thresh(1,or(1@pk(A),1@pk(B)),or(1@pk(C),1@or(1@and(pk(E),pk(F)),1@pk(D))))", |
| 17 | + "thresh(1,pk(Z),and(pk(A),or(1@pk(B),1@pk(C))),pk(D),or(1@or(1@pk(G),1@pk(E)),1@and(pk(F),pk(X))))", |
| 18 | + "thresh(1,and(pk(A),or(1@pk(B),1@pk(C))),or(10@pk(D),7@pk(E)),or(2@or(1@pk(F),1@and(pk(G),pk(H))),7@pk(I)))" |
| 19 | + ]; |
| 20 | + let unspendable_key = "UNSPENDABLE_KEY".to_string(); |
| 21 | + let policies: Vec<Concrete<String>> = policies_str |
| 22 | + .into_iter() |
| 23 | + .map(|x| Concrete::from_str(x).unwrap()) |
| 24 | + .collect(); |
| 25 | + let private_comp: Vec<Descriptor<String>> = policies |
| 26 | + .iter() |
| 27 | + .map(|pol| { |
| 28 | + pol.compile_tr_private(Some(unspendable_key.clone())) |
| 29 | + .unwrap() |
| 30 | + }) |
| 31 | + .collect(); |
| 32 | + let default_comp: Vec<Descriptor<String>> = policies |
| 33 | + .iter() |
| 34 | + .map(|pol| pol.compile_tr(Some(unspendable_key.clone())).unwrap()) |
| 35 | + .collect(); |
| 36 | + |
| 37 | + for idx in 0..policies.len() { |
| 38 | + println!("Example {}", idx + 1); |
| 39 | + println!("Policy: {}", policies_str[idx]); |
| 40 | + println!("Private compilation: {}", private_comp[idx]); |
| 41 | + println!("Default compilation: {}\n", default_comp[idx]); |
| 42 | + } |
| 43 | +} |
0 commit comments