37#include <unordered_map>
38#include <unordered_set>
40#include <boost/serialization/version.hpp>
41#include <boost/utility.hpp>
71 if (
a.first.first >
b.first.first)
return true;
72 if (
a.first.first <
b.first.first)
return false;
74 if (
a.first.second <
b.first.second)
return true;
75 if (
a.first.second >
b.first.second)
return false;
77 return memcmp(
a.second.data,
b.second.data,
sizeof(
crypto::hash)) < 0;
225 bool init(
size_t max_txpool_weight = 0,
bool mine_stem_txes =
false);
260 void get_transactions(std::vector<transaction>& txs,
bool include_sensitive =
false)
const;
336 bool check_for_key_images(
const std::vector<crypto::key_image>& key_images, std::vector<bool>& spent)
const;
391 std::string
print_pool(
bool short_format)
const;
434#define CURRENT_MEMPOOL_ARCHIVE_VER 11
435#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER 13
487 bool get_transactions_info(
const std::vector<crypto::hash>& txids, std::vector<std::pair<crypto::hash, tx_details>>& txs,
bool include_sensitive_data =
false)
const;
492 bool get_complement(
const std::vector<crypto::hash> &
hashes, std::vector<cryptonote::blobdata> &txes)
const;
499 bool get_pool_info(time_t start_time,
bool include_sensitive,
size_t max_tx_count, std::vector<std::pair<crypto::hash, tx_details>>& added_txs, std::vector<crypto::hash>& remaining_added_txids, std::vector<crypto::hash>& removed_txs,
bool& incremental)
const;
603 void prune(
size_t bytes = 0);
620#if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
624#if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
685 mutable std::unordered_map<crypto::hash, std::tuple<bool, tx_verification_context, uint64_t, crypto::hash>>
m_input_cache;
698 template<
class archive_t>
cryptonote::block b
Definition block.cpp:40
static uint64_t h
Definition blockchain_stats.cpp:55
Definition blockchain.h:103
Definition cryptonote_basic.h:171
Definition cryptonote_basic.h:205
bool operator()(const tx_by_fee_and_receive_time_entry &a, const tx_by_fee_and_receive_time_entry &b) const
Definition tx_pool.h:68
Transaction pool, handles transactions which are not part of a block.
Definition tx_pool.h:99
void unlock() const
unlocks the transaction pool
Definition tx_pool.cpp:1377
sorted_tx_container::iterator find_tx_in_sorted_container(const crypto::hash &id) const
get an iterator to a transaction in the sorted container
Definition tx_pool.cpp:709
bool insert_key_images(const transaction_prefix &tx, const crypto::hash &txid, relay_method tx_relay)
insert key images into m_spent_key_images
Definition tx_pool.cpp:473
void lock() const
locks the transaction pool
Definition tx_pool.cpp:1372
bool have_tx(const crypto::hash &id, relay_category tx_category) const
checks if the pool has a transaction with the given hash
Definition tx_pool.cpp:1337
void on_idle()
action to take periodically
Definition tx_pool.cpp:704
epee::math_helper::once_a_time_seconds< 30 > m_remove_stuck_tx_interval
interval on which to check for stale/"stuck" transactions
Definition tx_pool.h:633
void get_transactions(std::vector< transaction > &txs, bool include_sensitive=false) const
get a list of all transactions in the pool
Definition tx_pool.cpp:911
bool get_pool_for_rpc(std::vector< cryptonote::rpc::tx_in_pool > &tx_infos, cryptonote::rpc::key_images_with_tx_hashes &key_image_infos) const
get information about all transactions and key images in the pool
Definition tx_pool.cpp:1237
bool on_blockchain_dec(uint64_t new_block_height, const crypto::hash &top_block_id)
action to take when notified of a block removed from the blockchain
Definition tx_pool.cpp:1329
bool add_tx(transaction &tx, const crypto::hash &id, const cryptonote::blobdata &blob, size_t tx_weight, tx_verification_context &tvc, relay_method tx_relay, bool relayed, uint8_t version, uint8_t nic_verified_hf_version=0)
Definition tx_pool.cpp:138
bool get_transaction(const crypto::hash &h, cryptonote::blobdata &txblob, relay_category tx_category) const
get a specific transaction from the pool
Definition tx_pool.cpp:1307
bool fill_block_template(block &bl, size_t median_weight, uint64_t already_generated_coins, size_t &total_weight, uint64_t &fee, uint64_t &expected_reward, uint8_t version)
Chooses transactions for a block to include.
Definition tx_pool.cpp:1549
bool remove_transaction_keyimages(const transaction_prefix &tx, const crypto::hash &txid)
forget a transaction's spent key images
Definition tx_pool.cpp:504
void track_removed_tx(const crypto::hash &txid, bool sensitive)
Definition tx_pool.cpp:1824
std::atomic< time_t > m_next_check
Next timestamp that a DB check for relayable txes is allowed.
Definition tx_pool.h:690
size_t m_txpool_max_weight
Definition tx_pool.h:681
time_t m_removed_txs_start_time
Definition tx_pool.h:659
bool on_blockchain_inc(uint64_t new_block_height, const crypto::hash &top_block_id)
action to take when notified of a block added to the blockchain
Definition tx_pool.cpp:1321
bool get_pool_info(time_t start_time, bool include_sensitive, size_t max_tx_count, std::vector< std::pair< crypto::hash, tx_details > > &added_txs, std::vector< crypto::hash > &remaining_added_txids, std::vector< crypto::hash > &removed_txs, bool &incremental) const
get info necessary for update of pool-related info in a wallet, preferably incremental
Definition tx_pool.cpp:943
void remove_tx_from_transient_lists(const cryptonote::sorted_tx_container::iterator &sorted_it, const crypto::hash &txid, bool sensitive)
Definition tx_pool.cpp:1801
key_images_container m_spent_key_images
container for spent key images from the transactions in the pool
Definition tx_pool.h:629
std::unordered_set< crypto::hash > m_timed_out_transactions
transactions which are unlikely to be included in blocks
Definition tx_pool.h:677
bool check_tx_inputs(const std::function< cryptonote::transaction &(void)> &get_tx, const crypto::hash &txid, uint64_t &max_used_block_height, crypto::hash &max_used_block_id, tx_verification_context &tvc, bool kept_by_block=false) const
cache/call Blockchain::check_tx_inputs results
Definition tx_pool.cpp:1382
void add_tx_to_transient_lists(const crypto::hash &txid, double fee, time_t receive_time)
Definition tx_pool.cpp:1762
uint64_t cookie() const
return the cookie
Definition tx_pool.h:411
bool get_complement(const std::vector< crypto::hash > &hashes, std::vector< cryptonote::blobdata > &txes) const
get transactions not in the passed set
Definition tx_pool.cpp:671
void set_txpool_max_weight(size_t bytes)
set the max cumulative txpool weight in bytes
Definition tx_pool.cpp:377
bool get_relayable_transactions(std::vector< std::tuple< crypto::hash, cryptonote::blobdata, relay_method > > &txs)
get a list of all relayable transactions and their hashes
Definition tx_pool.cpp:774
void get_block_template_backlog(std::vector< tx_block_template_backlog_entry > &backlog, bool include_sensitive=false) const
get (hash, weight, fee) for transactions in the pool - the minimum required information to create a b...
Definition tx_pool.cpp:1031
bool have_tx_keyimges_as_spent(const transaction &tx, const crypto::hash &txid) const
check if any spent key image in a transaction is in the pool
Definition tx_pool.cpp:1344
bool get_transactions_and_spent_keys_info(std::vector< tx_info > &tx_infos, std::vector< spent_key_image_info > &key_image_infos, bool include_sensitive_data=false) const
get information about all transactions and key images in the pool
Definition tx_pool.cpp:1179
static bool append_key_images(std::unordered_set< crypto::key_image > &kic, const transaction_prefix &tx)
append the key images from a transaction to the given set
Definition tx_pool.cpp:1461
static bool have_key_images(const std::unordered_set< crypto::key_image > &kic, const transaction_prefix &tx)
check if any of a transaction's spent key images are present in a given set
Definition tx_pool.cpp:1450
std::string print_pool(bool short_format) const
get a string containing human-readable pool information
Definition tx_pool.cpp:1516
epee::critical_section m_transactions_lock
lock for the pool
Definition tx_pool.h:623
sorted_tx_container m_txs_by_fee_and_receive_time
< container for transactions organized by fee per size and receive time
Definition tx_pool.h:637
Blockchain & m_blockchain
reference to the Blockchain object
Definition tx_pool.h:679
tx_memory_pool(Blockchain &bchs)
Constructor.
Definition tx_pool.cpp:125
size_t validate(uint8_t version)
remove transactions from the pool which are no longer valid
Definition tx_pool.cpp:1694
bool m_mine_stem_txes
Definition tx_pool.h:683
std::unordered_map< crypto::key_image, std::unordered_set< crypto::hash > > key_images_container
map key images to transactions which spent them
Definition tx_pool.h:618
bool remove_stuck_transactions()
remove old transactions from the pool
Definition tx_pool.cpp:719
time_t m_added_txs_start_time
Definition tx_pool.h:645
void get_transaction_hashes(std::vector< crypto::hash > &txs, bool include_sensitive=false) const
get a list of all transaction hashes in the pool
Definition tx_pool.cpp:931
bool is_transaction_ready_to_go(txpool_tx_meta_t &txd, const crypto::hash &txid, const cryptonote::blobdata_ref &txblob, transaction &tx) const
check if a transaction is a valid candidate for inclusion in a block
Definition tx_pool.cpp:1401
void mark_double_spend(const transaction &tx)
mark all transactions double spending the one passed
Definition tx_pool.cpp:1472
size_t get_txpool_weight() const
get the cumulative txpool weight in bytes
Definition tx_pool.cpp:371
void reduce_txpool_weight(size_t weight)
reduce the cumulative txpool weight by the weight provided
Definition tx_pool.cpp:383
bool have_tx_keyimg_as_spent(const crypto::key_image &key_im, const crypto::hash &txid) const
check if a transaction in the pool has a given spent key image
Definition tx_pool.cpp:1357
std::unordered_map< crypto::hash, std::tuple< bool, tx_verification_context, uint64_t, crypto::hash > > m_input_cache
Definition tx_pool.h:685
void get_transaction_backlog(std::vector< tx_backlog_entry > &backlog, bool include_sensitive=false) const
get (weight, fee, receive time) for all transaction in the pool
Definition tx_pool.cpp:1018
std::unordered_map< crypto::hash, time_t > m_added_txs_by_id
Definition tx_pool.h:642
std::atomic< uint64_t > m_cookie
incremented at each change
Definition tx_pool.h:639
void get_transaction_stats(struct txpool_stats &stats, bool include_sensitive=false) const
get a summary statistics of all transaction hashes in the pool
Definition tx_pool.cpp:1092
std::unordered_map< crypto::hash, transaction > m_parsed_tx_cache
Definition tx_pool.h:687
void prune(size_t bytes=0)
prune lowest fee/byte txes till we're not above bytes
Definition tx_pool.cpp:396
bool get_transactions_info(const std::vector< crypto::hash > &txids, std::vector< std::pair< crypto::hash, tx_details > > &txs, bool include_sensitive_data=false) const
get information about multiple transactions
Definition tx_pool.cpp:652
size_t m_txpool_weight
Definition tx_pool.h:682
void set_relayed(epee::span< const crypto::hash > hashes, relay_method tx_relay, std::vector< bool > &just_broadcasted)
tell the pool that certain transactions were just relayed
Definition tx_pool.cpp:852
std::multimap< time_t, removed_tx_info > m_removed_txs_by_time
Definition tx_pool.h:655
size_t get_transactions_count(bool include_sensitive=false) const
get the total number of transactions in the pool
Definition tx_pool.cpp:904
bool check_for_key_images(const std::vector< crypto::key_image > &key_images, std::vector< bool > &spent) const
check for presence of key images in the pool
Definition tx_pool.cpp:1285
bool take_tx(const crypto::hash &id, transaction &tx, cryptonote::blobdata &txblob, size_t &tx_weight, uint64_t &fee, bool &relayed, bool &do_not_relay, bool &double_spend_seen, bool &pruned, bool suppress_missing_msgs=false)
takes a transaction with the given hash from the pool
Definition tx_pool.cpp:534
bool get_transaction_info(const crypto::hash &txid, tx_details &td, bool include_sensitive_data, bool include_blob=false) const
get infornation about a single transaction
Definition tx_pool.cpp:592
bool deinit()
attempts to save the transaction pool state to disk
Definition tx_pool.cpp:1930
Definition math_helper.h:297
Non-owning sequence of data. Does not deep copy.
Definition span.h:55
binary_archive< false > ar
Definition cold-outputs.cpp:54
static void init()
Definition logging.cpp:42
static int version
Definition mdb_load.c:29
void serialize(Archive &a, std::unordered_map< h_key, hval > &x, const boost::serialization::version_type ver)
Definition unordered_containers_boost_serialization.h:126
Definition portable_binary_archive.hpp:29
POD_CLASS key_image
Definition crypto.h:95
POD_CLASS hash
Definition hash.h:49
std::unordered_map< crypto::key_image, std::vector< crypto::hash > > key_images_with_tx_hashes
Definition message_data_structs.h:107
Holds cryptonote related classes and helpers.
Definition blockchain_db.cpp:45
std::set< tx_by_fee_and_receive_time_entry, txCompare > sorted_tx_container
container for sorting transactions by fee per unit size
Definition tx_pool.h:82
relay_category
Definition blockchain_db.h:110
relay_method
Methods tracking how a tx was received and relayed.
Definition enums.h:37
std::string blobdata
Definition blobdatatype.h:39
std::pair< std::pair< double, std::time_t >, crypto::hash > tx_by_fee_and_receive_time_entry
pair of <transaction fee, transaction hash> for organization
Definition tx_pool.h:63
boost::string_ref blobdata_ref
Definition blobdatatype.h:40
Definition binary_utils.h:36
BOOST_CLASS_VERSION(nodetool::peerlist_types, nodetool::CURRENT_PEERLIST_STORAGE_ARCHIVE_VER)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition pointer.h:1124
#define CURRENT_MEMPOOL_ARCHIVE_VER
Definition tx_pool.h:434
#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER
Definition tx_pool.h:435
unsigned char uint8_t
Definition stdint.h:124
unsigned __int64 uint64_t
Definition stdint.h:136
Definition cryptonote_basic.h:475
crypto::hash txid
Definition tx_pool.h:649
bool sensitive
Definition tx_pool.h:650
information about a single transaction
Definition tx_pool.h:441
transaction tx
the transaction
Definition tx_pool.h:442
bool do_not_relay
to avoid relay this transaction to the network
Definition tx_pool.h:474
uint64_t max_used_block_height
the height of the highest block referenced by an input
Definition tx_pool.h:448
cryptonote::blobdata tx_blob
the transaction's binary blob
Definition tx_pool.h:443
crypto::hash last_failed_id
the hash of the highest block the transaction referenced when last checking it failed
Definition tx_pool.h:468
uint64_t fee
the transaction's fee amount
Definition tx_pool.h:446
bool kept_by_block
whether or not the transaction has been in a block before
Definition tx_pool.h:454
size_t weight
the transaction's weight
Definition tx_pool.h:445
time_t last_relayed_time
the last time the transaction was relayed to the network
Definition tx_pool.h:472
bool relayed
whether or not the transaction has been relayed to the network
Definition tx_pool.h:473
crypto::hash max_used_block_id
the hash of the highest block referenced by an input
Definition tx_pool.h:447
size_t blob_size
the transaction's size
Definition tx_pool.h:444
uint64_t last_failed_height
the highest block the transaction referenced when last checking it failed
Definition tx_pool.h:461
bool double_spend_seen
true iff another tx was seen double spending this one
Definition tx_pool.h:476
time_t receive_time
the time when the transaction entered the pool
Definition tx_pool.h:470
Definition verification_context.h:41
Definition core_rpc_server_commands_defs.h:1681
struct hash_func hashes[]
cryptonote::transaction tx
Definition transaction.cpp:40