From 28f8f86860322bdc43e2295b630b6721b9537c03 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 22 Jul 2020 01:43:01 +0200 Subject: [PATCH] fixed bug with wrong handling coinbase for auditable wallets --- src/currency_core/currency_format_utils.cpp | 7 ++++++- src/currency_protocol/currency_protocol_defs.h | 2 ++ src/rpc/core_rpc_server.cpp | 4 +++- src/wallet/core_default_rpc_proxy.h | 6 +++++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 09bae730..ed017a34 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1739,7 +1739,12 @@ namespace currency { CHECK_AND_ASSERT_MES(bl_entry.tx_global_outs.size() == bl_entry.txs.size(), false, "tx_global_outs count " << bl_entry.tx_global_outs.size() << " count missmatch with bl_entry.txs count " << bl_entry.txs.size()); } - + if (bl_entry.coinbase_global_outs.size()) + { + std::shared_ptr tche_ptr(new currency::transaction_chain_entry()); + tche_ptr->m_global_output_indexes = bl_entry.coinbase_global_outs; + bdde.coinbase_ptr = tche_ptr; + } for (const auto& tx_blob : bl_entry.txs) { std::shared_ptr tche_ptr(new currency::transaction_chain_entry()); diff --git a/src/currency_protocol/currency_protocol_defs.h b/src/currency_protocol/currency_protocol_defs.h index 65e4a5b7..48f09e21 100644 --- a/src/currency_protocol/currency_protocol_defs.h +++ b/src/currency_protocol/currency_protocol_defs.h @@ -29,11 +29,13 @@ namespace currency { blobdata block; std::list txs; + std::vector coinbase_global_outs; std::vector > > tx_global_outs; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(block) KV_SERIALIZE(txs) + KV_SERIALIZE(coinbase_global_outs) KV_SERIALIZE(tx_global_outs) END_KV_SERIALIZE_MAP() }; diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index e65af49c..6238bed6 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -316,7 +316,7 @@ namespace currency } blockchain_storage::blocks_direct_container bs; - if (!m_core.get_blockchain_storage().find_blockchain_supplement(req.block_ids, bs, res.current_height, res.start_height, COMMAND_RPC_GET_BLOCKS_FAST_MAX_COUNT, req.minimum_height)) + if (!m_core.get_blockchain_storage().find_blockchain_supplement(req.block_ids, bs, res.current_height, res.start_height, COMMAND_RPC_GET_BLOCKS_FAST_MAX_COUNT, req.minimum_height, req.need_global_indexes)) { res.status = API_RETURN_CODE_FAIL; return false; @@ -328,6 +328,8 @@ namespace currency res.blocks.back().block = block_to_blob(b.first->bl); if (req.need_global_indexes) { + CHECK_AND_ASSERT_MES(b.third.get(), false, "Internal error on handling COMMAND_RPC_GET_BLOCKS_FAST: b.third is empty, ie coinbase info is not prepared"); + res.blocks.back().coinbase_global_outs = b.third->m_global_output_indexes; res.blocks.back().tx_global_outs.resize(b.second.size()); } size_t i = 0; diff --git a/src/wallet/core_default_rpc_proxy.h b/src/wallet/core_default_rpc_proxy.h index 0bba7db6..ba241e51 100644 --- a/src/wallet/core_default_rpc_proxy.h +++ b/src/wallet/core_default_rpc_proxy.h @@ -11,7 +11,11 @@ #include "core_rpc_proxy.h" #include "storages/http_abstract_invoke.h" -#define WALLET_RCP_CONNECTION_TIMEOUT 3000 +#ifdef NDEBUG +#define WALLET_RCP_CONNECTION_TIMEOUT 5000 +#else +#define WALLET_RCP_CONNECTION_TIMEOUT 100000 +#endif #define WALLET_RCP_COUNT_ATTEMNTS 3