]> Untitled Git - bdk/commitdiff
Update tmp_plan to rust-bitcoin 0.30.0
authorDaniela Brozzoni <danielabrozzoni@protonmail.com>
Mon, 26 Jun 2023 10:18:15 +0000 (12:18 +0200)
committerDaniela Brozzoni <danielabrozzoni@protonmail.com>
Thu, 3 Aug 2023 08:59:09 +0000 (10:59 +0200)
nursery/tmp_plan/src/lib.rs
nursery/tmp_plan/src/plan_impls.rs
nursery/tmp_plan/src/requirements.rs
nursery/tmp_plan/src/template.rs

index d7248d82d2fa9fe1fbee4dd03963fe44df2f6549..dce190143f946ce843a58b9308f81436f23b4798 100644 (file)
 //! witness/script_sig for the input.
 use bdk_chain::{bitcoin, collections::*, miniscript};
 use bitcoin::{
-    blockdata::{locktime::LockTime, transaction::Sequence},
+    absolute,
+    address::WitnessVersion,
+    bip32::{DerivationPath, Fingerprint, KeySource},
+    blockdata::transaction::Sequence,
+    ecdsa,
     hashes::{hash160, ripemd160, sha256},
     secp256k1::Secp256k1,
-    util::{
-        address::WitnessVersion,
-        bip32::{DerivationPath, Fingerprint, KeySource},
-        taproot::{LeafVersion, TapBranchHash, TapLeafHash},
-    },
-    EcdsaSig, SchnorrSig, Script, TxIn, Witness,
+    taproot::{self, LeafVersion, TapLeafHash},
+    ScriptBuf, TxIn, Witness,
 };
 use miniscript::{
     descriptor::{InnerXKey, Tr},
@@ -46,7 +46,7 @@ use template::TemplateItem;
 enum TrSpend {
     KeySpend,
     LeafSpend {
-        script: Script,
+        script: ScriptBuf,
         leaf_version: LeafVersion,
     },
 }
@@ -55,7 +55,7 @@ enum TrSpend {
 enum Target {
     Legacy,
     Segwitv0 {
-        script_code: Script,
+        script_code: ScriptBuf,
     },
     Segwitv1 {
         tr: Tr<DefiniteDescriptorKey>,
@@ -72,7 +72,7 @@ impl Target {}
 pub struct Plan<AK> {
     template: Vec<TemplateItem<AK>>,
     target: Target,
-    set_locktime: Option<LockTime>,
+    set_locktime: Option<absolute::LockTime>,
     set_sequence: Option<Sequence>,
 }
 
@@ -86,9 +86,9 @@ impl Default for Target {
 /// Signatures and hash pre-images that can be used to complete a plan.
 pub struct SatisfactionMaterial {
     /// Schnorr signautres under their keys
-    pub schnorr_sigs: BTreeMap<DefiniteDescriptorKey, SchnorrSig>,
+    pub schnorr_sigs: BTreeMap<DefiniteDescriptorKey, taproot::Signature>,
     /// ECDSA signatures under their keys
-    pub ecdsa_sigs: BTreeMap<DefiniteDescriptorKey, EcdsaSig>,
+    pub ecdsa_sigs: BTreeMap<DefiniteDescriptorKey, ecdsa::Signature>,
     /// SHA256 pre-images under their images
     pub sha256_preimages: BTreeMap<sha256::Hash, Vec<u8>>,
     /// hash160 pre-images under their images
@@ -201,7 +201,7 @@ where
                     ..
                 } => PlanState::Complete {
                     final_script_sig: None,
-                    final_script_witness: Some(Witness::from_vec(witness)),
+                    final_script_witness: Some(Witness::from(witness)),
                 },
                 Target::Segwitv1 {
                     tr,
@@ -220,7 +220,7 @@ where
 
                     PlanState::Complete {
                         final_script_sig: None,
-                        final_script_witness: Some(Witness::from_vec(witness)),
+                        final_script_witness: Some(Witness::from(witness)),
                     }
                 }
             }
@@ -306,7 +306,7 @@ where
     }
 
     /// The minimum required locktime height or time on the transaction using the plan.
-    pub fn required_locktime(&self) -> Option<LockTime> {
+    pub fn required_locktime(&self) -> Option<absolute::LockTime> {
         self.set_locktime.clone()
     }
 
@@ -330,7 +330,7 @@ pub enum PlanState<Ak> {
     /// The plan is complete
     Complete {
         /// The script sig that should be set on the input
-        final_script_sig: Option<Script>,
+        final_script_sig: Option<ScriptBuf>,
         /// The witness that should be set on the input
         final_script_witness: Option<Witness>,
     },
@@ -341,7 +341,7 @@ pub enum PlanState<Ak> {
 pub struct Assets<K> {
     pub keys: Vec<K>,
     pub txo_age: Option<Sequence>,
-    pub max_locktime: Option<LockTime>,
+    pub max_locktime: Option<absolute::LockTime>,
     pub sha256: Vec<sha256::Hash>,
     pub hash256: Vec<hash256::Hash>,
     pub ripemd160: Vec<ripemd160::Hash>,
@@ -380,6 +380,11 @@ impl CanDerive for KeySource {
 
                 path_to_child(self, &origin, Some(&dxk.derivation_path))
             }
+            DescriptorPublicKey::MultiXPub(_) => {
+                // This crate will be replaced by
+                // https://github.com/rust-bitcoin/rust-miniscript/pull/481 anyways
+                todo!();
+            }
         }
     }
 }
index 79f5cf66d7198ca367f6963c1a689e1d0c27461c..6b4da3c9045b117eb5e7a0153b19facd4e75bb8f 100644 (file)
@@ -1,5 +1,5 @@
 use bdk_chain::{bitcoin, miniscript};
-use bitcoin::locktime::{Height, Time};
+use bitcoin::locktime::absolute;
 use miniscript::Terminal;
 
 use super::*;
@@ -154,7 +154,7 @@ where
 
 #[derive(Debug)]
 struct TermPlan<Ak> {
-    pub min_locktime: Option<LockTime>,
+    pub min_locktime: Option<absolute::LockTime>,
     pub min_sequence: Option<Sequence>,
     pub template: Vec<TemplateItem<Ak>>,
 }
@@ -216,10 +216,12 @@ fn plan_steps<Ak: Clone + CanDerive, Ctx: ScriptContext>(
         }
         Terminal::After(locktime) => {
             let max_locktime = assets.max_locktime?;
-            let locktime = LockTime::from(locktime);
+            let locktime = absolute::LockTime::from(*locktime);
             let (height, time) = match max_locktime {
-                LockTime::Blocks(height) => (height, Time::from_consensus(0).unwrap()),
-                LockTime::Seconds(seconds) => (Height::from_consensus(0).unwrap(), seconds),
+                absolute::LockTime::Blocks(height) => {
+                    (height, absolute::Time::from_consensus(0).unwrap())
+                }
+                absolute::LockTime::Seconds(seconds) => (absolute::Height::ZERO, seconds),
             };
             if max_locktime.is_satisfied_by(height, time) {
                 Some(TermPlan {
index 3aa6ac2b08215e2f659d28866adb2d00837bb4e4..08e1ef822670d793a4d1d58302adc144ec6b4bd3 100644 (file)
@@ -2,11 +2,14 @@ use bdk_chain::{bitcoin, collections::*, miniscript};
 use core::ops::Deref;
 
 use bitcoin::{
+    bip32,
     hashes::{hash160, ripemd160, sha256},
+    key::XOnlyPublicKey,
     psbt::Prevouts,
     secp256k1::{KeyPair, Message, PublicKey, Signing, Verification},
-    util::{bip32, sighash, sighash::SighashCache, taproot},
-    EcdsaSighashType, SchnorrSighashType, Transaction, TxOut, XOnlyPublicKey,
+    sighash,
+    sighash::{EcdsaSighashType, SighashCache, TapSighashType},
+    taproot, Transaction, TxOut,
 };
 
 use super::*;
@@ -72,7 +75,7 @@ pub enum RequiredSignatures<Ak> {
         /// the internal key
         plan_key: PlanKey<Ak>,
         /// The merkle root of the taproot output
-        merkle_root: Option<TapBranchHash>,
+        merkle_root: Option<taproot::TapNodeHash>,
     },
     /// Taproot script path signatures are required
     TapScript {
@@ -114,12 +117,12 @@ impl From<bip32::Error> for SigningError {
 impl std::error::Error for SigningError {}
 
 impl RequiredSignatures<DescriptorPublicKey> {
-    pub fn sign_with_keymap<T: Deref<Target = Transaction>>(
+    pub fn sign_with_keymap<T: core::borrow::Borrow<Transaction>>(
         &self,
         input_index: usize,
         keymap: &KeyMap,
         prevouts: &Prevouts<'_, impl core::borrow::Borrow<TxOut>>,
-        schnorr_sighashty: Option<SchnorrSighashType>,
+        schnorr_sighashty: Option<TapSighashType>,
         _ecdsa_sighashty: Option<EcdsaSighashType>,
         sighash_cache: &mut SighashCache<T>,
         auth_data: &mut SatisfactionMaterial,
@@ -131,7 +134,7 @@ impl RequiredSignatures<DescriptorPublicKey> {
                 plan_key,
                 merkle_root,
             } => {
-                let schnorr_sighashty = schnorr_sighashty.unwrap_or(SchnorrSighashType::Default);
+                let schnorr_sighashty = schnorr_sighashty.unwrap_or(TapSighashType::Default);
                 let sighash = sighash_cache.taproot_key_spend_signature_hash(
                     input_index,
                     prevouts,
@@ -148,6 +151,11 @@ impl RequiredSignatures<DescriptorPublicKey> {
                             .derive_priv(&secp, &plan_key.derivation_hint)?
                             .private_key
                     }
+                    DescriptorSecretKey::MultiXPrv(_) => {
+                        // This crate will be replaced by
+                        // https://github.com/rust-bitcoin/rust-miniscript/pull/481 anyways
+                        todo!();
+                    }
                 };
 
                 let pubkey = PublicKey::from_secret_key(&secp, &secret_key);
@@ -162,7 +170,7 @@ impl RequiredSignatures<DescriptorPublicKey> {
                 let msg = Message::from_slice(sighash.as_ref()).expect("Sighashes are 32 bytes");
                 let sig = secp.sign_schnorr_no_aux_rand(&msg, &keypair);
 
-                let bitcoin_sig = SchnorrSig {
+                let bitcoin_sig = taproot::Signature {
                     sig,
                     hash_ty: schnorr_sighashty,
                 };
@@ -176,7 +184,7 @@ impl RequiredSignatures<DescriptorPublicKey> {
                 leaf_hash,
                 plan_keys,
             } => {
-                let sighash_type = schnorr_sighashty.unwrap_or(SchnorrSighashType::Default);
+                let sighash_type = schnorr_sighashty.unwrap_or(TapSighashType::Default);
                 let sighash = sighash_cache.taproot_script_spend_signature_hash(
                     input_index,
                     prevouts,
@@ -195,12 +203,17 @@ impl RequiredSignatures<DescriptorPublicKey> {
                                     .derive_priv(&secp, &plan_key.derivation_hint)?
                                     .private_key
                             }
+                            DescriptorSecretKey::MultiXPrv(_) => {
+                                // This crate will be replaced by
+                                // https://github.com/rust-bitcoin/rust-miniscript/pull/481 anyways
+                                todo!();
+                            }
                         };
                         let keypair = KeyPair::from_secret_key(&secp, &secret_key.clone());
                         let msg =
                             Message::from_slice(sighash.as_ref()).expect("Sighashes are 32 bytes");
                         let sig = secp.sign_schnorr_no_aux_rand(&msg, &keypair);
-                        let bitcoin_sig = SchnorrSig {
+                        let bitcoin_sig = taproot::Signature {
                             sig,
                             hash_ty: sighash_type,
                         };
index d674d7088ccd30fc4474afad180a43ca56316653..9943e9397da13ca13cebd2711159ac2bea1c19c1 100644 (file)
@@ -1,7 +1,7 @@
 use bdk_chain::{bitcoin, miniscript};
 use bitcoin::{
+    bip32::DerivationPath,
     hashes::{hash160, ripemd160, sha256},
-    util::bip32::DerivationPath,
 };
 
 use super::*;