]> Untitled Git - bdk/commitdiff
[wallet] Default to SIGHASH_ALL if not specified
authorAlekos Filini <alekos.filini@gmail.com>
Fri, 16 Oct 2020 13:40:30 +0000 (15:40 +0200)
committerAlekos Filini <alekos.filini@gmail.com>
Fri, 16 Oct 2020 13:40:30 +0000 (15:40 +0200)
Closes #133

src/wallet/mod.rs
src/wallet/signer.rs

index eccfaa8fd26296d6ac1355db5a5c656a5143e113..89b740d22c5ff85c3f734880352ee04310eb73a6 100644 (file)
@@ -35,7 +35,7 @@ use std::sync::Arc;
 use bitcoin::consensus::encode::serialize;
 use bitcoin::util::bip32::ChildNumber;
 use bitcoin::util::psbt::PartiallySignedTransaction as PSBT;
-use bitcoin::{Address, Network, OutPoint, Script, SigHashType, Transaction, TxOut, Txid};
+use bitcoin::{Address, Network, OutPoint, Script, Transaction, TxOut, Txid};
 
 use miniscript::psbt::PsbtInputSatisfier;
 
@@ -1025,8 +1025,11 @@ where
                 None => continue,
             };
 
-            // Add sighash, default is obviously "ALL"
-            psbt_input.sighash_type = builder.sighash.or(Some(SigHashType::All));
+            // Only set it if the builder has a custom one, otherwise leave blank which defaults to
+            // SIGHASH_ALL
+            if let Some(sighash_type) = builder.sighash {
+                psbt_input.sighash_type = Some(sighash_type);
+            }
 
             // Try to find the prev_script in our db to figure out if this is internal or external,
             // and the derivation index
@@ -1742,7 +1745,7 @@ mod test {
             )]))
             .unwrap();
 
-        assert_eq!(psbt.inputs[0].sighash_type, Some(bitcoin::SigHashType::All));
+        assert_eq!(psbt.inputs[0].sighash_type, None);
     }
 
     #[test]
index e6d8b4e4aa2e1926d755cf8264622d0f38bd8270..5ac1ce7a1fdbae86d2201af2f0ce53c2494ab120 100644 (file)
@@ -136,8 +136,6 @@ pub enum SignerError {
     InvalidKey,
     /// The user canceled the operation
     UserCanceled,
-    /// The sighash is missing in the PSBT input
-    MissingSighash,
     /// Input index is out of range
     InputIndexOutOfRange,
     /// The `non_witness_utxo` field of the transaction is required to sign this input
@@ -432,7 +430,7 @@ impl ComputeSighash for Legacy {
         let psbt_input = &psbt.inputs[input_index];
         let tx_input = &psbt.global.unsigned_tx.input[input_index];
 
-        let sighash = psbt_input.sighash_type.ok_or(SignerError::MissingSighash)?;
+        let sighash = psbt_input.sighash_type.unwrap_or(SigHashType::All);
         let script = match psbt_input.redeem_script {
             Some(ref redeem_script) => redeem_script.clone(),
             None => {
@@ -479,7 +477,7 @@ impl ComputeSighash for Segwitv0 {
 
         let psbt_input = &psbt.inputs[input_index];
 
-        let sighash = psbt_input.sighash_type.ok_or(SignerError::MissingSighash)?;
+        let sighash = psbt_input.sighash_type.unwrap_or(SigHashType::All);
 
         let witness_utxo = psbt_input
             .witness_utxo