| 184 | } |
| 185 | |
| 186 | bool SignPSBTInput(const SigningProvider &provider, |
| 187 | PartiallySignedTransaction &psbt, int index, |
| 188 | SigHashType sighash, SignatureData *out_sigdata, |
| 189 | bool use_dummy) { |
| 190 | PSBTInput &input = psbt.inputs.at(index); |
| 191 | const CMutableTransaction &tx = *psbt.tx; |
| 192 | |
| 193 | if (PSBTInputSigned(input)) { |
| 194 | return true; |
| 195 | } |
| 196 | |
| 197 | // Fill SignatureData with input info |
| 198 | SignatureData sigdata; |
| 199 | input.FillSignatureData(sigdata); |
| 200 | |
| 201 | // Get UTXO |
| 202 | CTxOut utxo; |
| 203 | |
| 204 | if (input.utxo.IsNull()) { |
| 205 | return false; |
| 206 | } |
| 207 | |
| 208 | utxo = input.utxo; |
| 209 | |
| 210 | bool sig_complete{false}; |
| 211 | if (use_dummy) { |
| 212 | sig_complete = ProduceSignature(provider, DUMMY_SIGNATURE_CREATOR, |
| 213 | utxo.scriptPubKey, sigdata); |
| 214 | } else { |
| 215 | MutableTransactionSignatureCreator creator(&tx, index, utxo.nValue, |
| 216 | sighash); |
| 217 | sig_complete = |
| 218 | ProduceSignature(provider, creator, utxo.scriptPubKey, sigdata); |
| 219 | } |
| 220 | input.FromSignatureData(sigdata); |
| 221 | |
| 222 | // Fill in the missing info |
| 223 | if (out_sigdata != nullptr) { |
| 224 | out_sigdata->missing_pubkeys = sigdata.missing_pubkeys; |
| 225 | out_sigdata->missing_sigs = sigdata.missing_sigs; |
| 226 | out_sigdata->missing_redeem_script = sigdata.missing_redeem_script; |
| 227 | } |
| 228 | |
| 229 | return sig_complete; |
| 230 | } |
| 231 | |
| 232 | bool FinalizePSBT(PartiallySignedTransaction &psbtx) { |
| 233 | // Finalize input signatures -- in case we have partial signatures that add |
no test coverage detected