mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-14 13:52:36 -03:00
638e40cb60
Invalid PSBTs need to be re-created, so the next role is the Creator (new PSBTRole). Additionally, we need to know what went wrong so an error field was added to PSBTAnalysis. A PSBTAnalysis indicating invalid will have empty everything, next will be set to PSBTRole::CREATOR, and an error message.
54 lines
2.1 KiB
C++
54 lines
2.1 KiB
C++
// Copyright (c) 2009-2019 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_NODE_PSBT_H
|
|
#define BITCOIN_NODE_PSBT_H
|
|
|
|
#include <psbt.h>
|
|
|
|
/**
|
|
* Holds an analysis of one input from a PSBT
|
|
*/
|
|
struct PSBTInputAnalysis {
|
|
bool has_utxo; //!< Whether we have UTXO information for this input
|
|
bool is_final; //!< Whether the input has all required information including signatures
|
|
PSBTRole next; //!< Which of the BIP 174 roles needs to handle this input next
|
|
|
|
std::vector<CKeyID> missing_pubkeys; //!< Pubkeys whose BIP32 derivation path is missing
|
|
std::vector<CKeyID> missing_sigs; //!< Pubkeys whose signatures are missing
|
|
uint160 missing_redeem_script; //!< Hash160 of redeem script, if missing
|
|
uint256 missing_witness_script; //!< SHA256 of witness script, if missing
|
|
};
|
|
|
|
/**
|
|
* Holds the results of AnalyzePSBT (miscellaneous information about a PSBT)
|
|
*/
|
|
struct PSBTAnalysis {
|
|
Optional<size_t> estimated_vsize; //!< Estimated weight of the transaction
|
|
Optional<CFeeRate> estimated_feerate; //!< Estimated feerate (fee / weight) of the transaction
|
|
Optional<CAmount> fee; //!< Amount of fee being paid by the transaction
|
|
std::vector<PSBTInputAnalysis> inputs; //!< More information about the individual inputs of the transaction
|
|
PSBTRole next; //!< Which of the BIP 174 roles needs to handle the transaction next
|
|
std::string error; //!< Error message
|
|
|
|
void SetInvalid(std::string err_msg)
|
|
{
|
|
estimated_vsize = nullopt;
|
|
estimated_feerate = nullopt;
|
|
fee = nullopt;
|
|
inputs.clear();
|
|
next = PSBTRole::CREATOR;
|
|
error = err_msg;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Provides helpful miscellaneous information about where a PSBT is in the signing workflow.
|
|
*
|
|
* @param[in] psbtx the PSBT to analyze
|
|
* @return A PSBTAnalysis with information about the provided PSBT.
|
|
*/
|
|
PSBTAnalysis AnalyzePSBT(PartiallySignedTransaction psbtx);
|
|
|
|
#endif // BITCOIN_NODE_PSBT_H
|