33 #include "include_base_utils.h" 36 #include <unordered_map> 37 #include <unordered_set> 39 #include <boost/serialization/version.hpp> 40 #include <boost/utility.hpp> 42 #include "string_tools.h" 44 #include "math_helper.h" 67 if (
a.first.first >
b.first.first)
return true;
68 else if (
a.first.first <
b.first.first)
return false;
69 else if (
a.first.second <
b.first.second)
return true;
70 else if (
a.first.second >
b.first.second)
return false;
71 else if (
a.second !=
b.second)
return true;
230 bool fill_block_template(
block &bl,
size_t median_size, uint64_t already_generated_coins,
size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t
version);
301 void set_relayed(
const std::list<std::pair<crypto::hash, cryptonote::blobdata>>& txs);
317 std::string
print_pool(
bool short_format)
const;
339 #define CURRENT_MEMPOOL_ARCHIVE_VER 11 340 #define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER 12 476 #if defined(DEBUG_CREATE_BLOCK_TEMPLATE) 480 #if defined(DEBUG_CREATE_BLOCK_TEMPLATE) 520 template<
class archive_t>
void on_idle()
action to take periodically
Definition: binary_utils.h:37
#define CURRENT_MEMPOOL_ARCHIVE_VER
Definition: tx_pool.h:339
bool relayed
whether or not the transaction has been relayed to the network
Definition: tx_pool.h:376
void get_transaction_stats(struct txpool_stats &stats) const
get a summary statistics of all transaction hashes in the pool
uint64_t cookie() const
return the cookie
Definition: tx_pool.h:337
crypto::hash max_used_block_id
the hash of the highest block referenced by an input
Definition: tx_pool.h:350
crypto::hash last_failed_id
the hash of the highest block the transaction referenced when last checking it failed ...
Definition: tx_pool.h:371
uint64_t max_used_block_height
the height of the highest block referenced by an input
Definition: tx_pool.h:351
void get_transaction_hashes(std::vector< crypto::hash > &txs) const
get a list of all transaction hashes in the pool
bool operator()(const tx_by_fee_and_receive_time_entry &a, const tx_by_fee_and_receive_time_entry &b)
Definition: tx_pool.h:64
Definition: unordered_containers_boost_serialization.h:38
bool is_transaction_ready_to_go(txpool_tx_meta_t &txd, transaction &tx) const
check if a transaction is a valid candidate for inclusion in a block
Definition: cryptonote_basic.h:382
void serialize(Archive &a, std::unordered_map< h_key, hval > &x, const boost::serialization::version_type ver)
Definition: unordered_containers_boost_serialization.h:127
key_images_container m_spent_key_images
container for spent key images from the transactions in the pool
Definition: tx_pool.h:485
bool remove_stuck_transactions()
remove old transactions from the pool
epee::critical_section m_transactions_lock
lock for the pool
Definition: tx_pool.h:479
std::unordered_set< crypto::hash > m_timed_out_transactions
transactions which are unlikely to be included in blocks
Definition: tx_pool.h:510
transaction tx
the transaction
Definition: tx_pool.h:347
bool fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version)
Chooses transactions for a block to include.
sorted_tx_container::iterator find_tx_in_sorted_container(const crypto::hash &id) const
get an iterator to a transaction in the sorted container
bool do_not_relay
to avoid relay this transaction to the network
Definition: tx_pool.h:377
time_t receive_time
the time when the transaction entered the pool
Definition: tx_pool.h:373
void get_transaction_backlog(std::vector< tx_backlog_entry > &backlog) const
get (size, fee, receive time) for all transaction in the pool
bool get_transactions_and_spent_keys_info(std::vector< tx_info > &tx_infos, std::vector< spent_key_image_info > &key_image_infos) const
get information about all transactions and key images in the pool
#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER
Definition: tx_pool.h:340
BOOST_CLASS_VERSION(nodetool::node_server< cryptonote::t_cryptonote_protocol_handler< cryptonote::core > >, 1)
Holds cryptonote related classes and helpers.
Definition: db_bdb.cpp:225
Definition: verification_context.h:38
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
size_t validate(uint8_t version)
remove transactions from the pool which are no longer valid
bool insert_key_images(const transaction &tx, bool kept_by_block)
insert key images into m_spent_key_images
void get_transactions(std::list< transaction > &txs) const
get a list of all transactions in the pool
bool have_tx_keyimg_as_spent(const crypto::key_image &key_im) const
check if a transaction in the pool has a given spent key image
size_t get_transactions_count() const
get the total number of transactions in the pool
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:53
size_t blob_size
the transaction's size
Definition: tx_pool.h:348
int b
Definition: base.py:1
uint64_t last_failed_height
the highest block the transaction referenced when last checking it failed
Definition: tx_pool.h:364
uint64_t fee
the transaction's fee amount
Definition: tx_pool.h:349
tx_memory_pool(Blockchain &bchs)
Constructor.
uint8_t version
Definition: blockchain.cpp:86
bool remove_transaction_keyimages(const transaction &tx)
forget a transaction's spent key images
Transaction pool, handles transactions which are not part of a block.
Definition: tx_pool.h:93
std::string blobdata
Definition: blobdatatype.h:36
bool init()
loads pool state (if any) from disk, and initializes pool
Definition: core_rpc_server_commands_defs.h:1123
bool add_tx(transaction &tx, const crypto::hash &id, size_t blob_size, tx_verification_context &tvc, bool kept_by_block, bool relayed, bool do_not_relay, uint8_t version)
void unlock() const
unlocks the transaction pool
bool deinit()
attempts to save the transaction pool state to disk
void set_relayed(const std::list< std::pair< crypto::hash, cryptonote::blobdata >> &txs)
tell the pool that certain transactions were just relayed
bool get_relayable_transactions(std::list< std::pair< crypto::hash, cryptonote::blobdata >> &txs) const
get a list of all relayable transactions and their hashes
bool have_tx_keyimges_as_spent(const transaction &tx) const
check if any spent key image in a transaction is in the pool
bool get_transaction(const crypto::hash &h, cryptonote::blobdata &txblob) const
get a specific transaction from the pool
information about a single transaction
Definition: tx_pool.h:345
POD_CLASS key_image
Definition: crypto.h:93
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:77
bool kept_by_block
whether or not the transaction has been in a block before
Definition: tx_pool.h:357
string a
Definition: MakeCryptoOps.py:15
bool have_tx(const crypto::hash &id) const
checks if the pool has a transaction with the given hash
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:489
POD_CLASS hash
Definition: hash.h:46
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
time_t last_relayed_time
the last time the transaction was relayed to the network
Definition: tx_pool.h:375
bool take_tx(const crypto::hash &id, transaction &tx, size_t &blob_size, uint64_t &fee, bool &relayed, bool &do_not_relay)
takes a transaction with the given hash from the pool
static bool append_key_images(std::unordered_set< crypto::key_image > &kic, const transaction &tx)
append the key images from a transaction to the given set
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:493
void lock() const
locks the transaction pool
Blockchain & m_blockchain
reference to the Blockchain object
Definition: tx_pool.h:512
Definition: cryptonote_basic.h:198
std::atomic< uint64_t > m_cookie
incremented at each change
Definition: tx_pool.h:495
static bool have_key_images(const std::unordered_set< crypto::key_image > &kic, const transaction &tx)
check if any of a transaction's spent key images are present in a given set
std::string print_pool(bool short_format) const
get a string containing human-readable pool information
Definition: blockchain.h:80
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:474