-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathtransaction.h
More file actions
93 lines (84 loc) · 4.09 KB
/
transaction.h
File metadata and controls
93 lines (84 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Copyright (c) 2017-2020 The Bitcoin Core developers
// Copyright (c) 2017-2024 The Reddcoin 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_TRANSACTION_H
#define BITCOIN_NODE_TRANSACTION_H
#include <attributes.h>
#include <policy/feerate.h>
#include <primitives/transaction.h>
#include <util/error.h>
class CBlockIndex;
class CBlockHeader;
class CTxMemPool;
struct NodeContext;
namespace Consensus {
struct Params;
}
/** Maximum fee rate for sendrawtransaction and testmempoolaccept RPC calls.
* Also used by the GUI when broadcasting a completed PSBT.
* By default, a transaction with a fee rate higher than this will be rejected
* by these RPCs and the GUI. This can be overridden with the maxfeerate argument.
*/
static const CFeeRate DEFAULT_MAX_RAW_TX_FEE_RATE{COIN / 10};
/**
* Submit a transaction to the mempool and (optionally) relay it to all P2P peers.
*
* Mempool submission can be synchronous (will await mempool entry notification
* over the CValidationInterface) or asynchronous (will submit and not wait for
* notification), depending on the value of wait_callback. wait_callback MUST
* NOT be set while cs_main, cs_mempool or cs_wallet are held to avoid
* deadlock.
*
* @param[in] node reference to node context
* @param[in] tx the transaction to broadcast
* @param[out] err_string reference to std::string to fill with error string if available
* @param[in] max_tx_fee reject txs with fees higher than this (if 0, accept any fee)
* @param[in] relay flag if both mempool insertion and p2p relay are requested
* @param[in] wait_callback wait until callbacks have been processed to avoid stale result due to a sequentially RPC.
* return error
*/
[[nodiscard]] TransactionError BroadcastTransaction(NodeContext& node, CTransactionRef tx, std::string& err_string, const CAmount& max_tx_fee, bool relay, bool wait_callback);
/**
* Return transaction with a given hash.
* If mempool is provided and block_index is not provided, check it first for the tx.
* If -txindex is available, check it next for the tx.
* Finally, if block_index is provided, check for tx by reading entire block from disk.
*
* @param[in] block_index The block to read from disk, or nullptr
* @param[in] mempool If provided, check mempool for tx
* @param[in] hash The txid
* @param[in] consensusParams The params
* @param[out] hashBlock The block hash, if the tx was found via -txindex or block_index
* @returns The tx if found, otherwise nullptr
*/
CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const uint256& hash, const Consensus::Params& consensusParams, uint256& hashBlock);
/**
* Return transaction with a given tx hash.
*
* @param[in] txhash The txid
* @param[out] hashBlock The block hash
* @returns The tx if found, otherwise nullptr
*/
CTransactionRef GetTransaction(const uint256& txhash, uint256& hashBlock);
/**
* Return transaction with a given tx hash.
*
* @param[in] txhash The txid
* @returns The tx if found, otherwise nullptr
*/
CTransactionRef GetTransaction(const uint256& txhash);
/**
* Return transaction with a given tx hash for proof-of-stake validation.
* Tries txindex first (fast), falls back to UTXO lookup + block reading (works during reindex).
*
* @param[in] active_chainstate The active chainstate
* @param[in] prevout The outpoint referencing the transaction
* @param[out] txOut The transaction if found
* @param[out] blockHeader The block header containing the transaction
* @param[out] nTxOffset Offset of transaction within its block (for stake kernel hash)
* @returns true if transaction was found and all outputs populated
*/
bool GetTransaction(class CChainState* active_chainstate, const COutPoint& prevout,
CTransactionRef& txOut, CBlockHeader& blockHeader, unsigned int& nTxOffset);
#endif // BITCOIN_NODE_TRANSACTION_H