Merge pull request #7662

4da1112 rpc: send confirmations in get_transactions result (moneromooo-monero)
This commit is contained in:
luigi1111 2021-06-10 11:34:20 -05:00
commit a1a3e970f7
No known key found for this signature in database
GPG Key ID: F4ACA0183641E010
3 changed files with 19 additions and 5 deletions

View File

@ -1044,6 +1044,7 @@ namespace cryptonote
if (e.in_pool) if (e.in_pool)
{ {
e.block_height = e.block_timestamp = std::numeric_limits<uint64_t>::max(); e.block_height = e.block_timestamp = std::numeric_limits<uint64_t>::max();
e.confirmations = 0;
auto it = per_tx_pool_tx_info.find(tx_hash); auto it = per_tx_pool_tx_info.find(tx_hash);
if (it != per_tx_pool_tx_info.end()) if (it != per_tx_pool_tx_info.end())
{ {
@ -1062,6 +1063,7 @@ namespace cryptonote
else else
{ {
e.block_height = m_core.get_blockchain_storage().get_db().get_tx_block_height(tx_hash); e.block_height = m_core.get_blockchain_storage().get_db().get_tx_block_height(tx_hash);
e.confirmations = m_core.get_current_blockchain_height() - e.block_height;
e.block_timestamp = m_core.get_blockchain_storage().get_db().get_block_timestamp(e.block_height); e.block_timestamp = m_core.get_blockchain_storage().get_db().get_block_timestamp(e.block_height);
e.received_timestamp = 0; e.received_timestamp = 0;
e.double_spend_seen = false; e.double_spend_seen = false;

View File

@ -88,7 +88,7 @@ namespace cryptonote
// advance which version they will stop working with // advance which version they will stop working with
// Don't go over 32767 for any of these // Don't go over 32767 for any of these
#define CORE_RPC_VERSION_MAJOR 3 #define CORE_RPC_VERSION_MAJOR 3
#define CORE_RPC_VERSION_MINOR 6 #define CORE_RPC_VERSION_MINOR 7
#define MAKE_CORE_RPC_VERSION(major,minor) (((major)<<16)|(minor)) #define MAKE_CORE_RPC_VERSION(major,minor) (((major)<<16)|(minor))
#define CORE_RPC_VERSION MAKE_CORE_RPC_VERSION(CORE_RPC_VERSION_MAJOR, CORE_RPC_VERSION_MINOR) #define CORE_RPC_VERSION MAKE_CORE_RPC_VERSION(CORE_RPC_VERSION_MAJOR, CORE_RPC_VERSION_MINOR)
@ -350,6 +350,7 @@ namespace cryptonote
bool in_pool; bool in_pool;
bool double_spend_seen; bool double_spend_seen;
uint64_t block_height; uint64_t block_height;
uint64_t confirmations;
uint64_t block_timestamp; uint64_t block_timestamp;
uint64_t received_timestamp; uint64_t received_timestamp;
std::vector<uint64_t> output_indices; std::vector<uint64_t> output_indices;
@ -367,6 +368,7 @@ namespace cryptonote
if (!this_ref.in_pool) if (!this_ref.in_pool)
{ {
KV_SERIALIZE(block_height) KV_SERIALIZE(block_height)
KV_SERIALIZE(confirmations)
KV_SERIALIZE(block_timestamp) KV_SERIALIZE(block_timestamp)
KV_SERIALIZE(output_indices) KV_SERIALIZE(output_indices)
} }

View File

@ -11516,6 +11516,9 @@ void wallet2::check_tx_key_helper(const cryptonote::transaction &tx, const crypt
void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_derivation &derivation, const std::vector<crypto::key_derivation> &additional_derivations, const cryptonote::account_public_address &address, uint64_t &received, bool &in_pool, uint64_t &confirmations) void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_derivation &derivation, const std::vector<crypto::key_derivation> &additional_derivations, const cryptonote::account_public_address &address, uint64_t &received, bool &in_pool, uint64_t &confirmations)
{ {
uint32_t rpc_version;
THROW_WALLET_EXCEPTION_IF(!check_connection(&rpc_version), error::wallet_internal_error, "Failed to connect to daemon: " + get_daemon_address());
COMMAND_RPC_GET_TRANSACTIONS::request req; COMMAND_RPC_GET_TRANSACTIONS::request req;
COMMAND_RPC_GET_TRANSACTIONS::response res; COMMAND_RPC_GET_TRANSACTIONS::response res;
req.txs_hashes.push_back(epee::string_tools::pod_to_hex(txid)); req.txs_hashes.push_back(epee::string_tools::pod_to_hex(txid));
@ -11561,10 +11564,17 @@ void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_de
confirmations = 0; confirmations = 0;
if (!in_pool) if (!in_pool)
{ {
std::string err; if (rpc_version < MAKE_CORE_RPC_VERSION(3, 7))
uint64_t bc_height = get_daemon_blockchain_height(err); {
if (err.empty()) std::string err;
confirmations = bc_height - res.txs.front().block_height; uint64_t bc_height = get_daemon_blockchain_height(err);
if (err.empty() && bc_height > res.txs.front().block_height)
confirmations = bc_height - res.txs.front().block_height;
}
else
{
confirmations = res.txs.front().confirmations;
}
} }
} }