Merge pull request #1610

b70ab128 rpc: fix orphan_status when getting blocks (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2017-01-22 11:48:39 -05:00
commit a3de797e57
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
5 changed files with 16 additions and 9 deletions

View File

@ -636,7 +636,7 @@ crypto::hash Blockchain::get_block_id_by_height(uint64_t height) const
return null_hash; return null_hash;
} }
//------------------------------------------------------------------ //------------------------------------------------------------------
bool Blockchain::get_block_by_hash(const crypto::hash &h, block &blk) const bool Blockchain::get_block_by_hash(const crypto::hash &h, block &blk, bool *orphan) const
{ {
LOG_PRINT_L3("Blockchain::" << __func__); LOG_PRINT_L3("Blockchain::" << __func__);
CRITICAL_REGION_LOCAL(m_blockchain_lock); CRITICAL_REGION_LOCAL(m_blockchain_lock);
@ -645,6 +645,8 @@ bool Blockchain::get_block_by_hash(const crypto::hash &h, block &blk) const
try try
{ {
blk = m_db->get_block(h); blk = m_db->get_block(h);
if (orphan)
*orphan = false;
return true; return true;
} }
// try to find block in alternative chain // try to find block in alternative chain
@ -654,6 +656,8 @@ bool Blockchain::get_block_by_hash(const crypto::hash &h, block &blk) const
if (m_alternative_chains.end() != it_alt) if (m_alternative_chains.end() != it_alt)
{ {
blk = it_alt->second.bl; blk = it_alt->second.bl;
if (orphan)
*orphan = true;
return true; return true;
} }
} }

View File

@ -197,10 +197,11 @@ namespace cryptonote
* *
* @param h the hash to look for * @param h the hash to look for
* @param blk return-by-reference variable to put result block in * @param blk return-by-reference variable to put result block in
* @param orphan if non-NULL, will be set to true if not in the main chain, false otherwise
* *
* @return true if the block was found, else false * @return true if the block was found, else false
*/ */
bool get_block_by_hash(const crypto::hash &h, block &blk) const; bool get_block_by_hash(const crypto::hash &h, block &blk, bool *orphan = NULL) const;
/** /**
* @brief get all block hashes (main chain, alt chains, and invalid blocks) * @brief get all block hashes (main chain, alt chains, and invalid blocks)

View File

@ -989,9 +989,9 @@ namespace cryptonote
return m_blockchain_storage.get_block_id_by_height(height); return m_blockchain_storage.get_block_id_by_height(height);
} }
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
bool core::get_block_by_hash(const crypto::hash &h, block &blk) const bool core::get_block_by_hash(const crypto::hash &h, block &blk, bool *orphan) const
{ {
return m_blockchain_storage.get_block_by_hash(h, blk); return m_blockchain_storage.get_block_by_hash(h, blk, orphan);
} }
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
std::string core::print_pool(bool short_format) const std::string core::print_pool(bool short_format) const

View File

@ -330,7 +330,7 @@ namespace cryptonote
* *
* @note see Blockchain::get_block_by_hash * @note see Blockchain::get_block_by_hash
*/ */
bool get_block_by_hash(const crypto::hash &h, block &blk) const; bool get_block_by_hash(const crypto::hash &h, block &blk, bool *orphan = NULL) const;
/** /**
* @copydoc Blockchain::get_alternative_blocks * @copydoc Blockchain::get_alternative_blocks

View File

@ -985,7 +985,8 @@ namespace cryptonote
return false; return false;
} }
block blk; block blk;
bool have_block = m_core.get_block_by_hash(block_hash, blk); bool orphan = false;
bool have_block = m_core.get_block_by_hash(block_hash, blk, &orphan);
if (!have_block) if (!have_block)
{ {
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
@ -999,7 +1000,7 @@ namespace cryptonote
return false; return false;
} }
uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height; uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height;
bool response_filled = fill_block_header_response(blk, false, block_height, block_hash, res.block_header); bool response_filled = fill_block_header_response(blk, orphan, block_height, block_hash, res.block_header);
if (!response_filled) if (!response_filled)
{ {
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
@ -1123,7 +1124,8 @@ namespace cryptonote
block_hash = m_core.get_block_id_by_height(req.height); block_hash = m_core.get_block_id_by_height(req.height);
} }
block blk; block blk;
bool have_block = m_core.get_block_by_hash(block_hash, blk); bool orphan = false;
bool have_block = m_core.get_block_by_hash(block_hash, blk, &orphan);
if (!have_block) if (!have_block)
{ {
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
@ -1137,7 +1139,7 @@ namespace cryptonote
return false; return false;
} }
uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height; uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height;
bool response_filled = fill_block_header_response(blk, false, block_height, block_hash, res.block_header); bool response_filled = fill_block_header_response(blk, orphan, block_height, block_hash, res.block_header);
if (!response_filled) if (!response_filled)
{ {
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;