diff --git a/src/MempoolStatus.cpp b/src/MempoolStatus.cpp index 6e89810..f716625 100644 --- a/src/MempoolStatus.cpp +++ b/src/MempoolStatus.cpp @@ -86,6 +86,8 @@ MempoolStatus::read_mempool() // if dont have tx_blob member, construct tx // from json obtained from the rpc call + uint64_t mempool_size_kB {0}; + for (size_t i = 0; i < mempool_tx_info.size(); ++i) { // get transaction info of the tx in the mempool @@ -114,12 +116,16 @@ MempoolStatus::read_mempool() return false; } + mempool_size_kB += _tx_info.blob_size; + local_copy_of_mempool_txs.emplace_back(tx_hash_reconstructed, _tx_info, tx); } // if (hex_to_pod(_tx_info.id_hash, mem_tx_hash)) } // for (size_t i = 0; i < mempool_tx_info.size(); ++i) + + std::lock_guard lck (mempool_mutx); // clear current mempool txs vector @@ -127,6 +133,9 @@ MempoolStatus::read_mempool() // not very efficient but good enough for now. mempool_txs = std::move(local_copy_of_mempool_txs); + mempool_no = local_copy_of_mempool_txs.size(); + mempool_size = mempool_size_kB; + return true; } @@ -152,5 +161,7 @@ boost::thread MempoolStatus::m_thread; Blockchain* MempoolStatus::core_storage {nullptr}; xmreg::MicroCore* MempoolStatus::mcore {nullptr}; vector MempoolStatus::mempool_txs; +atomic MempoolStatus::mempool_no {0}; // no of txs +atomic MempoolStatus::mempool_size {0}; // size in bytes. mutex MempoolStatus::mempool_mutx; } \ No newline at end of file diff --git a/src/MempoolStatus.h b/src/MempoolStatus.h index 67dfef3..6246483 100644 --- a/src/MempoolStatus.h +++ b/src/MempoolStatus.h @@ -43,6 +43,9 @@ struct MempoolStatus static atomic is_running; + static atomic mempool_no; // no of txs + static atomic mempool_size; // size in bytes. + static bf::path blockchain_path; static string deamon_url; static bool testnet; diff --git a/src/page.h b/src/page.h index 5ca1c8d..cb4c3f0 100644 --- a/src/page.h +++ b/src/page.h @@ -897,6 +897,9 @@ namespace xmreg std::vector mempool_txs = MempoolStatus::get_mempool_txs(); + // size of mempool in bytes + uint64_t mempool_size_bytes = MempoolStatus::mempool_size; + // initalise page tempate map with basic info about mempool mstch::map context { {"mempool_size" , mempool_txs.size()}, @@ -1101,14 +1104,6 @@ namespace xmreg } - // calculate mempool size using all txs in mempool. - // not only those shown on the front page - uint64_t mempool_size_bytes {0}; - - for (const MempoolStatus::mempool_tx& mempool_tx: mempool_txs) - { - mempool_size_bytes += mempool_tx.info.blob_size; - } context.insert({"mempool_size_kB", fmt::format("{:0.2f}", @@ -4867,25 +4862,8 @@ namespace xmreg j_info["fee_per_kb"] = fee_estimated; -// // get mempool size in kB. -// std::vector mempool_txs; -// -// if (!rpc.get_mempool(mempool_txs)) -// { -// j_response["status"] = "error"; -// j_response["message"] = "Cant get mempool transactions"; -// return j_response; -// } -// -// uint64_t tx_pool_size_kbytes {0}; -// -// for (const tx_info& tx_i: mempool_txs) -// { -// tx_pool_size_kbytes += tx_i.blob_size; -// } -// -// j_info["tx_pool_size"] = mempool_txs.size(); -// j_info["tx_pool_size_kbytes"] = tx_pool_size_kbytes; + j_info["tx_pool_size"] = MempoolStatus::mempool_no.load(); + j_info["tx_pool_size_kbytes"] = MempoolStatus::mempool_size.load(); j_data = j_info;