Merge pull request #1247
10a79ea
daemon: report transaction relay status in print_pool* commands (moneromooo-monero)1e16366
core: notify the txpool when transactions are relayed (moneromooo-monero)f3c374f
tx_pool: set relayed flag on relay (moneromooo-monero)
This commit is contained in:
commit
854abeb3bb
8 changed files with 35 additions and 0 deletions
|
@ -709,6 +709,20 @@ namespace cryptonote
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------
|
||||||
|
void core::on_transaction_relayed(const cryptonote::blobdata& tx_blob)
|
||||||
|
{
|
||||||
|
std::list<std::pair<crypto::hash, cryptonote::transaction>> txs;
|
||||||
|
cryptonote::transaction tx;
|
||||||
|
crypto::hash tx_hash, tx_prefix_hash;
|
||||||
|
if (!parse_and_validate_tx_from_blob(tx_blob, tx, tx_hash, tx_prefix_hash))
|
||||||
|
{
|
||||||
|
LOG_ERROR("Failed to parse relayed tranasction");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
txs.push_back(std::make_pair(tx_hash, std::move(tx)));
|
||||||
|
m_mempool.set_relayed(txs);
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------------------------------------------------
|
||||||
bool core::get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce)
|
bool core::get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce)
|
||||||
{
|
{
|
||||||
return m_blockchain_storage.create_block_template(b, adr, diffic, height, ex_nonce);
|
return m_blockchain_storage.create_block_template(b, adr, diffic, height, ex_nonce);
|
||||||
|
|
|
@ -180,6 +180,11 @@ namespace cryptonote
|
||||||
*/
|
*/
|
||||||
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce);
|
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief called when a transaction is relayed
|
||||||
|
*/
|
||||||
|
virtual void on_transaction_relayed(const cryptonote::blobdata& tx);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief gets the miner instance
|
* @brief gets the miner instance
|
||||||
|
|
|
@ -387,9 +387,12 @@ namespace cryptonote
|
||||||
{
|
{
|
||||||
auto i = m_transactions.find(it->first);
|
auto i = m_transactions.find(it->first);
|
||||||
if (i != m_transactions.end())
|
if (i != m_transactions.end())
|
||||||
|
{
|
||||||
|
i->second.relayed = true;
|
||||||
i->second.last_relayed_time = now;
|
i->second.last_relayed_time = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
size_t tx_memory_pool::get_transactions_count() const
|
size_t tx_memory_pool::get_transactions_count() const
|
||||||
{
|
{
|
||||||
|
@ -422,6 +425,8 @@ namespace cryptonote
|
||||||
txi.last_failed_height = txd.last_failed_height;
|
txi.last_failed_height = txd.last_failed_height;
|
||||||
txi.last_failed_id_hash = epee::string_tools::pod_to_hex(txd.last_failed_id);
|
txi.last_failed_id_hash = epee::string_tools::pod_to_hex(txd.last_failed_id);
|
||||||
txi.receive_time = txd.receive_time;
|
txi.receive_time = txd.receive_time;
|
||||||
|
txi.relayed = txd.relayed;
|
||||||
|
txi.last_relayed_time = txd.last_relayed_time;
|
||||||
tx_infos.push_back(txi);
|
tx_infos.push_back(txi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -780,6 +780,9 @@ namespace cryptonote
|
||||||
template<class t_core>
|
template<class t_core>
|
||||||
bool t_cryptonote_protocol_handler<t_core>::relay_transactions(NOTIFY_NEW_TRANSACTIONS::request& arg, cryptonote_connection_context& exclude_context)
|
bool t_cryptonote_protocol_handler<t_core>::relay_transactions(NOTIFY_NEW_TRANSACTIONS::request& arg, cryptonote_connection_context& exclude_context)
|
||||||
{
|
{
|
||||||
|
// no check for success, so tell core they're relayed unconditionally
|
||||||
|
for(auto tx_blob_it = arg.txs.begin(); tx_blob_it!=arg.txs.end(); ++tx_blob_it)
|
||||||
|
m_core.on_transaction_relayed(*tx_blob_it);
|
||||||
return relay_post_notify<NOTIFY_NEW_TRANSACTIONS>(arg, exclude_context);
|
return relay_post_notify<NOTIFY_NEW_TRANSACTIONS>(arg, exclude_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -734,6 +734,7 @@ bool t_rpc_command_executor::print_transaction_pool_long() {
|
||||||
<< "blob_size: " << tx_info.blob_size << std::endl
|
<< "blob_size: " << tx_info.blob_size << std::endl
|
||||||
<< "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
|
<< "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
|
||||||
<< "receive_time: " << tx_info.receive_time << " (" << get_human_time_ago(tx_info.receive_time, now) << ")" << std::endl
|
<< "receive_time: " << tx_info.receive_time << " (" << get_human_time_ago(tx_info.receive_time, now) << ")" << std::endl
|
||||||
|
<< "relayed: " << [&](const cryptonote::tx_info &tx_info)->std::string { if (!tx_info.relayed) return "no"; return boost::lexical_cast<std::string>(tx_info.last_relayed_time) + " (" + get_human_time_ago(tx_info.last_relayed_time, now) + ")"; } (tx_info) << std::endl
|
||||||
<< "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
|
<< "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
|
||||||
<< "max_used_block_height: " << tx_info.max_used_block_height << std::endl
|
<< "max_used_block_height: " << tx_info.max_used_block_height << std::endl
|
||||||
<< "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
|
<< "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
|
||||||
|
@ -813,6 +814,7 @@ bool t_rpc_command_executor::print_transaction_pool_short() {
|
||||||
<< "blob_size: " << tx_info.blob_size << std::endl
|
<< "blob_size: " << tx_info.blob_size << std::endl
|
||||||
<< "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
|
<< "fee: " << cryptonote::print_money(tx_info.fee) << std::endl
|
||||||
<< "receive_time: " << tx_info.receive_time << " (" << get_human_time_ago(tx_info.receive_time, now) << ")" << std::endl
|
<< "receive_time: " << tx_info.receive_time << " (" << get_human_time_ago(tx_info.receive_time, now) << ")" << std::endl
|
||||||
|
<< "relayed: " << [&](const cryptonote::tx_info &tx_info)->std::string { if (!tx_info.relayed) return "no"; return boost::lexical_cast<std::string>(tx_info.last_relayed_time) + " (" + get_human_time_ago(tx_info.last_relayed_time, now) + ")"; } (tx_info) << std::endl
|
||||||
<< "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
|
<< "kept_by_block: " << (tx_info.kept_by_block ? 'T' : 'F') << std::endl
|
||||||
<< "max_used_block_height: " << tx_info.max_used_block_height << std::endl
|
<< "max_used_block_height: " << tx_info.max_used_block_height << std::endl
|
||||||
<< "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
|
<< "max_used_block_id: " << tx_info.max_used_block_id_hash << std::endl
|
||||||
|
|
|
@ -857,6 +857,8 @@ namespace cryptonote
|
||||||
uint64_t last_failed_height;
|
uint64_t last_failed_height;
|
||||||
std::string last_failed_id_hash;
|
std::string last_failed_id_hash;
|
||||||
uint64_t receive_time;
|
uint64_t receive_time;
|
||||||
|
bool relayed;
|
||||||
|
uint64_t last_relayed_time;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(id_hash)
|
KV_SERIALIZE(id_hash)
|
||||||
|
@ -869,6 +871,8 @@ namespace cryptonote
|
||||||
KV_SERIALIZE(last_failed_height)
|
KV_SERIALIZE(last_failed_height)
|
||||||
KV_SERIALIZE(last_failed_id_hash)
|
KV_SERIALIZE(last_failed_id_hash)
|
||||||
KV_SERIALIZE(receive_time)
|
KV_SERIALIZE(receive_time)
|
||||||
|
KV_SERIALIZE(relayed)
|
||||||
|
KV_SERIALIZE(last_failed_id_hash)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -88,5 +88,6 @@ namespace tests
|
||||||
bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
|
bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
|
||||||
uint64_t get_target_blockchain_height() const { return 1; }
|
uint64_t get_target_blockchain_height() const { return 1; }
|
||||||
size_t get_block_sync_size() const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
|
size_t get_block_sync_size() const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
|
||||||
|
virtual void on_transaction_relayed(const cryptonote::blobdata& tx) {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ public:
|
||||||
bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
|
bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
|
||||||
uint64_t get_target_blockchain_height() const { return 1; }
|
uint64_t get_target_blockchain_height() const { return 1; }
|
||||||
size_t get_block_sync_size() const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
|
size_t get_block_sync_size() const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
|
||||||
|
virtual void on_transaction_relayed(const cryptonote::blobdata& tx) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef nodetool::node_server<cryptonote::t_cryptonote_protocol_handler<test_core>> Server;
|
typedef nodetool::node_server<cryptonote::t_cryptonote_protocol_handler<test_core>> Server;
|
||||||
|
|
Loading…
Reference in a new issue