wallet2: remove old blockchain size cache hack

This commit is contained in:
moneromooo-monero 2018-04-24 01:03:34 +01:00
parent dcfd299239
commit 5d3e70229e
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
2 changed files with 3 additions and 16 deletions

View file

@ -769,8 +769,6 @@ bool wallet2::init(std::string daemon_address, boost::optional<epee::net_utils::
m_daemon_address = std::move(daemon_address); m_daemon_address = std::move(daemon_address);
m_daemon_login = std::move(daemon_login); m_daemon_login = std::move(daemon_login);
// When switching from light wallet to full wallet, we need to reset the height we got from lw node. // When switching from light wallet to full wallet, we need to reset the height we got from lw node.
if(m_light_wallet)
m_local_bc_height = m_blockchain.size();
return m_http_client.set_server(get_daemon_address(), get_daemon_login(), ssl); return m_http_client.set_server(get_daemon_address(), get_daemon_login(), ssl);
} }
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
@ -1680,7 +1678,6 @@ void wallet2::process_new_blockchain_entry(const cryptonote::block& b, const cry
LOG_PRINT_L2( "Skipped block by timestamp, height: " << height << ", block time " << b.timestamp << ", account time " << m_account.get_createtime()); LOG_PRINT_L2( "Skipped block by timestamp, height: " << height << ", block time " << b.timestamp << ", account time " << m_account.get_createtime());
} }
m_blockchain.push_back(bl_id); m_blockchain.push_back(bl_id);
++m_local_bc_height;
if (0 != m_callback) if (0 != m_callback)
m_callback->on_new_block(height, b); m_callback->on_new_block(height, b);
@ -2258,7 +2255,6 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height,
while (missing_blocks-- > 0) while (missing_blocks-- > 0)
m_blockchain.push_back(crypto::null_hash); // maybe a bit suboptimal, but deque won't do huge reallocs like vector m_blockchain.push_back(crypto::null_hash); // maybe a bit suboptimal, but deque won't do huge reallocs like vector
m_blockchain.push_back(m_checkpoints.get_points().at(checkpoint_height)); m_blockchain.push_back(m_checkpoints.get_points().at(checkpoint_height));
m_local_bc_height = m_blockchain.size();
short_chain_history.clear(); short_chain_history.clear();
get_short_chain_history(short_chain_history); get_short_chain_history(short_chain_history);
} }
@ -2291,7 +2287,6 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height,
if (!(current_index % 1000)) if (!(current_index % 1000))
LOG_PRINT_L2( "Skipped block by height: " << current_index); LOG_PRINT_L2( "Skipped block by height: " << current_index);
m_blockchain.push_back(bl_id); m_blockchain.push_back(bl_id);
++m_local_bc_height;
if (0 != m_callback) if (0 != m_callback)
{ // FIXME: this isn't right, but simplewallet just logs that we got a block. { // FIXME: this isn't right, but simplewallet just logs that we got a block.
@ -2352,7 +2347,6 @@ void wallet2::refresh(uint64_t start_height, uint64_t & blocks_fetched, bool& re
// Update lw heights // Update lw heights
m_light_wallet_scanned_block_height = res.scanned_block_height; m_light_wallet_scanned_block_height = res.scanned_block_height;
m_light_wallet_blockchain_height = res.blockchain_height; m_light_wallet_blockchain_height = res.blockchain_height;
m_local_bc_height = res.blockchain_height;
// If new height - call new_block callback // If new height - call new_block callback
if(m_light_wallet_blockchain_height != prev_height) if(m_light_wallet_blockchain_height != prev_height)
{ {
@ -2607,7 +2601,6 @@ void wallet2::detach_blockchain(uint64_t height)
size_t blocks_detached = m_blockchain.size() - height; size_t blocks_detached = m_blockchain.size() - height;
m_blockchain.crop(height); m_blockchain.crop(height);
m_local_bc_height -= blocks_detached;
for (auto it = m_payments.begin(); it != m_payments.end(); ) for (auto it = m_payments.begin(); it != m_payments.end(); )
{ {
@ -2649,7 +2642,6 @@ bool wallet2::clear()
m_scanned_pool_txs[0].clear(); m_scanned_pool_txs[0].clear();
m_scanned_pool_txs[1].clear(); m_scanned_pool_txs[1].clear();
m_address_book.clear(); m_address_book.clear();
m_local_bc_height = 1;
m_subaddresses.clear(); m_subaddresses.clear();
m_subaddress_labels.clear(); m_subaddress_labels.clear();
return true; return true;
@ -4025,8 +4017,6 @@ void wallet2::load(const std::string& wallet_, const epee::wipeable_string& pass
if (get_num_subaddress_accounts() == 0) if (get_num_subaddress_accounts() == 0)
add_subaddress_account(tr("Primary account")); add_subaddress_account(tr("Primary account"));
m_local_bc_height = m_blockchain.size();
try try
{ {
find_and_save_rings(false); find_and_save_rings(false);
@ -4406,7 +4396,6 @@ void wallet2::rescan_blockchain(bool refresh)
crypto::hash genesis_hash = get_block_hash(genesis); crypto::hash genesis_hash = get_block_hash(genesis);
m_blockchain.push_back(genesis_hash); m_blockchain.push_back(genesis_hash);
add_subaddress_account(tr("Primary account")); add_subaddress_account(tr("Primary account"));
m_local_bc_height = 1;
if (refresh) if (refresh)
this->refresh(); this->refresh();
@ -4422,7 +4411,7 @@ bool wallet2::is_transfer_unlocked(uint64_t unlock_time, uint64_t block_height)
if(!is_tx_spendtime_unlocked(unlock_time, block_height)) if(!is_tx_spendtime_unlocked(unlock_time, block_height))
return false; return false;
if(block_height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE > m_local_bc_height) if(block_height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE > get_blockchain_current_height())
return false; return false;
return true; return true;
@ -4433,7 +4422,7 @@ bool wallet2::is_tx_spendtime_unlocked(uint64_t unlock_time, uint64_t block_heig
if(unlock_time < CRYPTONOTE_MAX_BLOCK_NUMBER) if(unlock_time < CRYPTONOTE_MAX_BLOCK_NUMBER)
{ {
//interpret as block index //interpret as block index
if(m_local_bc_height-1 + CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS >= unlock_time) if(get_blockchain_current_height()-1 + CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS >= unlock_time)
return true; return true;
else else
return false; return false;
@ -10001,7 +9990,6 @@ void wallet2::import_blockchain(const std::tuple<size_t, crypto::hash, std::vect
generate_genesis(genesis); generate_genesis(genesis);
crypto::hash genesis_hash = get_block_hash(genesis); crypto::hash genesis_hash = get_block_hash(genesis);
check_genesis(genesis_hash); check_genesis(genesis_hash);
m_local_bc_height = m_blockchain.size();
} }
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
std::vector<tools::wallet2::transfer_details> wallet2::export_outputs() const std::vector<tools::wallet2::transfer_details> wallet2::export_outputs() const

View file

@ -745,7 +745,7 @@ namespace tools
void get_unconfirmed_payments_out(std::list<std::pair<crypto::hash,wallet2::unconfirmed_transfer_details>>& unconfirmed_payments, const boost::optional<uint32_t>& subaddr_account = boost::none, const std::set<uint32_t>& subaddr_indices = {}) const; void get_unconfirmed_payments_out(std::list<std::pair<crypto::hash,wallet2::unconfirmed_transfer_details>>& unconfirmed_payments, const boost::optional<uint32_t>& subaddr_account = boost::none, const std::set<uint32_t>& subaddr_indices = {}) const;
void get_unconfirmed_payments(std::list<std::pair<crypto::hash,wallet2::pool_payment_details>>& unconfirmed_payments, const boost::optional<uint32_t>& subaddr_account = boost::none, const std::set<uint32_t>& subaddr_indices = {}) const; void get_unconfirmed_payments(std::list<std::pair<crypto::hash,wallet2::pool_payment_details>>& unconfirmed_payments, const boost::optional<uint32_t>& subaddr_account = boost::none, const std::set<uint32_t>& subaddr_indices = {}) const;
uint64_t get_blockchain_current_height() const { return m_local_bc_height; } uint64_t get_blockchain_current_height() const { return m_light_wallet_blockchain_height ? m_light_wallet_blockchain_height : m_blockchain.size(); }
void rescan_spent(); void rescan_spent();
void rescan_blockchain(bool refresh = true); void rescan_blockchain(bool refresh = true);
bool is_transfer_unlocked(const transfer_details& td) const; bool is_transfer_unlocked(const transfer_details& td) const;
@ -1200,7 +1200,6 @@ namespace tools
std::string m_keys_file; std::string m_keys_file;
epee::net_utils::http::http_simple_client m_http_client; epee::net_utils::http::http_simple_client m_http_client;
hashchain m_blockchain; hashchain m_blockchain;
std::atomic<uint64_t> m_local_bc_height; //temporary workaround
std::unordered_map<crypto::hash, unconfirmed_transfer_details> m_unconfirmed_txs; std::unordered_map<crypto::hash, unconfirmed_transfer_details> m_unconfirmed_txs;
std::unordered_map<crypto::hash, confirmed_transfer_details> m_confirmed_txs; std::unordered_map<crypto::hash, confirmed_transfer_details> m_confirmed_txs;
std::unordered_multimap<crypto::hash, pool_payment_details> m_unconfirmed_payments; std::unordered_multimap<crypto::hash, pool_payment_details> m_unconfirmed_payments;