aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-07-13 19:26:11 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-08-28 21:29:38 +0100
commit3cb2edec6623e1a6b10d67c7335b55ccb410b336 (patch)
tree5f4aa409ea8cb7aa5b972701672342610f679078 /src/rpc
parentcore: always use the new simple rct variant (diff)
downloadmonero-3cb2edec6623e1a6b10d67c7335b55ccb410b336.tar.xz
rpc: send global indices along with blocks/transacions on refresh
This plugs a privacy leak, where the wallet tells the daemon which transactions contain outputs for the wallet by asking for additional information for that particular transaction. As a nice bonus, this actually makes refresh slightly faster.
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/core_rpc_server.cpp16
-rw-r--r--src/rpc/core_rpc_server_commands_defs.h20
2 files changed, 36 insertions, 0 deletions
diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp
index cef53b5ce..5aa3591ab 100644
--- a/src/rpc/core_rpc_server.cpp
+++ b/src/rpc/core_rpc_server.cpp
@@ -159,9 +159,25 @@ namespace cryptonote
{
res.blocks.resize(res.blocks.size()+1);
res.blocks.back().block = block_to_blob(b.first);
+ res.output_indices.push_back(COMMAND_RPC_GET_BLOCKS_FAST::block_output_indices());
+ res.output_indices.back().indices.push_back(COMMAND_RPC_GET_BLOCKS_FAST::tx_output_indices());
+ bool r = m_core.get_tx_outputs_gindexs(get_transaction_hash(b.first.miner_tx), res.output_indices.back().indices.back().indices);
+ if (!r)
+ {
+ res.status = "Failed";
+ return false;
+ }
+ size_t txidx = 0;
BOOST_FOREACH(auto& t, b.second)
{
res.blocks.back().txs.push_back(tx_to_blob(t));
+ res.output_indices.back().indices.push_back(COMMAND_RPC_GET_BLOCKS_FAST::tx_output_indices());
+ bool r = m_core.get_tx_outputs_gindexs(b.first.tx_hashes[txidx++], res.output_indices.back().indices.back().indices);
+ if (!r)
+ {
+ res.status = "Failed";
+ return false;
+ }
}
}
diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h
index 780de8682..5f0608532 100644
--- a/src/rpc/core_rpc_server_commands_defs.h
+++ b/src/rpc/core_rpc_server_commands_defs.h
@@ -76,18 +76,38 @@ namespace cryptonote
END_KV_SERIALIZE_MAP()
};
+ struct tx_output_indices
+ {
+ std::vector<uint64_t> indices;
+
+ BEGIN_KV_SERIALIZE_MAP()
+ KV_SERIALIZE(indices)
+ END_KV_SERIALIZE_MAP()
+ };
+
+ struct block_output_indices
+ {
+ std::vector<tx_output_indices> indices;
+
+ BEGIN_KV_SERIALIZE_MAP()
+ KV_SERIALIZE(indices)
+ END_KV_SERIALIZE_MAP()
+ };
+
struct response
{
std::list<block_complete_entry> blocks;
uint64_t start_height;
uint64_t current_height;
std::string status;
+ std::vector<block_output_indices> output_indices;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(blocks)
KV_SERIALIZE(start_height)
KV_SERIALIZE(current_height)
KV_SERIALIZE(status)
+ KV_SERIALIZE(output_indices)
END_KV_SERIALIZE_MAP()
};
};