Skip to content

Commit

Permalink
psbt: add verification method of psbt input data
Browse files Browse the repository at this point in the history
the new InputsReadyToSign method makes sure that inputs have either
the nonWitnessUtxo or the witnessUtxo data set.
  • Loading branch information
ziggie1984 committed Mar 20, 2023
1 parent a18c2cf commit 298ab4b
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions btcutil/psbt/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,27 @@ func VerifyInputOutputLen(packet *Packet, needInputs, needOutputs bool) error {
return nil
}

// InputsReadyToSign makes sure that all input data have the previous output
// specified meaning that either nonwitness UTXO or the witness UTXO data is
// specified in the psbt package. This check is necessary because of 2 reasons.
// The sighash calculation is now different for witnessV0 and witnessV1 inputs
// this means we need to check the previous output pkScript for the specific
// type and the second reason is that the sighash calculation for taproot inputs
// include the previous output pkscripts.
func InputsReadyToSign(packet *Packet) error {
VerifyInputOutputLen(packet, true, true)

for i := range packet.UnsignedTx.TxIn {
input := packet.Inputs[i]
if input.NonWitnessUtxo == nil || input.WitnessUtxo == nil {
return fmt.Errorf("invalid PSBT, input with index %d "+
"missing utxo information", i)
}
}

return nil
}

// NewFromSignedTx is a utility function to create a packet from an
// already-signed transaction. Returned are: an unsigned transaction
// serialization, a list of scriptSigs, one per input, and a list of witnesses,
Expand Down

0 comments on commit 298ab4b

Please sign in to comment.