Merge pull request #1982

b52abd13 Move txpool to the database (moneromooo-monero)
This commit is contained in:
Riccardo Spagni
2017-05-30 21:12:44 +02:00
17 changed files with 847 additions and 289 deletions
+17 -35
View File
@@ -43,6 +43,7 @@
#include "math_helper.h"
#include "cryptonote_basic/cryptonote_basic_impl.h"
#include "cryptonote_basic/verification_context.h"
#include "blockchain_db/blockchain_db.h"
#include "crypto/hash.h"
#include "rpc/core_rpc_server_commands_defs.h"
@@ -100,12 +101,12 @@ namespace cryptonote
/**
* @copydoc add_tx(const transaction&, tx_verification_context&, bool, bool, uint8_t)
* @copydoc add_tx(transaction&, tx_verification_context&, bool, bool, uint8_t)
*
* @param id the transaction's hash
* @param blob_size the transaction's size
*/
bool add_tx(const 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);
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);
/**
* @brief add a transaction to the transaction pool
@@ -124,7 +125,7 @@ namespace cryptonote
*
* @return true if the transaction passes validations, otherwise false
*/
bool add_tx(const transaction &tx, tx_verification_context& tvc, bool kept_by_block, bool relayed, bool do_not_relay, uint8_t version);
bool add_tx(transaction &tx, tx_verification_context& tvc, bool kept_by_block, bool relayed, bool do_not_relay, uint8_t version);
/**
* @brief takes a transaction with the given hash from the pool
@@ -199,7 +200,7 @@ namespace cryptonote
*
* @return true
*/
bool init(const std::string& config_folder);
bool init();
/**
* @brief attempts to save the transaction pool state to disk
@@ -257,11 +258,11 @@ namespace cryptonote
* @brief get a specific transaction from the pool
*
* @param h the hash of the transaction to get
* @param tx return-by-reference the transaction requested
* @param tx return-by-reference the transaction blob requested
*
* @return true if the transaction is found, otherwise false
*/
bool get_transaction(const crypto::hash& h, transaction& tx) const;
bool get_transaction(const crypto::hash& h, cryptonote::blobdata& txblob) const;
/**
* @brief get a list of all relayable transactions and their hashes
@@ -275,14 +276,14 @@ namespace cryptonote
*
* @return true
*/
bool get_relayable_transactions(std::list<std::pair<crypto::hash, cryptonote::transaction>>& txs) const;
bool get_relayable_transactions(std::list<std::pair<crypto::hash, cryptonote::blobdata>>& txs) const;
/**
* @brief tell the pool that certain transactions were just relayed
*
* @param txs the list of transactions (and their hashes)
*/
void set_relayed(const std::list<std::pair<crypto::hash, cryptonote::transaction>>& txs);
void set_relayed(const std::list<std::pair<crypto::hash, cryptonote::blobdata>>& txs);
/**
* @brief get the total number of transactions in the pool
@@ -317,28 +318,6 @@ namespace cryptonote
#define CURRENT_MEMPOOL_ARCHIVE_VER 11
#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER 12
/**
* @brief serialize the transaction pool to/from disk
*
* If the archive version passed is older than the version compiled
* in, this function does nothing, as it cannot deserialize after a
* format change.
*
* @tparam archive_t the archive class
* @param a the archive to serialize to/from
* @param version the archive version
*/
template<class archive_t>
void serialize(archive_t & a, const unsigned int version)
{
if(version < CURRENT_MEMPOOL_ARCHIVE_VER )
return;
CRITICAL_REGION_LOCAL(m_transactions_lock);
a & m_transactions;
a & m_spent_key_images;
a & m_timed_out_transactions;
}
/**
* @brief information about a single transaction
*/
@@ -379,6 +358,13 @@ namespace cryptonote
private:
/**
* @brief insert key images into m_spent_key_images
*
* @return true on success, false on error
*/
bool insert_key_images(const transaction &tx, bool kept_by_block);
/**
* @brief remove old transactions from the pool
*
@@ -453,10 +439,7 @@ namespace cryptonote
*
* @return true if the transaction is good to go, otherwise false
*/
bool is_transaction_ready_to_go(tx_details& txd) const;
//! map transactions (and related info) by their hashes
typedef std::unordered_map<crypto::hash, tx_details > transactions_container;
bool is_transaction_ready_to_go(txpool_tx_meta_t& txd, transaction &tx) const;
//TODO: confirm the below comments and investigate whether or not this
// is the desired behavior
@@ -473,7 +456,6 @@ namespace cryptonote
public:
#endif
mutable epee::critical_section m_transactions_lock; //!< lock for the pool
transactions_container m_transactions; //!< container for transactions in the pool
#if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
private:
#endif