/root/bitcoin/src/node/psbt.h
Line | Count | Source (jump to first uncovered line) |
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 | | 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 | | 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 | | void SetInvalid(std::string err_msg) |
39 | 0 | { |
40 | 0 | estimated_vsize = std::nullopt; |
41 | 0 | estimated_feerate = std::nullopt; |
42 | 0 | fee = std::nullopt; |
43 | 0 | inputs.clear(); |
44 | 0 | next = PSBTRole::CREATOR; |
45 | 0 | error = err_msg; |
46 | 0 | } |
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 |