mirror of
https://git.wownero.com/wownero/wownero.git
synced 2024-12-22 20:28:51 +00:00
Avoid some temporary strings when reading off the database
This commit is contained in:
parent
43a4fd9e16
commit
55363c5941
@ -179,7 +179,7 @@ void BlockchainDB::pop_block()
|
|||||||
pop_block(blk, txs);
|
pop_block(blk, txs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockchainDB::add_transaction(const crypto::hash& blk_hash, const std::pair<transaction, blobdata>& txp, const crypto::hash* tx_hash_ptr, const crypto::hash* tx_prunable_hash_ptr)
|
void BlockchainDB::add_transaction(const crypto::hash& blk_hash, const std::pair<transaction, blobdata_ref>& txp, const crypto::hash* tx_hash_ptr, const crypto::hash* tx_prunable_hash_ptr)
|
||||||
{
|
{
|
||||||
const transaction &tx = txp.first;
|
const transaction &tx = txp.first;
|
||||||
|
|
||||||
@ -281,12 +281,13 @@ uint64_t BlockchainDB::add_block( const std::pair<block, blobdata>& blck
|
|||||||
time1 = epee::misc_utils::get_tick_count();
|
time1 = epee::misc_utils::get_tick_count();
|
||||||
|
|
||||||
uint64_t num_rct_outs = 0;
|
uint64_t num_rct_outs = 0;
|
||||||
add_transaction(blk_hash, std::make_pair(blk.miner_tx, tx_to_blob(blk.miner_tx)));
|
blobdata miner_bd = tx_to_blob(blk.miner_tx);
|
||||||
|
add_transaction(blk_hash, std::make_pair(blk.miner_tx, blobdata_ref(miner_bd)));
|
||||||
if (blk.miner_tx.version == 2)
|
if (blk.miner_tx.version == 2)
|
||||||
num_rct_outs += blk.miner_tx.vout.size();
|
num_rct_outs += blk.miner_tx.vout.size();
|
||||||
int tx_i = 0;
|
int tx_i = 0;
|
||||||
crypto::hash tx_hash = crypto::null_hash;
|
crypto::hash tx_hash = crypto::null_hash;
|
||||||
for (const std::pair<transaction, blobdata>& tx : txs)
|
for (const std::pair<transaction, blobdata_ref>& tx : txs)
|
||||||
{
|
{
|
||||||
tx_hash = blk.tx_hashes[tx_i];
|
tx_hash = blk.tx_hashes[tx_i];
|
||||||
add_transaction(blk_hash, tx, &tx_hash);
|
add_transaction(blk_hash, tx, &tx_hash);
|
||||||
|
@ -440,7 +440,7 @@ private:
|
|||||||
* @param tx_prunable_hash the hash of the prunable part of the transaction
|
* @param tx_prunable_hash the hash of the prunable part of the transaction
|
||||||
* @return the transaction ID
|
* @return the transaction ID
|
||||||
*/
|
*/
|
||||||
virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<transaction, blobdata>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash) = 0;
|
virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<transaction, blobdata_ref>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief remove data about a transaction
|
* @brief remove data about a transaction
|
||||||
@ -568,7 +568,7 @@ protected:
|
|||||||
* @param tx_hash_ptr the hash of the transaction, if already calculated
|
* @param tx_hash_ptr the hash of the transaction, if already calculated
|
||||||
* @param tx_prunable_hash_ptr the hash of the prunable part of the transaction, if already calculated
|
* @param tx_prunable_hash_ptr the hash of the prunable part of the transaction, if already calculated
|
||||||
*/
|
*/
|
||||||
void add_transaction(const crypto::hash& blk_hash, const std::pair<transaction, blobdata>& tx, const crypto::hash* tx_hash_ptr = NULL, const crypto::hash* tx_prunable_hash_ptr = NULL);
|
void add_transaction(const crypto::hash& blk_hash, const std::pair<transaction, blobdata_ref>& tx, const crypto::hash* tx_hash_ptr = NULL, const crypto::hash* tx_prunable_hash_ptr = NULL);
|
||||||
|
|
||||||
mutable uint64_t time_tx_exists = 0; //!< a performance metric
|
mutable uint64_t time_tx_exists = 0; //!< a performance metric
|
||||||
uint64_t time_commit1 = 0; //!< a performance metric
|
uint64_t time_commit1 = 0; //!< a performance metric
|
||||||
@ -1524,7 +1524,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @param details the details of the transaction to add
|
* @param details the details of the transaction to add
|
||||||
*/
|
*/
|
||||||
virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata &blob, const txpool_tx_meta_t& details) = 0;
|
virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata_ref &blob, const txpool_tx_meta_t& details) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief update a txpool transaction's metadata
|
* @brief update a txpool transaction's metadata
|
||||||
@ -1644,7 +1644,7 @@ public:
|
|||||||
* @param: data: the metadata for the block
|
* @param: data: the metadata for the block
|
||||||
* @param: blob: the block's blob
|
* @param: blob: the block's blob
|
||||||
*/
|
*/
|
||||||
virtual void add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata &blob) = 0;
|
virtual void add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata_ref &blob) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief get an alternative block by hash
|
* @brief get an alternative block by hash
|
||||||
@ -1687,7 +1687,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @return false if the function returns false for any transaction, otherwise true
|
* @return false if the function returns false for any transaction, otherwise true
|
||||||
*/
|
*/
|
||||||
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false, relay_category category = relay_category::broadcasted) const = 0;
|
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata_ref*)>, bool include_blob = false, relay_category category = relay_category::broadcasted) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief runs a function over all key images stored
|
* @brief runs a function over all key images stored
|
||||||
@ -1779,7 +1779,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @return false if the function returns false for any output, otherwise true
|
* @return false if the function returns false for any output, otherwise true
|
||||||
*/
|
*/
|
||||||
virtual bool for_all_alt_blocks(std::function<bool(const crypto::hash &blkid, const alt_block_data_t &data, const cryptonote::blobdata *blob)> f, bool include_blob = false) const = 0;
|
virtual bool for_all_alt_blocks(std::function<bool(const crypto::hash &blkid, const alt_block_data_t &data, const cryptonote::blobdata_ref *blob)> f, bool include_blob = false) const = 0;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -856,7 +856,7 @@ void BlockchainLMDB::remove_block()
|
|||||||
throw1(DB_ERROR(lmdb_error("Failed to add removal of block info to db transaction: ", result).c_str()));
|
throw1(DB_ERROR(lmdb_error("Failed to add removal of block info to db transaction: ", result).c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t BlockchainLMDB::add_transaction_data(const crypto::hash& blk_hash, const std::pair<transaction, blobdata>& txp, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash)
|
uint64_t BlockchainLMDB::add_transaction_data(const crypto::hash& blk_hash, const std::pair<transaction, blobdata_ref>& txp, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash)
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
@ -896,7 +896,7 @@ uint64_t BlockchainLMDB::add_transaction_data(const crypto::hash& blk_hash, cons
|
|||||||
if (result)
|
if (result)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to add tx data to db transaction: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to add tx data to db transaction: ", result).c_str()));
|
||||||
|
|
||||||
const cryptonote::blobdata &blob = txp.second;
|
const cryptonote::blobdata_ref &blob = txp.second;
|
||||||
MDB_val_sized(blobval, blob);
|
MDB_val_sized(blobval, blob);
|
||||||
|
|
||||||
unsigned int unprunable_size = tx.unprunable_size;
|
unsigned int unprunable_size = tx.unprunable_size;
|
||||||
@ -1756,7 +1756,7 @@ void BlockchainLMDB::unlock()
|
|||||||
auto_txn.commit(); \
|
auto_txn.commit(); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
void BlockchainLMDB::add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata &blob, const txpool_tx_meta_t &meta)
|
void BlockchainLMDB::add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata_ref &blob, const txpool_tx_meta_t &meta)
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
@ -2308,7 +2308,7 @@ bool BlockchainLMDB::check_pruning()
|
|||||||
return prune_worker(prune_mode_check, 0);
|
return prune_worker(prune_mode_check, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BlockchainLMDB::for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)> f, bool include_blob, relay_category category) const
|
bool BlockchainLMDB::for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata_ref*)> f, bool include_blob, relay_category category) const
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
@ -2334,8 +2334,7 @@ bool BlockchainLMDB::for_all_txpool_txes(std::function<bool(const crypto::hash&,
|
|||||||
const txpool_tx_meta_t &meta = *(const txpool_tx_meta_t*)v.mv_data;
|
const txpool_tx_meta_t &meta = *(const txpool_tx_meta_t*)v.mv_data;
|
||||||
if (!meta.matches(category))
|
if (!meta.matches(category))
|
||||||
continue;
|
continue;
|
||||||
const cryptonote::blobdata *passed_bd = NULL;
|
cryptonote::blobdata_ref bd;
|
||||||
cryptonote::blobdata bd;
|
|
||||||
if (include_blob)
|
if (include_blob)
|
||||||
{
|
{
|
||||||
MDB_val b;
|
MDB_val b;
|
||||||
@ -2344,11 +2343,10 @@ bool BlockchainLMDB::for_all_txpool_txes(std::function<bool(const crypto::hash&,
|
|||||||
throw0(DB_ERROR("Failed to find txpool tx blob to match metadata"));
|
throw0(DB_ERROR("Failed to find txpool tx blob to match metadata"));
|
||||||
if (result)
|
if (result)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to enumerate txpool tx blob: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to enumerate txpool tx blob: ", result).c_str()));
|
||||||
bd.assign(reinterpret_cast<const char*>(b.mv_data), b.mv_size);
|
bd = {reinterpret_cast<const char*>(b.mv_data), b.mv_size};
|
||||||
passed_bd = &bd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!f(txid, meta, passed_bd)) {
|
if (!f(txid, meta, &bd)) {
|
||||||
ret = false;
|
ret = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2359,7 +2357,7 @@ bool BlockchainLMDB::for_all_txpool_txes(std::function<bool(const crypto::hash&,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BlockchainLMDB::for_all_alt_blocks(std::function<bool(const crypto::hash&, const alt_block_data_t&, const cryptonote::blobdata*)> f, bool include_blob) const
|
bool BlockchainLMDB::for_all_alt_blocks(std::function<bool(const crypto::hash&, const alt_block_data_t&, const cryptonote::blobdata_ref*)> f, bool include_blob) const
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
@ -2384,15 +2382,13 @@ bool BlockchainLMDB::for_all_alt_blocks(std::function<bool(const crypto::hash&,
|
|||||||
if (v.mv_size < sizeof(alt_block_data_t))
|
if (v.mv_size < sizeof(alt_block_data_t))
|
||||||
throw0(DB_ERROR("alt_blocks record is too small"));
|
throw0(DB_ERROR("alt_blocks record is too small"));
|
||||||
const alt_block_data_t *data = (const alt_block_data_t*)v.mv_data;
|
const alt_block_data_t *data = (const alt_block_data_t*)v.mv_data;
|
||||||
const cryptonote::blobdata *passed_bd = NULL;
|
cryptonote::blobdata_ref bd;
|
||||||
cryptonote::blobdata bd;
|
|
||||||
if (include_blob)
|
if (include_blob)
|
||||||
{
|
{
|
||||||
bd.assign(reinterpret_cast<const char*>(v.mv_data) + sizeof(alt_block_data_t), v.mv_size - sizeof(alt_block_data_t));
|
bd = {reinterpret_cast<const char*>(v.mv_data) + sizeof(alt_block_data_t), v.mv_size - sizeof(alt_block_data_t)};
|
||||||
passed_bd = &bd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!f(blkid, *data, passed_bd)) {
|
if (!f(blkid, *data, &bd)) {
|
||||||
ret = false;
|
ret = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3604,8 +3600,7 @@ bool BlockchainLMDB::for_blocks_range(const uint64_t& h1, const uint64_t& h2, st
|
|||||||
if (ret)
|
if (ret)
|
||||||
throw0(DB_ERROR("Failed to enumerate blocks"));
|
throw0(DB_ERROR("Failed to enumerate blocks"));
|
||||||
uint64_t height = *(const uint64_t*)k.mv_data;
|
uint64_t height = *(const uint64_t*)k.mv_data;
|
||||||
blobdata bd;
|
blobdata_ref bd{reinterpret_cast<char*>(v.mv_data), v.mv_size};
|
||||||
bd.assign(reinterpret_cast<char*>(v.mv_data), v.mv_size);
|
|
||||||
block b;
|
block b;
|
||||||
if (!parse_and_validate_block_from_blob(bd, b))
|
if (!parse_and_validate_block_from_blob(bd, b))
|
||||||
throw0(DB_ERROR("Failed to parse block from blob retrieved from the db"));
|
throw0(DB_ERROR("Failed to parse block from blob retrieved from the db"));
|
||||||
@ -3660,15 +3655,16 @@ bool BlockchainLMDB::for_all_transactions(std::function<bool(const crypto::hash&
|
|||||||
if (ret)
|
if (ret)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to enumerate transactions: ", ret).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to enumerate transactions: ", ret).c_str()));
|
||||||
transaction tx;
|
transaction tx;
|
||||||
blobdata bd;
|
|
||||||
bd.assign(reinterpret_cast<char*>(v.mv_data), v.mv_size);
|
|
||||||
if (pruned)
|
if (pruned)
|
||||||
{
|
{
|
||||||
|
blobdata_ref bd{reinterpret_cast<char*>(v.mv_data), v.mv_size};
|
||||||
if (!parse_and_validate_tx_base_from_blob(bd, tx))
|
if (!parse_and_validate_tx_base_from_blob(bd, tx))
|
||||||
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
blobdata bd;
|
||||||
|
bd.assign(reinterpret_cast<char*>(v.mv_data), v.mv_size);
|
||||||
ret = mdb_cursor_get(m_cur_txs_prunable, &k, &v, MDB_SET);
|
ret = mdb_cursor_get(m_cur_txs_prunable, &k, &v, MDB_SET);
|
||||||
if (ret)
|
if (ret)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to get prunable tx data the db: ", ret).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to get prunable tx data the db: ", ret).c_str()));
|
||||||
@ -4402,7 +4398,7 @@ uint8_t BlockchainLMDB::get_hard_fork_version(uint64_t height) const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockchainLMDB::add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata &blob)
|
void BlockchainLMDB::add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata_ref &blob)
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
@ -4969,7 +4965,7 @@ void BlockchainLMDB::migrate_0_1()
|
|||||||
}
|
}
|
||||||
|
|
||||||
MDB_dbi o_txs;
|
MDB_dbi o_txs;
|
||||||
blobdata bd;
|
blobdata_ref bd;
|
||||||
block b;
|
block b;
|
||||||
MDB_val hk;
|
MDB_val hk;
|
||||||
|
|
||||||
@ -5051,7 +5047,7 @@ void BlockchainLMDB::migrate_0_1()
|
|||||||
} else if (result)
|
} else if (result)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to get a record from blocks: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to get a record from blocks: ", result).c_str()));
|
||||||
|
|
||||||
bd.assign(reinterpret_cast<char*>(v.mv_data), v.mv_size);
|
bd = {reinterpret_cast<char*>(v.mv_data), v.mv_size};
|
||||||
if (!parse_and_validate_block_from_blob(bd, b))
|
if (!parse_and_validate_block_from_blob(bd, b))
|
||||||
throw0(DB_ERROR("Failed to parse block from blob retrieved from the db"));
|
throw0(DB_ERROR("Failed to parse block from blob retrieved from the db"));
|
||||||
|
|
||||||
@ -5062,7 +5058,7 @@ void BlockchainLMDB::migrate_0_1()
|
|||||||
result = mdb_cursor_get(c_txs, &hk, &v, MDB_SET);
|
result = mdb_cursor_get(c_txs, &hk, &v, MDB_SET);
|
||||||
if (result)
|
if (result)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to get record from txs: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to get record from txs: ", result).c_str()));
|
||||||
bd.assign(reinterpret_cast<char*>(v.mv_data), v.mv_size);
|
bd = {reinterpret_cast<char*>(v.mv_data), v.mv_size};
|
||||||
if (!parse_and_validate_tx_from_blob(bd, tx))
|
if (!parse_and_validate_tx_from_blob(bd, tx))
|
||||||
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
||||||
add_transaction(null_hash, std::make_pair(std::move(tx), bd), &b.tx_hashes[j]);
|
add_transaction(null_hash, std::make_pair(std::move(tx), bd), &b.tx_hashes[j]);
|
||||||
@ -5184,8 +5180,7 @@ void BlockchainLMDB::migrate_1_2()
|
|||||||
else if (result)
|
else if (result)
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to get a record from txs: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to get a record from txs: ", result).c_str()));
|
||||||
|
|
||||||
cryptonote::blobdata bd;
|
cryptonote::blobdata bd{reinterpret_cast<char*>(v.mv_data), v.mv_size};
|
||||||
bd.assign(reinterpret_cast<char*>(v.mv_data), v.mv_size);
|
|
||||||
transaction tx;
|
transaction tx;
|
||||||
if (!parse_and_validate_tx_from_blob(bd, tx))
|
if (!parse_and_validate_tx_from_blob(bd, tx))
|
||||||
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
||||||
|
@ -283,7 +283,7 @@ public:
|
|||||||
|
|
||||||
virtual bool has_key_image(const crypto::key_image& img) const;
|
virtual bool has_key_image(const crypto::key_image& img) const;
|
||||||
|
|
||||||
virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata &blob, const txpool_tx_meta_t& meta);
|
virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata_ref &blob, const txpool_tx_meta_t& meta);
|
||||||
virtual void update_txpool_tx(const crypto::hash &txid, const txpool_tx_meta_t& meta);
|
virtual void update_txpool_tx(const crypto::hash &txid, const txpool_tx_meta_t& meta);
|
||||||
virtual uint64_t get_txpool_tx_count(relay_category category = relay_category::broadcasted) const;
|
virtual uint64_t get_txpool_tx_count(relay_category category = relay_category::broadcasted) const;
|
||||||
virtual bool txpool_has_tx(const crypto::hash &txid, relay_category tx_category) const;
|
virtual bool txpool_has_tx(const crypto::hash &txid, relay_category tx_category) const;
|
||||||
@ -296,20 +296,20 @@ public:
|
|||||||
virtual bool update_pruning();
|
virtual bool update_pruning();
|
||||||
virtual bool check_pruning();
|
virtual bool check_pruning();
|
||||||
|
|
||||||
virtual void add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata &blob);
|
virtual void add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata_ref &blob);
|
||||||
virtual bool get_alt_block(const crypto::hash &blkid, alt_block_data_t *data, cryptonote::blobdata *blob);
|
virtual bool get_alt_block(const crypto::hash &blkid, alt_block_data_t *data, cryptonote::blobdata *blob);
|
||||||
virtual void remove_alt_block(const crypto::hash &blkid);
|
virtual void remove_alt_block(const crypto::hash &blkid);
|
||||||
virtual uint64_t get_alt_block_count();
|
virtual uint64_t get_alt_block_count();
|
||||||
virtual void drop_alt_blocks();
|
virtual void drop_alt_blocks();
|
||||||
|
|
||||||
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)> f, bool include_blob = false, relay_category category = relay_category::broadcasted) const;
|
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata_ref*)> f, bool include_blob = false, relay_category category = relay_category::broadcasted) const;
|
||||||
|
|
||||||
virtual bool for_all_key_images(std::function<bool(const crypto::key_image&)>) const;
|
virtual bool for_all_key_images(std::function<bool(const crypto::key_image&)>) const;
|
||||||
virtual bool for_blocks_range(const uint64_t& h1, const uint64_t& h2, std::function<bool(uint64_t, const crypto::hash&, const cryptonote::block&)>) const;
|
virtual bool for_blocks_range(const uint64_t& h1, const uint64_t& h2, std::function<bool(uint64_t, const crypto::hash&, const cryptonote::block&)>) const;
|
||||||
virtual bool for_all_transactions(std::function<bool(const crypto::hash&, const cryptonote::transaction&)>, bool pruned) const;
|
virtual bool for_all_transactions(std::function<bool(const crypto::hash&, const cryptonote::transaction&)>, bool pruned) const;
|
||||||
virtual bool for_all_outputs(std::function<bool(uint64_t amount, const crypto::hash &tx_hash, uint64_t height, size_t tx_idx)> f) const;
|
virtual bool for_all_outputs(std::function<bool(uint64_t amount, const crypto::hash &tx_hash, uint64_t height, size_t tx_idx)> f) const;
|
||||||
virtual bool for_all_outputs(uint64_t amount, const std::function<bool(uint64_t height)> &f) const;
|
virtual bool for_all_outputs(uint64_t amount, const std::function<bool(uint64_t height)> &f) const;
|
||||||
virtual bool for_all_alt_blocks(std::function<bool(const crypto::hash &blkid, const alt_block_data_t &data, const cryptonote::blobdata *blob)> f, bool include_blob = false) const;
|
virtual bool for_all_alt_blocks(std::function<bool(const crypto::hash &blkid, const alt_block_data_t &data, const cryptonote::blobdata_ref *blob)> f, bool include_blob = false) const;
|
||||||
|
|
||||||
virtual uint64_t add_block( const std::pair<block, blobdata>& blk
|
virtual uint64_t add_block( const std::pair<block, blobdata>& blk
|
||||||
, size_t block_weight
|
, size_t block_weight
|
||||||
@ -376,7 +376,7 @@ private:
|
|||||||
|
|
||||||
virtual void remove_block();
|
virtual void remove_block();
|
||||||
|
|
||||||
virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<transaction, blobdata>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash);
|
virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<transaction, blobdata_ref>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash);
|
||||||
|
|
||||||
virtual void remove_transaction_data(const crypto::hash& tx_hash, const transaction& tx);
|
virtual void remove_transaction_data(const crypto::hash& tx_hash, const transaction& tx);
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ public:
|
|||||||
virtual std::vector<std::vector<uint64_t>> get_tx_amount_output_indices(const uint64_t tx_index, size_t n_txes) const override { return std::vector<std::vector<uint64_t>>(); }
|
virtual std::vector<std::vector<uint64_t>> get_tx_amount_output_indices(const uint64_t tx_index, size_t n_txes) const override { return std::vector<std::vector<uint64_t>>(); }
|
||||||
virtual bool has_key_image(const crypto::key_image& img) const override { return false; }
|
virtual bool has_key_image(const crypto::key_image& img) const override { return false; }
|
||||||
virtual void remove_block() override { }
|
virtual void remove_block() override { }
|
||||||
virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<cryptonote::transaction, cryptonote::blobdata>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash) override {return 0;}
|
virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<cryptonote::transaction, cryptonote::blobdata_ref>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash) override {return 0;}
|
||||||
virtual void remove_transaction_data(const crypto::hash& tx_hash, const cryptonote::transaction& tx) override {}
|
virtual void remove_transaction_data(const crypto::hash& tx_hash, const cryptonote::transaction& tx) override {}
|
||||||
virtual uint64_t add_output(const crypto::hash& tx_hash, const cryptonote::tx_out& tx_output, const uint64_t& local_index, const uint64_t unlock_time, const rct::key *commitment) override {return 0;}
|
virtual uint64_t add_output(const crypto::hash& tx_hash, const cryptonote::tx_out& tx_output, const uint64_t& local_index, const uint64_t unlock_time, const rct::key *commitment) override {return 0;}
|
||||||
virtual void add_tx_amount_output_indices(const uint64_t tx_index, const std::vector<uint64_t>& amount_output_indices) override {}
|
virtual void add_tx_amount_output_indices(const uint64_t tx_index, const std::vector<uint64_t>& amount_output_indices) override {}
|
||||||
@ -127,7 +127,7 @@ public:
|
|||||||
virtual std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>> get_output_histogram(const std::vector<uint64_t> &amounts, bool unlocked, uint64_t recent_cutoff, uint64_t min_count) const override { return std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>>(); }
|
virtual std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>> get_output_histogram(const std::vector<uint64_t> &amounts, bool unlocked, uint64_t recent_cutoff, uint64_t min_count) const override { return std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>>(); }
|
||||||
virtual bool get_output_distribution(uint64_t amount, uint64_t from_height, uint64_t to_height, std::vector<uint64_t> &distribution, uint64_t &base) const override { return false; }
|
virtual bool get_output_distribution(uint64_t amount, uint64_t from_height, uint64_t to_height, std::vector<uint64_t> &distribution, uint64_t &base) const override { return false; }
|
||||||
|
|
||||||
virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata &blob, const cryptonote::txpool_tx_meta_t& details) override {}
|
virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata_ref &blob, const cryptonote::txpool_tx_meta_t& details) override {}
|
||||||
virtual void update_txpool_tx(const crypto::hash &txid, const cryptonote::txpool_tx_meta_t& details) override {}
|
virtual void update_txpool_tx(const crypto::hash &txid, const cryptonote::txpool_tx_meta_t& details) override {}
|
||||||
virtual uint64_t get_txpool_tx_count(relay_category tx_relay = relay_category::broadcasted) const override { return 0; }
|
virtual uint64_t get_txpool_tx_count(relay_category tx_relay = relay_category::broadcasted) const override { return 0; }
|
||||||
virtual bool txpool_has_tx(const crypto::hash &txid, relay_category tx_category) const override { return false; }
|
virtual bool txpool_has_tx(const crypto::hash &txid, relay_category tx_category) const override { return false; }
|
||||||
@ -136,7 +136,7 @@ public:
|
|||||||
virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd, relay_category tx_category) const override { return false; }
|
virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd, relay_category tx_category) const override { return false; }
|
||||||
virtual uint64_t get_database_size() const override { return 0; }
|
virtual uint64_t get_database_size() const override { return 0; }
|
||||||
virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid, relay_category tx_category) const override { return ""; }
|
virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid, relay_category tx_category) const override { return ""; }
|
||||||
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const cryptonote::txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false, relay_category category = relay_category::broadcasted) const override { return false; }
|
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const cryptonote::txpool_tx_meta_t&, const cryptonote::blobdata_ref*)>, bool include_blob = false, relay_category category = relay_category::broadcasted) const override { return false; }
|
||||||
|
|
||||||
virtual void add_block( const cryptonote::block& blk
|
virtual void add_block( const cryptonote::block& blk
|
||||||
, size_t block_weight
|
, size_t block_weight
|
||||||
@ -160,12 +160,12 @@ public:
|
|||||||
virtual uint64_t get_max_block_size() override { return 100000000; }
|
virtual uint64_t get_max_block_size() override { return 100000000; }
|
||||||
virtual void add_max_block_size(uint64_t sz) override { }
|
virtual void add_max_block_size(uint64_t sz) override { }
|
||||||
|
|
||||||
virtual void add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata &blob) override {}
|
virtual void add_alt_block(const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata_ref &blob) override {}
|
||||||
virtual bool get_alt_block(const crypto::hash &blkid, alt_block_data_t *data, cryptonote::blobdata *blob) override { return false; }
|
virtual bool get_alt_block(const crypto::hash &blkid, alt_block_data_t *data, cryptonote::blobdata *blob) override { return false; }
|
||||||
virtual void remove_alt_block(const crypto::hash &blkid) override {}
|
virtual void remove_alt_block(const crypto::hash &blkid) override {}
|
||||||
virtual uint64_t get_alt_block_count() override { return 0; }
|
virtual uint64_t get_alt_block_count() override { return 0; }
|
||||||
virtual void drop_alt_blocks() override {}
|
virtual void drop_alt_blocks() override {}
|
||||||
virtual bool for_all_alt_blocks(std::function<bool(const crypto::hash &blkid, const alt_block_data_t &data, const cryptonote::blobdata *blob)> f, bool include_blob = false) const override { return true; }
|
virtual bool for_all_alt_blocks(std::function<bool(const crypto::hash &blkid, const alt_block_data_t &data, const cryptonote::blobdata_ref *blob)> f, bool include_blob = false) const override { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,10 +31,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <boost/utility/string_ref_fwd.hpp>
|
||||||
#include "span.h"
|
#include "span.h"
|
||||||
|
|
||||||
namespace cryptonote
|
namespace cryptonote
|
||||||
{
|
{
|
||||||
typedef std::string blobdata;
|
typedef std::string blobdata;
|
||||||
typedef epee::span<const char> blobdata_ref;
|
typedef boost::string_ref blobdata_ref;
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx)
|
bool parse_and_validate_tx_from_blob(const blobdata_ref& tx_blob, transaction& tx)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << tx_blob;
|
ss << tx_blob;
|
||||||
@ -222,7 +222,7 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_tx_base_from_blob(const blobdata& tx_blob, transaction& tx)
|
bool parse_and_validate_tx_base_from_blob(const blobdata_ref& tx_blob, transaction& tx)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << tx_blob;
|
ss << tx_blob;
|
||||||
@ -234,7 +234,7 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_tx_prefix_from_blob(const blobdata& tx_blob, transaction_prefix& tx)
|
bool parse_and_validate_tx_prefix_from_blob(const blobdata_ref& tx_blob, transaction_prefix& tx)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << tx_blob;
|
ss << tx_blob;
|
||||||
@ -244,7 +244,7 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx, crypto::hash& tx_hash)
|
bool parse_and_validate_tx_from_blob(const blobdata_ref& tx_blob, transaction& tx, crypto::hash& tx_hash)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << tx_blob;
|
ss << tx_blob;
|
||||||
@ -258,7 +258,7 @@ namespace cryptonote
|
|||||||
return get_transaction_hash(tx, tx_hash);
|
return get_transaction_hash(tx, tx_hash);
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx, crypto::hash& tx_hash, crypto::hash& tx_prefix_hash)
|
bool parse_and_validate_tx_from_blob(const blobdata_ref& tx_blob, transaction& tx, crypto::hash& tx_hash, crypto::hash& tx_prefix_hash)
|
||||||
{
|
{
|
||||||
if (!parse_and_validate_tx_from_blob(tx_blob, tx, tx_hash))
|
if (!parse_and_validate_tx_from_blob(tx_blob, tx, tx_hash))
|
||||||
return false;
|
return false;
|
||||||
@ -958,7 +958,7 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
void get_blob_hash(const epee::span<const char>& blob, crypto::hash& res)
|
void get_blob_hash(const blobdata_ref& blob, crypto::hash& res)
|
||||||
{
|
{
|
||||||
cn_fast_hash(blob.data(), blob.size(), res);
|
cn_fast_hash(blob.data(), blob.size(), res);
|
||||||
}
|
}
|
||||||
@ -1045,7 +1045,7 @@ namespace cryptonote
|
|||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
crypto::hash get_blob_hash(const epee::span<const char>& blob)
|
crypto::hash get_blob_hash(const blobdata_ref& blob)
|
||||||
{
|
{
|
||||||
crypto::hash h = null_hash;
|
crypto::hash h = null_hash;
|
||||||
get_blob_hash(blob, h);
|
get_blob_hash(blob, h);
|
||||||
@ -1065,7 +1065,7 @@ namespace cryptonote
|
|||||||
return get_transaction_hash(t, res, NULL);
|
return get_transaction_hash(t, res, NULL);
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool calculate_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata *blob, crypto::hash& res)
|
bool calculate_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata_ref *blob, crypto::hash& res)
|
||||||
{
|
{
|
||||||
if (t.version == 1)
|
if (t.version == 1)
|
||||||
return false;
|
return false;
|
||||||
@ -1073,7 +1073,7 @@ namespace cryptonote
|
|||||||
if (blob && unprunable_size)
|
if (blob && unprunable_size)
|
||||||
{
|
{
|
||||||
CHECK_AND_ASSERT_MES(unprunable_size <= blob->size(), false, "Inconsistent transaction unprunable and blob sizes");
|
CHECK_AND_ASSERT_MES(unprunable_size <= blob->size(), false, "Inconsistent transaction unprunable and blob sizes");
|
||||||
cryptonote::get_blob_hash(epee::span<const char>(blob->data() + unprunable_size, blob->size() - unprunable_size), res);
|
cryptonote::get_blob_hash(blobdata_ref(blob->data() + unprunable_size, blob->size() - unprunable_size), res);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1090,7 +1090,7 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
crypto::hash get_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata *blobdata)
|
crypto::hash get_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata_ref *blobdata)
|
||||||
{
|
{
|
||||||
crypto::hash res;
|
crypto::hash res;
|
||||||
if (t.is_prunable_hash_valid())
|
if (t.is_prunable_hash_valid())
|
||||||
@ -1168,7 +1168,7 @@ namespace cryptonote
|
|||||||
|
|
||||||
// base rct
|
// base rct
|
||||||
CHECK_AND_ASSERT_MES(prefix_size <= unprunable_size && unprunable_size <= blob.size(), false, "Inconsistent transaction prefix, unprunable and blob sizes");
|
CHECK_AND_ASSERT_MES(prefix_size <= unprunable_size && unprunable_size <= blob.size(), false, "Inconsistent transaction prefix, unprunable and blob sizes");
|
||||||
cryptonote::get_blob_hash(epee::span<const char>(blob.data() + prefix_size, unprunable_size - prefix_size), hashes[1]);
|
cryptonote::get_blob_hash(blobdata_ref(blob.data() + prefix_size, unprunable_size - prefix_size), hashes[1]);
|
||||||
|
|
||||||
// prunable rct
|
// prunable rct
|
||||||
if (t.rct_signatures.type == rct::RCTTypeNull)
|
if (t.rct_signatures.type == rct::RCTTypeNull)
|
||||||
@ -1177,7 +1177,8 @@ namespace cryptonote
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CHECK_AND_ASSERT_MES(calculate_transaction_prunable_hash(t, &blob, hashes[2]), false, "Failed to get tx prunable hash");
|
cryptonote::blobdata_ref blobref(blob);
|
||||||
|
CHECK_AND_ASSERT_MES(calculate_transaction_prunable_hash(t, &blobref, hashes[2]), false, "Failed to get tx prunable hash");
|
||||||
}
|
}
|
||||||
|
|
||||||
// the tx hash is the hash of the 3 hashes
|
// the tx hash is the hash of the 3 hashes
|
||||||
@ -1241,13 +1242,15 @@ namespace cryptonote
|
|||||||
return blob;
|
return blob;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool calculate_block_hash(const block& b, crypto::hash& res, const blobdata *blob)
|
bool calculate_block_hash(const block& b, crypto::hash& res, const blobdata_ref *blob)
|
||||||
{
|
{
|
||||||
blobdata bd;
|
blobdata bd;
|
||||||
|
blobdata_ref bdref;
|
||||||
if (!blob)
|
if (!blob)
|
||||||
{
|
{
|
||||||
bd = block_to_blob(b);
|
bd = block_to_blob(b);
|
||||||
blob = &bd;
|
bdref = bd;
|
||||||
|
blob = &bdref;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hash_result = get_object_hash(get_block_hashing_blob(b), res);
|
bool hash_result = get_object_hash(get_block_hashing_blob(b), res);
|
||||||
@ -1330,7 +1333,7 @@ namespace cryptonote
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b, crypto::hash *block_hash)
|
bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b, crypto::hash *block_hash)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << b_blob;
|
ss << b_blob;
|
||||||
@ -1348,12 +1351,12 @@ namespace cryptonote
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b)
|
bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b)
|
||||||
{
|
{
|
||||||
return parse_and_validate_block_from_blob(b_blob, b, NULL);
|
return parse_and_validate_block_from_blob(b_blob, b, NULL);
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b, crypto::hash &block_hash)
|
bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b, crypto::hash &block_hash)
|
||||||
{
|
{
|
||||||
return parse_and_validate_block_from_blob(b_blob, b, &block_hash);
|
return parse_and_validate_block_from_blob(b_blob, b, &block_hash);
|
||||||
}
|
}
|
||||||
|
@ -52,11 +52,11 @@ namespace cryptonote
|
|||||||
crypto::hash get_transaction_prefix_hash(const transaction_prefix& tx, hw::device &hwdev);
|
crypto::hash get_transaction_prefix_hash(const transaction_prefix& tx, hw::device &hwdev);
|
||||||
void get_transaction_prefix_hash(const transaction_prefix& tx, crypto::hash& h);
|
void get_transaction_prefix_hash(const transaction_prefix& tx, crypto::hash& h);
|
||||||
crypto::hash get_transaction_prefix_hash(const transaction_prefix& tx);
|
crypto::hash get_transaction_prefix_hash(const transaction_prefix& tx);
|
||||||
bool parse_and_validate_tx_prefix_from_blob(const blobdata& tx_blob, transaction_prefix& tx);
|
bool parse_and_validate_tx_prefix_from_blob(const blobdata_ref& tx_blob, transaction_prefix& tx);
|
||||||
bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx, crypto::hash& tx_hash, crypto::hash& tx_prefix_hash);
|
bool parse_and_validate_tx_from_blob(const blobdata_ref& tx_blob, transaction& tx, crypto::hash& tx_hash, crypto::hash& tx_prefix_hash);
|
||||||
bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx, crypto::hash& tx_hash);
|
bool parse_and_validate_tx_from_blob(const blobdata_ref& tx_blob, transaction& tx, crypto::hash& tx_hash);
|
||||||
bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx);
|
bool parse_and_validate_tx_from_blob(const blobdata_ref& tx_blob, transaction& tx);
|
||||||
bool parse_and_validate_tx_base_from_blob(const blobdata& tx_blob, transaction& tx);
|
bool parse_and_validate_tx_base_from_blob(const blobdata_ref& tx_blob, transaction& tx);
|
||||||
bool is_v1_tx(const blobdata_ref& tx_blob);
|
bool is_v1_tx(const blobdata_ref& tx_blob);
|
||||||
bool is_v1_tx(const blobdata& tx_blob);
|
bool is_v1_tx(const blobdata& tx_blob);
|
||||||
|
|
||||||
@ -102,27 +102,27 @@ namespace cryptonote
|
|||||||
bool generate_key_image_helper(const account_keys& ack, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key& tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev);
|
bool generate_key_image_helper(const account_keys& ack, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key& tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev);
|
||||||
bool generate_key_image_helper_precomp(const account_keys& ack, const crypto::public_key& out_key, const crypto::key_derivation& recv_derivation, size_t real_output_index, const subaddress_index& received_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev);
|
bool generate_key_image_helper_precomp(const account_keys& ack, const crypto::public_key& out_key, const crypto::key_derivation& recv_derivation, size_t real_output_index, const subaddress_index& received_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev);
|
||||||
void get_blob_hash(const blobdata& blob, crypto::hash& res);
|
void get_blob_hash(const blobdata& blob, crypto::hash& res);
|
||||||
void get_blob_hash(const epee::span<const char>& blob, crypto::hash& res);
|
void get_blob_hash(const blobdata_ref& blob, crypto::hash& res);
|
||||||
crypto::hash get_blob_hash(const blobdata& blob);
|
crypto::hash get_blob_hash(const blobdata& blob);
|
||||||
crypto::hash get_blob_hash(const epee::span<const char>& blob);
|
crypto::hash get_blob_hash(const blobdata_ref& blob);
|
||||||
std::string short_hash_str(const crypto::hash& h);
|
std::string short_hash_str(const crypto::hash& h);
|
||||||
|
|
||||||
crypto::hash get_transaction_hash(const transaction& t);
|
crypto::hash get_transaction_hash(const transaction& t);
|
||||||
bool get_transaction_hash(const transaction& t, crypto::hash& res);
|
bool get_transaction_hash(const transaction& t, crypto::hash& res);
|
||||||
bool get_transaction_hash(const transaction& t, crypto::hash& res, size_t& blob_size);
|
bool get_transaction_hash(const transaction& t, crypto::hash& res, size_t& blob_size);
|
||||||
bool get_transaction_hash(const transaction& t, crypto::hash& res, size_t* blob_size);
|
bool get_transaction_hash(const transaction& t, crypto::hash& res, size_t* blob_size);
|
||||||
bool calculate_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata *blob, crypto::hash& res);
|
bool calculate_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata_ref *blob, crypto::hash& res);
|
||||||
crypto::hash get_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata *blob = NULL);
|
crypto::hash get_transaction_prunable_hash(const transaction& t, const cryptonote::blobdata_ref *blob = NULL);
|
||||||
bool calculate_transaction_hash(const transaction& t, crypto::hash& res, size_t* blob_size);
|
bool calculate_transaction_hash(const transaction& t, crypto::hash& res, size_t* blob_size);
|
||||||
crypto::hash get_pruned_transaction_hash(const transaction& t, const crypto::hash &pruned_data_hash);
|
crypto::hash get_pruned_transaction_hash(const transaction& t, const crypto::hash &pruned_data_hash);
|
||||||
|
|
||||||
blobdata get_block_hashing_blob(const block& b);
|
blobdata get_block_hashing_blob(const block& b);
|
||||||
bool calculate_block_hash(const block& b, crypto::hash& res, const blobdata *blob = NULL);
|
bool calculate_block_hash(const block& b, crypto::hash& res, const blobdata_ref *blob = NULL);
|
||||||
bool get_block_hash(const block& b, crypto::hash& res);
|
bool get_block_hash(const block& b, crypto::hash& res);
|
||||||
crypto::hash get_block_hash(const block& b);
|
crypto::hash get_block_hash(const block& b);
|
||||||
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b, crypto::hash *block_hash);
|
bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b, crypto::hash *block_hash);
|
||||||
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b);
|
bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b);
|
||||||
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b, crypto::hash &block_hash);
|
bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b, crypto::hash &block_hash);
|
||||||
bool get_inputs_money_amount(const transaction& tx, uint64_t& money);
|
bool get_inputs_money_amount(const transaction& tx, uint64_t& money);
|
||||||
uint64_t get_outs_money_amount(const transaction& tx);
|
uint64_t get_outs_money_amount(const transaction& tx);
|
||||||
bool check_inputs_types_supported(const transaction& tx);
|
bool check_inputs_types_supported(const transaction& tx);
|
||||||
|
@ -2158,7 +2158,7 @@ bool Blockchain::get_alternative_blocks(std::vector<block>& blocks) const
|
|||||||
CRITICAL_REGION_LOCAL(m_blockchain_lock);
|
CRITICAL_REGION_LOCAL(m_blockchain_lock);
|
||||||
|
|
||||||
blocks.reserve(m_db->get_alt_block_count());
|
blocks.reserve(m_db->get_alt_block_count());
|
||||||
m_db->for_all_alt_blocks([&blocks](const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata *blob) {
|
m_db->for_all_alt_blocks([&blocks](const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata_ref *blob) {
|
||||||
if (!blob)
|
if (!blob)
|
||||||
{
|
{
|
||||||
MERROR("No blob, but blobs were requested");
|
MERROR("No blob, but blobs were requested");
|
||||||
@ -5121,7 +5121,7 @@ cryptonote::blobdata Blockchain::get_txpool_tx_blob(const crypto::hash& txid, re
|
|||||||
return m_db->get_txpool_tx_blob(txid, tx_category);
|
return m_db->get_txpool_tx_blob(txid, tx_category);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Blockchain::for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)> f, bool include_blob, relay_category tx_category) const
|
bool Blockchain::for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata_ref*)> f, bool include_blob, relay_category tx_category) const
|
||||||
{
|
{
|
||||||
return m_db->for_all_txpool_txes(f, include_blob, tx_category);
|
return m_db->for_all_txpool_txes(f, include_blob, tx_category);
|
||||||
}
|
}
|
||||||
@ -5192,7 +5192,7 @@ std::vector<std::pair<Blockchain::block_extended_info,std::vector<crypto::hash>>
|
|||||||
|
|
||||||
blocks_ext_by_hash alt_blocks;
|
blocks_ext_by_hash alt_blocks;
|
||||||
alt_blocks.reserve(m_db->get_alt_block_count());
|
alt_blocks.reserve(m_db->get_alt_block_count());
|
||||||
m_db->for_all_alt_blocks([&alt_blocks](const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata *blob) {
|
m_db->for_all_alt_blocks([&alt_blocks](const crypto::hash &blkid, const cryptonote::alt_block_data_t &data, const cryptonote::blobdata_ref *blob) {
|
||||||
if (!blob)
|
if (!blob)
|
||||||
{
|
{
|
||||||
MERROR("No blob, but blobs were requested");
|
MERROR("No blob, but blobs were requested");
|
||||||
|
@ -985,7 +985,7 @@ namespace cryptonote
|
|||||||
bool get_txpool_tx_meta(const crypto::hash& txid, txpool_tx_meta_t &meta) const;
|
bool get_txpool_tx_meta(const crypto::hash& txid, txpool_tx_meta_t &meta) const;
|
||||||
bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd, relay_category tx_category) const;
|
bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd, relay_category tx_category) const;
|
||||||
cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid, relay_category tx_category) const;
|
cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid, relay_category tx_category) const;
|
||||||
bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false, relay_category tx_category = relay_category::broadcasted) const;
|
bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata_ref*)>, bool include_blob = false, relay_category tx_category = relay_category::broadcasted) const;
|
||||||
bool txpool_tx_matches_category(const crypto::hash& tx_hash, relay_category category);
|
bool txpool_tx_matches_category(const crypto::hash& tx_hash, relay_category category);
|
||||||
|
|
||||||
bool is_within_compiled_block_hash_area() const { return is_within_compiled_block_hash_area(m_db->height()); }
|
bool is_within_compiled_block_hash_area() const { return is_within_compiled_block_hash_area(m_db->height()); }
|
||||||
|
@ -622,7 +622,7 @@ namespace cryptonote
|
|||||||
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
|
|
||||||
m_blockchain.for_all_txpool_txes([this, &hashes, &txes](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata*) {
|
m_blockchain.for_all_txpool_txes([this, &hashes, &txes](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref*) {
|
||||||
const auto tx_relay_method = meta.get_relay_method();
|
const auto tx_relay_method = meta.get_relay_method();
|
||||||
if (tx_relay_method != relay_method::block && tx_relay_method != relay_method::fluff)
|
if (tx_relay_method != relay_method::block && tx_relay_method != relay_method::fluff)
|
||||||
return true;
|
return true;
|
||||||
@ -670,7 +670,7 @@ namespace cryptonote
|
|||||||
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
std::list<std::pair<crypto::hash, uint64_t>> remove;
|
std::list<std::pair<crypto::hash, uint64_t>> remove;
|
||||||
m_blockchain.for_all_txpool_txes([this, &remove](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata*) {
|
m_blockchain.for_all_txpool_txes([this, &remove](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref*) {
|
||||||
uint64_t tx_age = time(nullptr) - meta.receive_time;
|
uint64_t tx_age = time(nullptr) - meta.receive_time;
|
||||||
|
|
||||||
if((tx_age > CRYPTONOTE_MEMPOOL_TX_LIVETIME && !meta.kept_by_block) ||
|
if((tx_age > CRYPTONOTE_MEMPOOL_TX_LIVETIME && !meta.kept_by_block) ||
|
||||||
@ -737,7 +737,7 @@ namespace cryptonote
|
|||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
LockedTXN lock(m_blockchain.get_db());
|
LockedTXN lock(m_blockchain.get_db());
|
||||||
txs.reserve(m_blockchain.get_txpool_tx_count());
|
txs.reserve(m_blockchain.get_txpool_tx_count());
|
||||||
m_blockchain.for_all_txpool_txes([this, now, &txs, &change_timestamps](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *){
|
m_blockchain.for_all_txpool_txes([this, now, &txs, &change_timestamps](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *){
|
||||||
// 0 fee transactions are never relayed
|
// 0 fee transactions are never relayed
|
||||||
if(!meta.pruned && meta.fee > 0 && !meta.do_not_relay)
|
if(!meta.pruned && meta.fee > 0 && !meta.do_not_relay)
|
||||||
{
|
{
|
||||||
@ -844,7 +844,7 @@ namespace cryptonote
|
|||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
const relay_category category = include_sensitive ? relay_category::all : relay_category::broadcasted;
|
const relay_category category = include_sensitive ? relay_category::all : relay_category::broadcasted;
|
||||||
txs.reserve(m_blockchain.get_txpool_tx_count(include_sensitive));
|
txs.reserve(m_blockchain.get_txpool_tx_count(include_sensitive));
|
||||||
m_blockchain.for_all_txpool_txes([&txs](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd){
|
m_blockchain.for_all_txpool_txes([&txs](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd){
|
||||||
transaction tx;
|
transaction tx;
|
||||||
if (!(meta.pruned ? parse_and_validate_tx_base_from_blob(*bd, tx) : parse_and_validate_tx_from_blob(*bd, tx)))
|
if (!(meta.pruned ? parse_and_validate_tx_base_from_blob(*bd, tx) : parse_and_validate_tx_from_blob(*bd, tx)))
|
||||||
{
|
{
|
||||||
@ -864,7 +864,7 @@ namespace cryptonote
|
|||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
const relay_category category = include_sensitive ? relay_category::all : relay_category::broadcasted;
|
const relay_category category = include_sensitive ? relay_category::all : relay_category::broadcasted;
|
||||||
txs.reserve(m_blockchain.get_txpool_tx_count(include_sensitive));
|
txs.reserve(m_blockchain.get_txpool_tx_count(include_sensitive));
|
||||||
m_blockchain.for_all_txpool_txes([&txs](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd){
|
m_blockchain.for_all_txpool_txes([&txs](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd){
|
||||||
txs.push_back(txid);
|
txs.push_back(txid);
|
||||||
return true;
|
return true;
|
||||||
}, false, category);
|
}, false, category);
|
||||||
@ -877,7 +877,7 @@ namespace cryptonote
|
|||||||
const uint64_t now = time(NULL);
|
const uint64_t now = time(NULL);
|
||||||
const relay_category category = include_sensitive ? relay_category::all : relay_category::broadcasted;
|
const relay_category category = include_sensitive ? relay_category::all : relay_category::broadcasted;
|
||||||
backlog.reserve(m_blockchain.get_txpool_tx_count(include_sensitive));
|
backlog.reserve(m_blockchain.get_txpool_tx_count(include_sensitive));
|
||||||
m_blockchain.for_all_txpool_txes([&backlog, now](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd){
|
m_blockchain.for_all_txpool_txes([&backlog, now](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd){
|
||||||
backlog.push_back({meta.weight, meta.fee, meta.receive_time - now});
|
backlog.push_back({meta.weight, meta.fee, meta.receive_time - now});
|
||||||
return true;
|
return true;
|
||||||
}, false, category);
|
}, false, category);
|
||||||
@ -893,7 +893,7 @@ namespace cryptonote
|
|||||||
stats.txs_total = m_blockchain.get_txpool_tx_count(include_sensitive);
|
stats.txs_total = m_blockchain.get_txpool_tx_count(include_sensitive);
|
||||||
std::vector<uint32_t> weights;
|
std::vector<uint32_t> weights;
|
||||||
weights.reserve(stats.txs_total);
|
weights.reserve(stats.txs_total);
|
||||||
m_blockchain.for_all_txpool_txes([&stats, &weights, now, &agebytes](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd){
|
m_blockchain.for_all_txpool_txes([&stats, &weights, now, &agebytes](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd){
|
||||||
weights.push_back(meta.weight);
|
weights.push_back(meta.weight);
|
||||||
stats.bytes_total += meta.weight;
|
stats.bytes_total += meta.weight;
|
||||||
if (!stats.bytes_min || meta.weight < stats.bytes_min)
|
if (!stats.bytes_min || meta.weight < stats.bytes_min)
|
||||||
@ -978,10 +978,10 @@ namespace cryptonote
|
|||||||
const size_t count = m_blockchain.get_txpool_tx_count(include_sensitive_data);
|
const size_t count = m_blockchain.get_txpool_tx_count(include_sensitive_data);
|
||||||
tx_infos.reserve(count);
|
tx_infos.reserve(count);
|
||||||
key_image_infos.reserve(count);
|
key_image_infos.reserve(count);
|
||||||
m_blockchain.for_all_txpool_txes([&tx_infos, key_image_infos, include_sensitive_data](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd){
|
m_blockchain.for_all_txpool_txes([&tx_infos, key_image_infos, include_sensitive_data](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd){
|
||||||
tx_info txi;
|
tx_info txi;
|
||||||
txi.id_hash = epee::string_tools::pod_to_hex(txid);
|
txi.id_hash = epee::string_tools::pod_to_hex(txid);
|
||||||
txi.tx_blob = *bd;
|
txi.tx_blob = blobdata(bd->data(), bd->size());
|
||||||
transaction tx;
|
transaction tx;
|
||||||
if (!(meta.pruned ? parse_and_validate_tx_base_from_blob(*bd, tx) : parse_and_validate_tx_from_blob(*bd, tx)))
|
if (!(meta.pruned ? parse_and_validate_tx_base_from_blob(*bd, tx) : parse_and_validate_tx_from_blob(*bd, tx)))
|
||||||
{
|
{
|
||||||
@ -1035,7 +1035,7 @@ namespace cryptonote
|
|||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
tx_infos.reserve(m_blockchain.get_txpool_tx_count());
|
tx_infos.reserve(m_blockchain.get_txpool_tx_count());
|
||||||
key_image_infos.reserve(m_blockchain.get_txpool_tx_count());
|
key_image_infos.reserve(m_blockchain.get_txpool_tx_count());
|
||||||
m_blockchain.for_all_txpool_txes([&tx_infos, key_image_infos](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd){
|
m_blockchain.for_all_txpool_txes([&tx_infos, key_image_infos](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd){
|
||||||
cryptonote::rpc::tx_in_pool txi;
|
cryptonote::rpc::tx_in_pool txi;
|
||||||
txi.tx_hash = txid;
|
txi.tx_hash = txid;
|
||||||
if (!(meta.pruned ? parse_and_validate_tx_base_from_blob(*bd, txi.tx) : parse_and_validate_tx_from_blob(*bd, txi.tx)))
|
if (!(meta.pruned ? parse_and_validate_tx_base_from_blob(*bd, txi.tx) : parse_and_validate_tx_from_blob(*bd, txi.tx)))
|
||||||
@ -1331,7 +1331,7 @@ namespace cryptonote
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
m_blockchain.for_all_txpool_txes([&ss, short_format](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *txblob) {
|
m_blockchain.for_all_txpool_txes([&ss, short_format](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *txblob) {
|
||||||
ss << "id: " << txid << std::endl;
|
ss << "id: " << txid << std::endl;
|
||||||
if (!short_format) {
|
if (!short_format) {
|
||||||
cryptonote::transaction tx;
|
cryptonote::transaction tx;
|
||||||
@ -1509,7 +1509,7 @@ namespace cryptonote
|
|||||||
std::unordered_set<crypto::hash> remove;
|
std::unordered_set<crypto::hash> remove;
|
||||||
|
|
||||||
m_txpool_weight = 0;
|
m_txpool_weight = 0;
|
||||||
m_blockchain.for_all_txpool_txes([this, &remove, tx_weight_limit](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata*) {
|
m_blockchain.for_all_txpool_txes([this, &remove, tx_weight_limit](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref*) {
|
||||||
m_txpool_weight += meta.weight;
|
m_txpool_weight += meta.weight;
|
||||||
if (meta.weight > tx_weight_limit) {
|
if (meta.weight > tx_weight_limit) {
|
||||||
LOG_PRINT_L1("Transaction " << txid << " is too big (" << meta.weight << " bytes), removing it from pool");
|
LOG_PRINT_L1("Transaction " << txid << " is too big (" << meta.weight << " bytes), removing it from pool");
|
||||||
@ -1581,7 +1581,7 @@ namespace cryptonote
|
|||||||
for (int pass = 0; pass < 2; ++pass)
|
for (int pass = 0; pass < 2; ++pass)
|
||||||
{
|
{
|
||||||
const bool kept = pass == 1;
|
const bool kept = pass == 1;
|
||||||
bool r = m_blockchain.for_all_txpool_txes([this, &remove, kept](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata *bd) {
|
bool r = m_blockchain.for_all_txpool_txes([this, &remove, kept](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata_ref *bd) {
|
||||||
if (!!kept != !!meta.kept_by_block)
|
if (!!kept != !!meta.kept_by_block)
|
||||||
return true;
|
return true;
|
||||||
cryptonote::transaction_prefix tx;
|
cryptonote::transaction_prefix tx;
|
||||||
|
Loading…
Reference in New Issue
Block a user