From a44d94d390158a04db9bfd84bacd5ca1d7233ba0 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Tue, 5 Jan 2016 21:57:43 +0000 Subject: rpc: is_key_image_spent now checks the tx pool too --- src/rpc/core_rpc_server.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src/rpc/core_rpc_server.cpp') diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index e6973b0b8..021c12d6e 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -304,7 +304,37 @@ namespace cryptonote } res.spent_status.clear(); for (size_t n = 0; n < spent_status.size(); ++n) - res.spent_status.push_back(spent_status[n]); + res.spent_status.push_back(spent_status[n] ? COMMAND_RPC_IS_KEY_IMAGE_SPENT::SPENT_IN_BLOCKCHAIN : COMMAND_RPC_IS_KEY_IMAGE_SPENT::UNSPENT); + + // check the pool too + std::vector txs; + std::vector ki; + r = m_core.get_pool_transactions_and_spent_keys_info(txs, ki); + if(!r) + { + res.status = "Failed"; + return true; + } + for (std::vector::const_iterator i = ki.begin(); i != ki.end(); ++i) + { + crypto::hash hash; + crypto::key_image spent_key_image; + if (parse_hash256(i->id_hash, hash)) + { + memcpy(&spent_key_image, &hash, sizeof(hash)); // a bit dodgy, should be other parse functions somewhere + for (size_t n = 0; n < res.spent_status.size(); ++n) + { + if (res.spent_status[n] == COMMAND_RPC_IS_KEY_IMAGE_SPENT::UNSPENT) + { + if (key_images[n] == spent_key_image) + { + res.spent_status[n] = COMMAND_RPC_IS_KEY_IMAGE_SPENT::SPENT_IN_POOL; + break; + } + } + } + } + } res.status = CORE_RPC_STATUS_OK; return true; -- cgit v1.2.3