Line data Source code
1 : // Copyright (c) 2009-2019 The Bitcoin Core developers 2 : // Distributed under the MIT software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #ifndef BITCOIN_NODE_PSBT_H 6 : #define BITCOIN_NODE_PSBT_H 7 : 8 : #include <psbt.h> 9 : 10 : /** 11 : * Holds an analysis of one input from a PSBT 12 : */ 13 80 : struct PSBTInputAnalysis { 14 : bool has_utxo; //!< Whether we have UTXO information for this input 15 : bool is_final; //!< Whether the input has all required information including signatures 16 : PSBTRole next; //!< Which of the BIP 174 roles needs to handle this input next 17 : 18 : std::vector<CKeyID> missing_pubkeys; //!< Pubkeys whose BIP32 derivation path is missing 19 : std::vector<CKeyID> missing_sigs; //!< Pubkeys whose signatures are missing 20 : uint160 missing_redeem_script; //!< Hash160 of redeem script, if missing 21 : uint256 missing_witness_script; //!< SHA256 of witness script, if missing 22 : }; 23 : 24 : /** 25 : * Holds the results of AnalyzePSBT (miscellaneous information about a PSBT) 26 : */ 27 64 : struct PSBTAnalysis { 28 : Optional<size_t> estimated_vsize; //!< Estimated weight of the transaction 29 : Optional<CFeeRate> estimated_feerate; //!< Estimated feerate (fee / weight) of the transaction 30 : Optional<CAmount> fee; //!< Amount of fee being paid by the transaction 31 : std::vector<PSBTInputAnalysis> inputs; //!< More information about the individual inputs of the transaction 32 : PSBTRole next; //!< Which of the BIP 174 roles needs to handle the transaction next 33 : std::string error; //!< Error message 34 : 35 8 : void SetInvalid(std::string err_msg) 36 : { 37 8 : estimated_vsize = nullopt; 38 8 : estimated_feerate = nullopt; 39 8 : fee = nullopt; 40 8 : inputs.clear(); 41 8 : next = PSBTRole::CREATOR; 42 8 : error = err_msg; 43 8 : } 44 : }; 45 : 46 : /** 47 : * Provides helpful miscellaneous information about where a PSBT is in the signing workflow. 48 : * 49 : * @param[in] psbtx the PSBT to analyze 50 : * @return A PSBTAnalysis with information about the provided PSBT. 51 : */ 52 : PSBTAnalysis AnalyzePSBT(PartiallySignedTransaction psbtx); 53 : 54 : #endif // BITCOIN_NODE_PSBT_H