Branch data Line data Source code
1 : : // Copyright (c) 2009-2021 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 : : #include <optional>
11 : :
12 : : namespace node {
13 : : /**
14 : : * Holds an analysis of one input from a PSBT
15 : : */
16 : 8 : struct PSBTInputAnalysis {
17 : : bool has_utxo; //!< Whether we have UTXO information for this input
18 : : bool is_final; //!< Whether the input has all required information including signatures
19 : : PSBTRole next; //!< Which of the BIP 174 roles needs to handle this input next
20 : :
21 : : std::vector<CKeyID> missing_pubkeys; //!< Pubkeys whose BIP32 derivation path is missing
22 : : std::vector<CKeyID> missing_sigs; //!< Pubkeys whose signatures are missing
23 : : uint160 missing_redeem_script; //!< Hash160 of redeem script, if missing
24 : : uint256 missing_witness_script; //!< SHA256 of witness script, if missing
25 : : };
26 : :
27 : : /**
28 : : * Holds the results of AnalyzePSBT (miscellaneous information about a PSBT)
29 : : */
30 [ + - ]: 14 : struct PSBTAnalysis {
31 : : std::optional<size_t> estimated_vsize; //!< Estimated weight of the transaction
32 : : std::optional<CFeeRate> estimated_feerate; //!< Estimated feerate (fee / weight) of the transaction
33 : : std::optional<CAmount> fee; //!< Amount of fee being paid by the transaction
34 : : std::vector<PSBTInputAnalysis> inputs; //!< More information about the individual inputs of the transaction
35 : : PSBTRole next; //!< Which of the BIP 174 roles needs to handle the transaction next
36 : : std::string error; //!< Error message
37 : :
38 : 3 : void SetInvalid(std::string err_msg)
39 : : {
40 [ - + ]: 3 : estimated_vsize = std::nullopt;
41 [ - + ]: 3 : estimated_feerate = std::nullopt;
42 [ - + ]: 3 : fee = std::nullopt;
43 : 3 : inputs.clear();
44 : 3 : next = PSBTRole::CREATOR;
45 : 3 : error = err_msg;
46 : 3 : }
47 : : };
48 : :
49 : : /**
50 : : * Provides helpful miscellaneous information about where a PSBT is in the signing workflow.
51 : : *
52 : : * @param[in] psbtx the PSBT to analyze
53 : : * @return A PSBTAnalysis with information about the provided PSBT.
54 : : */
55 : : PSBTAnalysis AnalyzePSBT(PartiallySignedTransaction psbtx);
56 : : } // namespace node
57 : :
58 : : #endif // BITCOIN_NODE_PSBT_H
|