From 5233c6645581e6e5a5afee55946193210f16b7d4 Mon Sep 17 00:00:00 2001 From: Aman Rojjha Date: Wed, 20 Apr 2022 01:02:51 +0530 Subject: [PATCH 1/3] Add Taproot compiler API --- src/policy/concrete.rs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/policy/concrete.rs b/src/policy/concrete.rs index ad30a7311..5dce55cb8 100644 --- a/src/policy/concrete.rs +++ b/src/policy/concrete.rs @@ -194,19 +194,6 @@ impl Policy { } } - /// Compile [`Policy::Or`] and [`Policy::Threshold`] according to odds - #[cfg(feature = "compiler")] - fn compile_tr_policy(&self) -> Result, Error> { - let leaf_compilations: Vec<_> = self - .to_tapleaf_prob_vec(1.0) - .into_iter() - .filter(|x| x.1 != Policy::Unsatisfiable) - .map(|(prob, ref policy)| (OrdF64(prob), compiler::best_compilation(policy).unwrap())) - .collect(); - let taptree = with_huffman_tree::(leaf_compilations).unwrap(); - Ok(taptree) - } - /// Extract the internal_key from policy tree. #[cfg(feature = "compiler")] fn extract_key(self, unspendable_key: Option) -> Result<(Pk, Policy), Error> { @@ -276,7 +263,21 @@ impl Policy { internal_key, match policy { Policy::Trivial => None, - policy => Some(policy.compile_tr_policy()?), + policy => { + let vec_policies: Vec<_> = policy.to_tapleaf_prob_vec(1.0); + let mut leaf_compilations: Vec<(OrdF64, Miniscript)> = vec![]; + for (prob, pol) in vec_policies { + // policy corresponding to the key (replaced by unsatisfiable) is skipped + if pol == Policy::Unsatisfiable { + continue; + } + let compilation = compiler::best_compilation::(&pol)?; + compilation.sanity_check()?; + leaf_compilations.push((OrdF64(prob), compilation)); + } + let taptree = with_huffman_tree::(leaf_compilations)?; + Some(taptree) + } }, )?; Ok(tree) From cef2a5b604de584518b3a9574a86fb1c449b65e7 Mon Sep 17 00:00:00 2001 From: Aman Rojjha Date: Fri, 17 Jun 2022 15:32:45 +0530 Subject: [PATCH 2/3] Add Tr-compiler write-up and doc-comment This write-up is aimed to reason about how the private-compilation (as defined in doc) is also cost-efficient. --- doc/Tr Compiler.pdf | Bin 0 -> 98845 bytes src/policy/concrete.rs | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 doc/Tr Compiler.pdf diff --git a/doc/Tr Compiler.pdf b/doc/Tr Compiler.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cbf5b316a59d3627a452988d5cc2d7d2e75de4ab GIT binary patch literal 98845 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

lhTC4~1UMl+H#T-PtXNc(iv1KtyG^ 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 z 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 wCIJGugt%Z62;davdI=Qx?`!-OR$}j Policy { /// The policy tree constructed by root-level disjunctions over [`Or`][`Policy::Or`] and /// [`Thresh`][`Policy::Threshold`](1, ..) which is flattened into a vector (with respective /// probabilities derived from odds) of policies. - /// For example, the policy `thresh(1,or(pk(A),pk(B)),and(or(pk(C),pk(D)),pk(E)))` gives the vector - /// `[pk(A),pk(B),and(or(pk(C),pk(D)),pk(E)))]`. Each policy in the vector is compiled into - /// the respective miniscripts. A Huffman Tree is created from this vector which optimizes over - /// the probabilitity of satisfaction for the respective branch in the TapTree. + /// For example, the policy `thresh(1,or(pk(A),pk(B)),and(or(pk(C),pk(D)),pk(E)))` gives the + /// vector `[pk(A),pk(B),and(or(pk(C),pk(D)),pk(E)))]`. Each policy in the vector is compiled + /// into the respective miniscripts. A Huffman Tree is created from this vector which optimizes + /// over the probabilitity of satisfaction for the respective branch in the TapTree. + /// + /// Refer to [this link](https://gist.github.com/SarcasticNastik/9e70b2b43375aab3e78c51e09c288c89) + /// or [doc/Tr compiler.pdf] in the root of the repository to understand why such compilation + /// is also *cost-efficient*. // TODO: We might require other compile errors for Taproot. #[cfg(feature = "compiler")] pub fn compile_tr(&self, unspendable_key: Option) -> Result, Error> { From ef4249d0989dac009c99fada4c5324c523019fd4 Mon Sep 17 00:00:00 2001 From: Aman Rojjha Date: Wed, 20 Apr 2022 01:12:19 +0530 Subject: [PATCH 3/3] Add taproot compiler example usage --- Cargo.toml | 5 ++ contrib/test.sh | 1 + examples/taproot.rs | 146 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 examples/taproot.rs diff --git a/Cargo.toml b/Cargo.toml index 7e8c6f475..b3340376b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ hashbrown = { version = "0.11", optional = true } [dev-dependencies] bitcoind = {version = "0.26.1", features=["22_0"]} actual-rand = { package = "rand", version = "0.8.4"} +secp256k1 = {version = "0.22.1", features = ["rand-std"]} [[example]] name = "htlc" @@ -52,3 +53,7 @@ required-features = ["std"] [[example]] name = "xpub_descriptors" required-features = ["std"] + +[[example]] +name = "taproot" +required-features = ["compiler","std"] diff --git a/contrib/test.sh b/contrib/test.sh index a6f9d2c53..c9b0a696a 100755 --- a/contrib/test.sh +++ b/contrib/test.sh @@ -53,6 +53,7 @@ then cargo run --example verify_tx > /dev/null cargo run --example psbt cargo run --example xpub_descriptors + cargo run --example taproot --features=compiler fi if [ "$DO_NO_STD" = true ] diff --git a/examples/taproot.rs b/examples/taproot.rs new file mode 100644 index 000000000..996d82313 --- /dev/null +++ b/examples/taproot.rs @@ -0,0 +1,146 @@ +use std::collections::HashMap; +use std::str::FromStr; + +use bitcoin::hashes::{hash160, sha256}; +use bitcoin::util::address::WitnessVersion; +use bitcoin::Network; +use miniscript::descriptor::DescriptorType; +use miniscript::policy::Concrete; +use miniscript::{Descriptor, Miniscript, Tap, TranslatePk, Translator}; +use secp256k1::{rand, KeyPair}; + +// Refer to https://github.com/sanket1729/adv_btc_workshop/blob/master/workshop.md#creating-a-taproot-descriptor +// for a detailed explanation of the policy and it's compilation + +struct StrPkTranslator { + pk_map: HashMap, +} + +impl Translator for StrPkTranslator { + fn pk(&mut self, pk: &String) -> Result { + self.pk_map.get(pk).copied().ok_or(()) + } + + fn pkh(&mut self, _pkh: &String) -> Result { + unreachable!("Policy doesn't contain any pkh fragment"); + } + + fn sha256(&mut self, _sha256: &String) -> Result { + unreachable!("Policy does not contain any sha256 fragment"); + } +} + +fn main() { + let pol_str = "or( + 99@thresh(2, + pk(hA), pk(S) + ),1@or( + 99@pk(Ca), + 1@and(pk(In), older(9)) + ) + )" + .replace(&[' ', '\n', '\t'][..], ""); + + let pol: Concrete = Concrete::from_str(&pol_str).unwrap(); + // In case we can't find an internal key for the given policy, we set the internal key to + // a random pubkey as specified by BIP341 (which are *unspendable* by any party :p) + let desc = pol.compile_tr(Some("UNSPENDABLE_KEY".to_string())).unwrap(); + + let expected_desc = + Descriptor::::from_str("tr(Ca,{and_v(v:pk(In),older(9)),multi_a(2,hA,S)})") + .unwrap(); + assert_eq!(desc, expected_desc); + + // Check whether the descriptors are safe. + assert!(desc.sanity_check().is_ok()); + + // Descriptor Type and Version should match respectively for Taproot + let desc_type = desc.desc_type(); + assert_eq!(desc_type, DescriptorType::Tr); + assert_eq!(desc_type.segwit_version().unwrap(), WitnessVersion::V1); + + if let Descriptor::Tr(ref p) = desc { + // Check if internal key is correctly inferred as Ca + // assert_eq!(p.internal_key(), &pubkeys[2]); + assert_eq!(p.internal_key(), "Ca"); + + // Iterate through scripts + let mut iter = p.iter_scripts(); + assert_eq!( + iter.next().unwrap(), + ( + 1u8, + &Miniscript::::from_str("and_v(vc:pk_k(In),older(9))").unwrap() + ) + ); + assert_eq!( + iter.next().unwrap(), + ( + 1u8, + &Miniscript::::from_str("multi_a(2,hA,S)").unwrap() + ) + ); + assert_eq!(iter.next(), None); + } + + let mut pk_map = HashMap::new(); + + // We require secp for generating a random XOnlyPublicKey + let secp = secp256k1::Secp256k1::new(); + let key_pair = KeyPair::new(&secp, &mut rand::thread_rng()); + // Random unspendable XOnlyPublicKey provided for compilation to Taproot Descriptor + let unspendable_pubkey = bitcoin::XOnlyPublicKey::from_keypair(&key_pair); + + pk_map.insert("UNSPENDABLE_KEY".to_string(), unspendable_pubkey); + let pubkeys = hardcoded_xonlypubkeys(); + pk_map.insert("hA".to_string(), pubkeys[0]); + pk_map.insert("S".to_string(), pubkeys[1]); + pk_map.insert("Ca".to_string(), pubkeys[2]); + pk_map.insert("In".to_string(), pubkeys[3]); + let mut t = StrPkTranslator { pk_map }; + + let real_desc = desc.translate_pk(&mut t).unwrap(); + + // Max Satisfaction Weight for compilation, corresponding to the script-path spend + // `multi_a(2,PUBKEY_1,PUBKEY_2) at taptree depth 1, having + // Max Witness Size = scriptSig len + control_block size + varint(script_size) + script_size + + // varint(max satisfaction elements) + max satisfaction size + // = 4 + 65 + 1 + 70 + 1 + 132 + let max_sat_wt = real_desc.max_satisfaction_weight().unwrap(); + assert_eq!(max_sat_wt, 273); + + // Compute the bitcoin address and check if it matches + let network = Network::Bitcoin; + let addr = real_desc.address(network).unwrap(); + let expected_addr = bitcoin::Address::from_str( + "bc1pcc8ku64slu3wu04a6g376d2s8ck9y5alw5sus4zddvn8xgpdqw2swrghwx", + ) + .unwrap(); + assert_eq!(addr, expected_addr); +} + +fn hardcoded_xonlypubkeys() -> Vec { + let serialized_keys: [[u8; 32]; 4] = [ + [ + 22, 37, 41, 4, 57, 254, 191, 38, 14, 184, 200, 133, 111, 226, 145, 183, 245, 112, 100, + 42, 69, 210, 146, 60, 179, 170, 174, 247, 231, 224, 221, 52, + ], + [ + 194, 16, 47, 19, 231, 1, 0, 143, 203, 11, 35, 148, 101, 75, 200, 15, 14, 54, 222, 208, + 31, 205, 191, 215, 80, 69, 214, 126, 10, 124, 107, 154, + ], + [ + 202, 56, 167, 245, 51, 10, 193, 145, 213, 151, 66, 122, 208, 43, 10, 17, 17, 153, 170, + 29, 89, 133, 223, 134, 220, 212, 166, 138, 2, 152, 122, 16, + ], + [ + 50, 23, 194, 4, 213, 55, 42, 210, 67, 101, 23, 3, 195, 228, 31, 70, 127, 79, 21, 188, + 168, 39, 134, 58, 19, 181, 3, 63, 235, 103, 155, 213, + ], + ]; + let mut keys: Vec = vec![]; + for idx in 0..4 { + keys.push(bitcoin::XOnlyPublicKey::from_slice(&serialized_keys[idx][..]).unwrap()); + } + keys +}