From 8e428f8ef694363389003fbb03e09bdd140e6c79 Mon Sep 17 00:00:00 2001 From: fuwa Date: Sun, 16 Dec 2018 14:34:45 +0800 Subject: [PATCH] fix output by reverting b9b307d --- src/rpc/core_rpc_server.cpp | 43 +---------------- src/rpc/core_rpc_server.h | 2 - src/rpc/core_rpc_server_commands_defs.h | 62 +------------------------ src/wallet/wallet2.cpp | 7 +-- 4 files changed, 4 insertions(+), 110 deletions(-) diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index 3851af3c8..990bfc5b4 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -2156,7 +2156,7 @@ namespace cryptonote return false; } - res.distributions.push_back({std::move(*data), amount, "", req.binary, req.compress}); + res.distributions.push_back({std::move(*data), amount, req.binary}); } } catch (const std::exception &e) @@ -2170,47 +2170,6 @@ namespace cryptonote return true; } //------------------------------------------------------------------------------------------------------------------------------ - bool core_rpc_server::on_get_output_distribution_bin(const COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::request& req, COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::response& res) - { - PERF_TIMER(on_get_output_distribution_bin); - - bool r; - if (use_bootstrap_daemon_if_necessary(invoke_http_mode::BIN, "/get_output_distribution.bin", req, res, r)) - return r; - - res.status = "Failed"; - - if (!req.binary) - { - res.status = "Binary only call"; - return false; - } - try - { - // 0 is placeholder for the whole chain - const uint64_t req_to_height = req.to_height ? req.to_height : (m_core.get_current_blockchain_height() - 1); - for (uint64_t amount: req.amounts) - { - auto data = rpc::RpcHandler::get_output_distribution([this](uint64_t amount, uint64_t from, uint64_t to, uint64_t &start_height, std::vector &distribution, uint64_t &base) { return m_core.get_output_distribution(amount, from, to, start_height, distribution, base); }, amount, req.from_height, req_to_height, req.cumulative); - if (!data) - { - res.status = "Failed to get output distribution"; - return false; - } - - res.distributions.push_back({std::move(*data), amount, "", req.binary, req.compress}); - } - } - catch (const std::exception &e) - { - res.status = "Failed to get output distribution"; - return false; - } - - res.status = CORE_RPC_STATUS_OK; - return true; - } - //------------------------------------------------------------------------------------------------------------------------------ const command_line::arg_descriptor core_rpc_server::arg_rpc_bind_port = { diff --git a/src/rpc/core_rpc_server.h b/src/rpc/core_rpc_server.h index 081ccc25d..a9dba8289 100644 --- a/src/rpc/core_rpc_server.h +++ b/src/rpc/core_rpc_server.h @@ -116,7 +116,6 @@ namespace cryptonote MAP_URI_AUTO_JON2_IF("/stop_save_graph", on_stop_save_graph, COMMAND_RPC_STOP_SAVE_GRAPH, !m_restricted) MAP_URI_AUTO_JON2("/get_outs", on_get_outs, COMMAND_RPC_GET_OUTPUTS) MAP_URI_AUTO_JON2_IF("/update", on_update, COMMAND_RPC_UPDATE, !m_restricted) - MAP_URI_AUTO_BIN2("/get_output_distribution.bin", on_get_output_distribution_bin, COMMAND_RPC_GET_OUTPUT_DISTRIBUTION) MAP_URI_AUTO_JON2_IF("/pop_blocks", on_pop_blocks, COMMAND_RPC_POP_BLOCKS, !m_restricted) BEGIN_JSON_RPC_MAP("/json_rpc") MAP_JON_RPC("get_block_count", on_getblockcount, COMMAND_RPC_GETBLOCKCOUNT) @@ -188,7 +187,6 @@ namespace cryptonote bool on_start_save_graph(const COMMAND_RPC_START_SAVE_GRAPH::request& req, COMMAND_RPC_START_SAVE_GRAPH::response& res); bool on_stop_save_graph(const COMMAND_RPC_STOP_SAVE_GRAPH::request& req, COMMAND_RPC_STOP_SAVE_GRAPH::response& res); bool on_update(const COMMAND_RPC_UPDATE::request& req, COMMAND_RPC_UPDATE::response& res); - bool on_get_output_distribution_bin(const COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::request& req, COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::response& res); bool on_pop_blocks(const COMMAND_RPC_POP_BLOCKS::request& req, COMMAND_RPC_POP_BLOCKS::response& res); //json_rpc diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h index 0a07930ec..6df9da132 100644 --- a/src/rpc/core_rpc_server_commands_defs.h +++ b/src/rpc/core_rpc_server_commands_defs.h @@ -34,40 +34,6 @@ #include "cryptonote_basic/difficulty.h" #include "crypto/hash.h" #include "rpc/rpc_handler.h" -#include "common/varint.h" -#include "common/perf_timer.h" - -namespace -{ - template - std::string compress_integer_array(const std::vector &v) - { - std::string s; - s.resize(v.size() * (sizeof(T) * 8 / 7 + 1)); - char *ptr = (char*)s.data(); - for (const T &t: v) - tools::write_varint(ptr, t); - s.resize(ptr - s.data()); - return s; - } - - template - std::vector decompress_integer_array(const std::string &s) - { - std::vector v; - v.reserve(s.size()); - int read = 0; - const std::string::const_iterator end = s.end(); - for (std::string::const_iterator i = s.begin(); i != end; std::advance(i, read)) - { - T t; - read = tools::read_varint(std::string::const_iterator(i), s.end(), t); - CHECK_AND_ASSERT_THROW_MES(read > 0 && read <= 256, "Error decompressing data"); - v.push_back(t); - } - return v; - } -} namespace cryptonote { @@ -2260,7 +2226,6 @@ namespace cryptonote uint64_t to_height; bool cumulative; bool binary; - bool compress; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amounts) @@ -2268,7 +2233,6 @@ namespace cryptonote KV_SERIALIZE_OPT(to_height, (uint64_t)0) KV_SERIALIZE_OPT(cumulative, false) KV_SERIALIZE_OPT(binary, true) - KV_SERIALIZE_OPT(compress, false) END_KV_SERIALIZE_MAP() }; @@ -2276,38 +2240,14 @@ namespace cryptonote { rpc::output_distribution_data data; uint64_t amount; - std::string compressed_data; bool binary; - bool compress; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount) KV_SERIALIZE_N(data.start_height, "start_height") KV_SERIALIZE(binary) - KV_SERIALIZE(compress) if (this_ref.binary) - { - if (is_store) - { - if (this_ref.compress) - { - const_cast(this_ref.compressed_data) = compress_integer_array(this_ref.data.distribution); - KV_SERIALIZE(compressed_data) - } - else - KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(data.distribution, "distribution") - } - else - { - if (this_ref.compress) - { - KV_SERIALIZE(compressed_data) - const_cast&>(this_ref.data.distribution) = decompress_integer_array(this_ref.compressed_data); - } - else - KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(data.distribution, "distribution") - } - } + KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(data.distribution, "distribution") else KV_SERIALIZE_N(data.distribution, "distribution") KV_SERIALIZE_N(data.base, "base") diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 9a9669d9d..62ff737aa 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2902,11 +2902,10 @@ bool wallet2::get_rct_distribution(uint64_t &start_height, std::vector cryptonote::COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::response res = AUTO_VAL_INIT(res); req.amounts.push_back(0); req.from_height = 0; - req.cumulative = false; + req.cumulative = true; req.binary = true; - req.compress = true; m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_bin("/get_output_distribution.bin", req, res, m_http_client, rpc_timeout); + bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_distribution", req, res, m_http_client, rpc_timeout); m_daemon_rpc_mutex.unlock(); if (!r) { @@ -2933,8 +2932,6 @@ bool wallet2::get_rct_distribution(uint64_t &start_height, std::vector MWARNING("Failed to request output distribution: results are not for amount 0"); return false; } - for (size_t i = 1; i < res.distributions[0].data.distribution.size(); ++i) - res.distributions[0].data.distribution[i] += res.distributions[0].data.distribution[i-1]; start_height = res.distributions[0].data.start_height; distribution = std::move(res.distributions[0].data.distribution); return true;