mirror of
https://github.com/monero-project/monero.git
synced 2025-07-24 14:05:21 -04:00
Replace tabs with two spaces for consistency with rest of codebase
Remove trailing whitespace in same files.
This commit is contained in:
parent
042e85396c
commit
725acc7f17
26 changed files with 1321 additions and 1323 deletions
|
@ -65,9 +65,9 @@ set(cryptonote_core_private_headers
|
|||
hardfork.h)
|
||||
|
||||
if(PER_BLOCK_CHECKPOINT)
|
||||
set(Blocks "blocks")
|
||||
set(Blocks "blocks")
|
||||
else()
|
||||
set(Blocks "")
|
||||
set(Blocks "")
|
||||
endif()
|
||||
|
||||
bitmonero_private_headers(cryptonote_core
|
||||
|
@ -86,7 +86,7 @@ target_link_libraries(cryptonote_core
|
|||
${Boost_PROGRAM_OPTIONS_LIBRARY}
|
||||
${Boost_SERIALIZATION_LIBRARY}
|
||||
LINK_PRIVATE
|
||||
${Blocks}
|
||||
${Blocks}
|
||||
${Boost_FILESYSTEM_LIBRARY}
|
||||
${Boost_SYSTEM_LIBRARY}
|
||||
${Boost_THREAD_LIBRARY}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -99,8 +99,8 @@ static const uint64_t testnet_hard_fork_version_1_till = 624633;
|
|||
|
||||
//------------------------------------------------------------------
|
||||
Blockchain::Blockchain(tx_memory_pool& tx_pool) :
|
||||
m_db(), m_tx_pool(tx_pool), m_timestamps_and_difficulties_height(0), m_current_block_cumul_sz_limit(0), m_is_in_checkpoint_zone(false),
|
||||
m_is_blockchain_storing(false), m_enforce_dns_checkpoints(false), m_max_prepare_blocks_threads(4), m_db_blocks_per_sync(1), m_db_sync_mode(db_async), m_fast_sync(true)
|
||||
m_db(), m_tx_pool(tx_pool), m_timestamps_and_difficulties_height(0), m_current_block_cumul_sz_limit(0), m_is_in_checkpoint_zone(false),
|
||||
m_is_blockchain_storing(false), m_enforce_dns_checkpoints(false), m_max_prepare_blocks_threads(4), m_db_blocks_per_sync(1), m_db_sync_mode(db_async), m_fast_sync(true)
|
||||
{
|
||||
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||
}
|
||||
|
@ -2043,13 +2043,13 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
|
|||
}
|
||||
}
|
||||
|
||||
auto it = m_check_txin_table.find(tx_prefix_hash);
|
||||
if(it == m_check_txin_table.end())
|
||||
{
|
||||
m_check_txin_table.emplace(tx_prefix_hash, std::unordered_map<crypto::key_image, bool>());
|
||||
it = m_check_txin_table.find(tx_prefix_hash);
|
||||
assert(it != m_check_txin_table.end());
|
||||
}
|
||||
auto it = m_check_txin_table.find(tx_prefix_hash);
|
||||
if(it == m_check_txin_table.end())
|
||||
{
|
||||
m_check_txin_table.emplace(tx_prefix_hash, std::unordered_map<crypto::key_image, bool>());
|
||||
it = m_check_txin_table.find(tx_prefix_hash);
|
||||
assert(it != m_check_txin_table.end());
|
||||
}
|
||||
|
||||
uint64_t t_t1 = 0;
|
||||
std::vector<std::vector<crypto::public_key>> pubkeys(tx.vin.size());
|
||||
|
@ -2062,14 +2062,14 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
|
|||
boost::thread_group threadpool;
|
||||
|
||||
std::auto_ptr < boost::asio::io_service::work > work(new boost::asio::io_service::work(ioservice));
|
||||
if(threads > 1)
|
||||
{
|
||||
for (int i = 0; i < threads; i++)
|
||||
{
|
||||
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioservice));
|
||||
}
|
||||
}
|
||||
|
||||
if(threads > 1)
|
||||
{
|
||||
for (int i = 0; i < threads; i++)
|
||||
{
|
||||
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioservice));
|
||||
}
|
||||
}
|
||||
|
||||
#define KILL_IOSERVICE() \
|
||||
if(threads > 1) \
|
||||
{ \
|
||||
|
@ -2092,19 +2092,19 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
|
|||
CHECK_AND_ASSERT_MES(sig_index < tx.signatures.size(), false, "wrong transaction: not signature entry for input with index= " << sig_index);
|
||||
|
||||
#if defined(CACHE_VIN_RESULTS)
|
||||
auto itk = it->second.find(in_to_key.k_image);
|
||||
if(itk != it->second.end())
|
||||
{
|
||||
if(!itk->second)
|
||||
{
|
||||
LOG_PRINT_L1("Failed ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
|
||||
return false;
|
||||
}
|
||||
auto itk = it->second.find(in_to_key.k_image);
|
||||
if(itk != it->second.end())
|
||||
{
|
||||
if(!itk->second)
|
||||
{
|
||||
LOG_PRINT_L1("Failed ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
|
||||
return false;
|
||||
}
|
||||
|
||||
// txin has been verified already, skip
|
||||
sig_index++;
|
||||
continue;
|
||||
}
|
||||
// txin has been verified already, skip
|
||||
sig_index++;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
// make sure that output being spent matches up correctly with the
|
||||
|
@ -2112,15 +2112,15 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
|
|||
TIME_MEASURE_START(aa);
|
||||
if (!check_tx_input(in_to_key, tx_prefix_hash, tx.signatures[sig_index], pubkeys[sig_index], pmax_used_block_height))
|
||||
{
|
||||
it->second[in_to_key.k_image] = false;
|
||||
LOG_PRINT_L1("Failed to check ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
|
||||
if (pmax_used_block_height) // a default value of NULL is used when called from Blockchain::handle_block_to_main_chain()
|
||||
{
|
||||
LOG_PRINT_L1(" *pmax_used_block_height: " << *pmax_used_block_height);
|
||||
}
|
||||
it->second[in_to_key.k_image] = false;
|
||||
LOG_PRINT_L1("Failed to check ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
|
||||
if (pmax_used_block_height) // a default value of NULL is used when called from Blockchain::handle_block_to_main_chain()
|
||||
{
|
||||
LOG_PRINT_L1(" *pmax_used_block_height: " << *pmax_used_block_height);
|
||||
}
|
||||
|
||||
KILL_IOSERVICE();
|
||||
return false;
|
||||
KILL_IOSERVICE();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (threads > 1)
|
||||
|
@ -2131,21 +2131,21 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
|
|||
}
|
||||
else
|
||||
{
|
||||
check_ring_signature(tx_prefix_hash, in_to_key.k_image, pubkeys[sig_index], tx.signatures[sig_index], results[sig_index]);
|
||||
if (!results[sig_index])
|
||||
check_ring_signature(tx_prefix_hash, in_to_key.k_image, pubkeys[sig_index], tx.signatures[sig_index], results[sig_index]);
|
||||
if (!results[sig_index])
|
||||
{
|
||||
it->second[in_to_key.k_image] = false;
|
||||
LOG_PRINT_L1("Failed to check ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
|
||||
|
||||
if (pmax_used_block_height) // a default value of NULL is used when called from Blockchain::handle_block_to_main_chain()
|
||||
{
|
||||
it->second[in_to_key.k_image] = false;
|
||||
LOG_PRINT_L1("Failed to check ring signature for tx " << get_transaction_hash(tx) << " vin key with k_image: " << in_to_key.k_image << " sig_index: " << sig_index);
|
||||
|
||||
if (pmax_used_block_height) // a default value of NULL is used when called from Blockchain::handle_block_to_main_chain()
|
||||
{
|
||||
LOG_PRINT_L1("*pmax_used_block_height: " << *pmax_used_block_height);
|
||||
}
|
||||
|
||||
KILL_IOSERVICE();
|
||||
return false;
|
||||
LOG_PRINT_L1("*pmax_used_block_height: " << *pmax_used_block_height);
|
||||
}
|
||||
it->second[in_to_key.k_image] = true;
|
||||
|
||||
KILL_IOSERVICE();
|
||||
return false;
|
||||
}
|
||||
it->second[in_to_key.k_image] = true;
|
||||
}
|
||||
|
||||
sig_index++;
|
||||
|
@ -2155,21 +2155,21 @@ bool Blockchain::check_tx_inputs(const transaction& tx, uint64_t* pmax_used_bloc
|
|||
|
||||
if (threads > 1)
|
||||
{
|
||||
// save results to table, passed or otherwise
|
||||
bool failed = false;
|
||||
for (size_t i = 0; i < tx.vin.size(); i++)
|
||||
{
|
||||
const txin_to_key& in_to_key = boost::get<txin_to_key>(tx.vin[i]);
|
||||
it->second[in_to_key.k_image] = results[i];
|
||||
if(!failed && !results[i])
|
||||
failed = true;
|
||||
}
|
||||
// save results to table, passed or otherwise
|
||||
bool failed = false;
|
||||
for (size_t i = 0; i < tx.vin.size(); i++)
|
||||
{
|
||||
const txin_to_key& in_to_key = boost::get<txin_to_key>(tx.vin[i]);
|
||||
it->second[in_to_key.k_image] = results[i];
|
||||
if(!failed && !results[i])
|
||||
failed = true;
|
||||
}
|
||||
|
||||
if (failed)
|
||||
{
|
||||
LOG_PRINT_L1("Failed to check ring signatures!, t_loop: " << t_t1);
|
||||
return false;
|
||||
}
|
||||
if (failed)
|
||||
{
|
||||
LOG_PRINT_L1("Failed to check ring signatures!, t_loop: " << t_t1);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
LOG_PRINT_L1("t_loop: " << t_t1);
|
||||
return true;
|
||||
|
@ -3154,9 +3154,9 @@ bool Blockchain::prepare_handle_incoming_blocks(const std::list<block_complete_e
|
|||
TIME_MEASURE_FINISH(scantable);
|
||||
if (total_txs > 0)
|
||||
{
|
||||
m_fake_scan_time = scantable / total_txs;
|
||||
if(m_show_time_stats)
|
||||
LOG_PRINT_L0("Prepare scantable took: " << scantable << " ms");
|
||||
m_fake_scan_time = scantable / total_txs;
|
||||
if(m_show_time_stats)
|
||||
LOG_PRINT_L0("Prepare scantable took: " << scantable << " ms");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#pragma once
|
||||
|
@ -61,11 +61,11 @@ namespace cryptonote
|
|||
|
||||
enum blockchain_db_sync_mode
|
||||
{
|
||||
db_sync,
|
||||
db_async,
|
||||
db_nosync
|
||||
db_sync,
|
||||
db_async,
|
||||
db_nosync
|
||||
};
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
@ -153,10 +153,10 @@ namespace cryptonote
|
|||
|
||||
// user options, must be called before calling init()
|
||||
void set_user_options(uint64_t block_threads, uint64_t blocks_per_sync,
|
||||
blockchain_db_sync_mode sync_mode, bool fast_sync);
|
||||
blockchain_db_sync_mode sync_mode, bool fast_sync);
|
||||
|
||||
void set_show_time_stats(bool stats) { m_show_time_stats = stats; }
|
||||
|
||||
|
||||
HardFork::State get_hard_fork_state() const;
|
||||
uint8_t get_current_hard_fork_version() const { return m_hardfork->get_current_version(); }
|
||||
uint8_t get_ideal_hard_fork_version() const { return m_hardfork->get_ideal_version(); }
|
||||
|
@ -174,12 +174,12 @@ namespace cryptonote
|
|||
return *m_db;
|
||||
}
|
||||
|
||||
void output_scan_worker(const uint64_t amount,const std::vector<uint64_t> &offsets,
|
||||
std::vector<output_data_t> &outputs, std::unordered_map<crypto::hash,
|
||||
cryptonote::transaction> &txs) const;
|
||||
void output_scan_worker(const uint64_t amount,const std::vector<uint64_t> &offsets,
|
||||
std::vector<output_data_t> &outputs, std::unordered_map<crypto::hash,
|
||||
cryptonote::transaction> &txs) const;
|
||||
|
||||
void block_longhash_worker(const uint64_t height, const std::vector<block> &blocks,
|
||||
std::unordered_map<crypto::hash, crypto::hash> &map) const;
|
||||
void block_longhash_worker(const uint64_t height, const std::vector<block> &blocks,
|
||||
std::unordered_map<crypto::hash, crypto::hash> &map) const;
|
||||
private:
|
||||
typedef std::unordered_map<crypto::hash, size_t> blocks_by_id_index;
|
||||
typedef std::unordered_map<crypto::hash, transaction_chain_entry> transactions_container;
|
||||
|
@ -208,22 +208,22 @@ namespace cryptonote
|
|||
// SHA-3 hashes for each block and for fast pow checking
|
||||
std::vector<crypto::hash> m_blocks_hash_check;
|
||||
std::vector<crypto::hash> m_blocks_txs_check;
|
||||
|
||||
blockchain_db_sync_mode m_db_sync_mode;
|
||||
bool m_fast_sync;
|
||||
bool m_show_time_stats;
|
||||
uint64_t m_db_blocks_per_sync;
|
||||
uint64_t m_max_prepare_blocks_threads;
|
||||
|
||||
blockchain_db_sync_mode m_db_sync_mode;
|
||||
bool m_fast_sync;
|
||||
bool m_show_time_stats;
|
||||
uint64_t m_db_blocks_per_sync;
|
||||
uint64_t m_max_prepare_blocks_threads;
|
||||
uint64_t m_fake_pow_calc_time;
|
||||
uint64_t m_fake_scan_time;
|
||||
uint64_t m_sync_counter;
|
||||
std::vector<uint64_t> m_timestamps;
|
||||
std::vector<difficulty_type> m_difficulties;
|
||||
uint64_t m_timestamps_and_difficulties_height;
|
||||
uint64_t m_sync_counter;
|
||||
std::vector<uint64_t> m_timestamps;
|
||||
std::vector<difficulty_type> m_difficulties;
|
||||
uint64_t m_timestamps_and_difficulties_height;
|
||||
|
||||
boost::asio::io_service m_async_service;
|
||||
boost::thread_group m_async_pool;
|
||||
std::unique_ptr<boost::asio::io_service::work> m_async_work_idle;
|
||||
boost::asio::io_service m_async_service;
|
||||
boost::thread_group m_async_pool;
|
||||
std::unique_ptr<boost::asio::io_service::work> m_async_work_idle;
|
||||
|
||||
// all alternative chains
|
||||
blocks_ext_by_hash m_alternative_chains; // crypto::hash -> block_extended_info
|
||||
|
@ -273,6 +273,6 @@ namespace cryptonote
|
|||
bool check_for_double_spend(const transaction& tx, key_images_container& keys_this_block) const;
|
||||
void get_timestamp_and_difficulty(uint64_t ×tamp, difficulty_type &difficulty, const int offset) const;
|
||||
void check_ring_signature(const crypto::hash &tx_prefix_hash, const crypto::key_image &key_image,
|
||||
const std::vector<crypto::public_key> &pubkeys, const std::vector<crypto::signature> &sig, uint64_t &result);
|
||||
const std::vector<crypto::public_key> &pubkeys, const std::vector<crypto::signature> &sig, uint64_t &result);
|
||||
};
|
||||
} // namespace cryptonote
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -97,11 +97,11 @@ bool blockchain_storage::init(const std::string& config_folder, bool testnet)
|
|||
{
|
||||
|
||||
// checkpoints
|
||||
|
||||
|
||||
// mainchain
|
||||
for (size_t height=0; height < m_blocks.size(); ++height)
|
||||
for (size_t height=0; height < m_blocks.size(); ++height)
|
||||
{
|
||||
CHECK_AND_ASSERT_MES((!m_checkpoints.is_in_checkpoint_zone(height)) || m_checkpoints.check_block(height,get_block_hash(m_blocks[height].bl)),false,"checkpoint fail, blockchain.bin invalid");
|
||||
CHECK_AND_ASSERT_MES((!m_checkpoints.is_in_checkpoint_zone(height)) || m_checkpoints.check_block(height,get_block_hash(m_blocks[height].bl)),false,"checkpoint fail, blockchain.bin invalid");
|
||||
}
|
||||
|
||||
// check alt chains
|
||||
|
@ -110,7 +110,7 @@ bool blockchain_storage::init(const std::string& config_folder, bool testnet)
|
|||
// see issue #118
|
||||
BOOST_FOREACH(blocks_ext_by_hash::value_type& alt_block, m_alternative_chains)
|
||||
{
|
||||
CHECK_AND_ASSERT_MES(m_checkpoints.is_alternative_block_allowed(m_blocks.size()-1,alt_block.second.height),false,"stored alternative block not allowed, blockchain.bin invalid");
|
||||
CHECK_AND_ASSERT_MES(m_checkpoints.is_alternative_block_allowed(m_blocks.size()-1,alt_block.second.height),false,"stored alternative block not allowed, blockchain.bin invalid");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -1072,13 +1072,13 @@ bool blockchain_storage::get_random_outs_for_amounts(const COMMAND_RPC_GET_RANDO
|
|||
size_t try_count = 0;
|
||||
for(uint64_t j = 0; j != req.outs_count && try_count < up_index_limit;)
|
||||
{
|
||||
// triangular distribution over [a,b) with a=0, mode c=b=up_index_limit
|
||||
// triangular distribution over [a,b) with a=0, mode c=b=up_index_limit
|
||||
uint64_t r = crypto::rand<uint64_t>() % ((uint64_t)1 << 53);
|
||||
double frac = std::sqrt((double)r / ((uint64_t)1 << 53));
|
||||
size_t i = (size_t)(frac*up_index_limit);
|
||||
// just in case rounding up to 1 occurs after sqrt
|
||||
if (i == up_index_limit)
|
||||
--i;
|
||||
double frac = std::sqrt((double)r / ((uint64_t)1 << 53));
|
||||
size_t i = (size_t)(frac*up_index_limit);
|
||||
// just in case rounding up to 1 occurs after sqrt
|
||||
if (i == up_index_limit)
|
||||
--i;
|
||||
if(used.count(i))
|
||||
continue;
|
||||
bool added = add_out_to_get_random_outs(amount_outs, result_outs, amount, i);
|
||||
|
@ -1155,27 +1155,27 @@ uint64_t blockchain_storage::block_difficulty(size_t i) const
|
|||
//------------------------------------------------------------------
|
||||
double blockchain_storage::get_avg_block_size( size_t count) const
|
||||
{
|
||||
if (count > get_current_blockchain_height()) return 500;
|
||||
if (count > get_current_blockchain_height()) return 500;
|
||||
|
||||
double average = 0;
|
||||
_dbg1_c("net/blksize", "HEIGHT: " << get_current_blockchain_height());
|
||||
_dbg1_c("net/blksize", "BLOCK ID BY HEIGHT: " << get_block_id_by_height(get_current_blockchain_height()) );
|
||||
_dbg1_c("net/blksize", "BLOCK TAIL ID: " << get_tail_id() );
|
||||
std::vector<size_t> size_vector;
|
||||
double average = 0;
|
||||
_dbg1_c("net/blksize", "HEIGHT: " << get_current_blockchain_height());
|
||||
_dbg1_c("net/blksize", "BLOCK ID BY HEIGHT: " << get_block_id_by_height(get_current_blockchain_height()) );
|
||||
_dbg1_c("net/blksize", "BLOCK TAIL ID: " << get_tail_id() );
|
||||
std::vector<size_t> size_vector;
|
||||
|
||||
get_backward_blocks_sizes(get_current_blockchain_height() - count, size_vector, count);
|
||||
get_backward_blocks_sizes(get_current_blockchain_height() - count, size_vector, count);
|
||||
|
||||
std::vector<size_t>::iterator it;
|
||||
it = size_vector.begin();
|
||||
while (it != size_vector.end()) {
|
||||
average += *it;
|
||||
_dbg2_c("net/blksize", "VECTOR ELEMENT: " << (*it) );
|
||||
it++;
|
||||
}
|
||||
average = average / count;
|
||||
_dbg1_c("net/blksize", "VECTOR SIZE: " << size_vector.size() << " average=" << average);
|
||||
|
||||
return average;
|
||||
std::vector<size_t>::iterator it;
|
||||
it = size_vector.begin();
|
||||
while (it != size_vector.end()) {
|
||||
average += *it;
|
||||
_dbg2_c("net/blksize", "VECTOR ELEMENT: " << (*it) );
|
||||
it++;
|
||||
}
|
||||
average = average / count;
|
||||
_dbg1_c("net/blksize", "VECTOR SIZE: " << size_vector.size() << " average=" << average);
|
||||
|
||||
return average;
|
||||
}
|
||||
//------------------------------------------------------------------
|
||||
void blockchain_storage::print_blockchain(uint64_t start_index, uint64_t end_index) const
|
||||
|
@ -1248,7 +1248,7 @@ bool blockchain_storage::find_blockchain_supplement(const uint64_t req_start_blo
|
|||
{
|
||||
CRITICAL_REGION_LOCAL(m_blockchain_lock);
|
||||
if(req_start_block > 0) {
|
||||
start_height = req_start_block;
|
||||
start_height = req_start_block;
|
||||
} else {
|
||||
if(!find_blockchain_supplement(qblock_ids, start_height))
|
||||
return false;
|
||||
|
@ -1739,9 +1739,9 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt
|
|||
bei.block_cumulative_size = cumulative_block_size;
|
||||
bei.cumulative_difficulty = current_diffic;
|
||||
|
||||
// In the "tail" state when the minimum subsidy (implemented in get_block_reward) is in effect, the number of
|
||||
// coins will eventually exceed MONEY_SUPPLY and overflow a uint64. To prevent overflow, cap already_generated_coins
|
||||
// at MONEY_SUPPLY. already_generated_coins is only used to compute the block subsidy and MONEY_SUPPLY yields a
|
||||
// In the "tail" state when the minimum subsidy (implemented in get_block_reward) is in effect, the number of
|
||||
// coins will eventually exceed MONEY_SUPPLY and overflow a uint64. To prevent overflow, cap already_generated_coins
|
||||
// at MONEY_SUPPLY. already_generated_coins is only used to compute the block subsidy and MONEY_SUPPLY yields a
|
||||
// subsidy of 0 under the base formula and therefore the minimum subsidy >0 in the tail state.
|
||||
|
||||
bei.already_generated_coins = base_reward < (MONEY_SUPPLY-already_generated_coins) ? already_generated_coins + base_reward : MONEY_SUPPLY;
|
||||
|
@ -1770,7 +1770,7 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt
|
|||
<< "), coinbase_blob_size: " << coinbase_blob_size << ", cumulative size: " << cumulative_block_size
|
||||
<< ", " << block_processing_time << "("<< target_calculating_time << "/" << longhash_calculating_time << ")ms");
|
||||
|
||||
epee::net_utils::data_logger::get_instance().add_data("blockchain_processing_time", block_processing_time);
|
||||
epee::net_utils::data_logger::get_instance().add_data("blockchain_processing_time", block_processing_time);
|
||||
|
||||
bvc.m_added_to_main_chain = true;
|
||||
/*if(!m_orphanes_reorganize_in_work)
|
||||
|
@ -1837,13 +1837,13 @@ void blockchain_storage::check_against_checkpoints(const checkpoints& points, bo
|
|||
// if asked to enforce checkpoints, roll back to a couple of blocks before the checkpoint
|
||||
if (enforce)
|
||||
{
|
||||
LOG_ERROR("Local blockchain failed to pass a checkpoint, rolling back!");
|
||||
std::list<block> empty;
|
||||
rollback_blockchain_switching(empty, pt.first - 2);
|
||||
LOG_ERROR("Local blockchain failed to pass a checkpoint, rolling back!");
|
||||
std::list<block> empty;
|
||||
rollback_blockchain_switching(empty, pt.first - 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("WARNING: local blockchain failed to pass a MoneroPulse checkpoint, and you could be on a fork. You should either sync up from scratch, OR download a fresh blockchain bootstrap, OR enable checkpoint enforcing with the --enforce-dns-checkpointing command-line option");
|
||||
LOG_ERROR("WARNING: local blockchain failed to pass a MoneroPulse checkpoint, and you could be on a fork. You should either sync up from scratch, OR download a fresh blockchain bootstrap, OR enable checkpoint enforcing with the --enforce-dns-checkpointing command-line option");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include "checkpoints_create.h"
|
||||
|
@ -46,11 +46,11 @@ namespace
|
|||
bool ok = false;
|
||||
for (const auto& record_in_b : b)
|
||||
{
|
||||
if (record_in_a == record_in_b)
|
||||
{
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
if (record_in_a == record_in_b)
|
||||
{
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!ok) return false;
|
||||
}
|
||||
|
@ -62,25 +62,25 @@ namespace
|
|||
namespace cryptonote
|
||||
{
|
||||
|
||||
struct t_hashline
|
||||
struct t_hashline
|
||||
{
|
||||
uint64_t height;
|
||||
std::string hash;
|
||||
BEGIN_KV_SERIALIZE_MAP()
|
||||
KV_SERIALIZE(height)
|
||||
KV_SERIALIZE(hash)
|
||||
END_KV_SERIALIZE_MAP()
|
||||
uint64_t height;
|
||||
std::string hash;
|
||||
BEGIN_KV_SERIALIZE_MAP()
|
||||
KV_SERIALIZE(height)
|
||||
KV_SERIALIZE(hash)
|
||||
END_KV_SERIALIZE_MAP()
|
||||
};
|
||||
|
||||
struct t_hash_json {
|
||||
std::vector<t_hashline> hashlines;
|
||||
BEGIN_KV_SERIALIZE_MAP()
|
||||
KV_SERIALIZE(hashlines)
|
||||
END_KV_SERIALIZE_MAP()
|
||||
std::vector<t_hashline> hashlines;
|
||||
BEGIN_KV_SERIALIZE_MAP()
|
||||
KV_SERIALIZE(hashlines)
|
||||
END_KV_SERIALIZE_MAP()
|
||||
};
|
||||
|
||||
bool create_checkpoints(cryptonote::checkpoints& checkpoints)
|
||||
{
|
||||
{
|
||||
ADD_CHECKPOINT(1, "771fbcd656ec1464d3a02ead5e18644030007a0fc664c0a964d30922821a8148");
|
||||
ADD_CHECKPOINT(10, "c0e3b387e47042f72d8ccdca88071ff96bff1ac7cde09ae113dbb7ad3fe92381");
|
||||
ADD_CHECKPOINT(100, "ac3e11ca545e57c49fca2b4e8c48c03c23be047c43e471e1394528b1f9f80b2d");
|
||||
|
@ -126,11 +126,11 @@ bool load_checkpoints_from_json(cryptonote::checkpoints& checkpoints, std::strin
|
|||
uint64_t height;
|
||||
height = it->height;
|
||||
if (height <= prev_max_height) {
|
||||
LOG_PRINT_L1("ignoring checkpoint height " << height);
|
||||
LOG_PRINT_L1("ignoring checkpoint height " << height);
|
||||
} else {
|
||||
std::string blockhash = it->hash;
|
||||
LOG_PRINT_L1("Adding checkpoint height " << height << ", hash=" << blockhash);
|
||||
ADD_CHECKPOINT(height, blockhash);
|
||||
std::string blockhash = it->hash;
|
||||
LOG_PRINT_L1("Adding checkpoint height " << height << ", hash=" << blockhash);
|
||||
ADD_CHECKPOINT(height, blockhash);
|
||||
}
|
||||
++it;
|
||||
}
|
||||
|
@ -142,15 +142,15 @@ bool load_checkpoints_from_dns(cryptonote::checkpoints& checkpoints, bool testne
|
|||
{
|
||||
// All four MoneroPulse domains have DNSSEC on and valid
|
||||
static const std::vector<std::string> dns_urls = { "checkpoints.moneropulse.se"
|
||||
, "checkpoints.moneropulse.org"
|
||||
, "checkpoints.moneropulse.net"
|
||||
, "checkpoints.moneropulse.co"
|
||||
, "checkpoints.moneropulse.org"
|
||||
, "checkpoints.moneropulse.net"
|
||||
, "checkpoints.moneropulse.co"
|
||||
};
|
||||
|
||||
static const std::vector<std::string> testnet_dns_urls = { "testpoints.moneropulse.se"
|
||||
, "testpoints.moneropulse.org"
|
||||
, "testpoints.moneropulse.net"
|
||||
, "testpoints.moneropulse.co"
|
||||
, "testpoints.moneropulse.org"
|
||||
, "testpoints.moneropulse.net"
|
||||
, "testpoints.moneropulse.co"
|
||||
};
|
||||
|
||||
std::vector<std::vector<std::string> > records;
|
||||
|
@ -220,8 +220,8 @@ bool load_checkpoints_from_dns(cryptonote::checkpoints& checkpoints, bool testne
|
|||
{
|
||||
if (dns_records_match(records[i], records[j]))
|
||||
{
|
||||
good_records_index = i;
|
||||
break;
|
||||
good_records_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (good_records_index >= 0) break;
|
||||
|
@ -246,7 +246,7 @@ bool load_checkpoints_from_dns(cryptonote::checkpoints& checkpoints, bool testne
|
|||
std::stringstream ss(record.substr(0, pos));
|
||||
if (!(ss >> height))
|
||||
{
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
|
||||
// parse the second part as crypto::hash,
|
||||
|
@ -254,7 +254,7 @@ bool load_checkpoints_from_dns(cryptonote::checkpoints& checkpoints, bool testne
|
|||
std::string hashStr = record.substr(pos + 1);
|
||||
if (!epee::string_tools::parse_tpod_from_hex_string(hashStr, hash))
|
||||
{
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
|
||||
ADD_CHECKPOINT(height, hashStr);
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include "include_base_utils.h"
|
||||
|
@ -106,8 +106,8 @@ namespace cryptonote {
|
|||
assert(current_block_size < std::numeric_limits<uint32_t>::max());
|
||||
|
||||
uint64_t product_hi;
|
||||
// BUGFIX: 32-bit saturation bug (e.g. ARM7), the result was being
|
||||
// treated as 32-bit by default.
|
||||
// BUGFIX: 32-bit saturation bug (e.g. ARM7), the result was being
|
||||
// treated as 32-bit by default.
|
||||
uint64_t multiplicand = 2 * median_size - current_block_size;
|
||||
multiplicand *= current_block_size;
|
||||
uint64_t product_lo = mul128(base_reward, multiplicand, &product_hi);
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include "include_base_utils.h"
|
||||
|
@ -63,7 +63,7 @@ namespace cryptonote
|
|||
m_blockchain_storage(&m_mempool),
|
||||
#endif
|
||||
m_miner(this),
|
||||
m_miner_address(boost::value_initialized<account_public_address>()),
|
||||
m_miner_address(boost::value_initialized<account_public_address>()),
|
||||
m_starter_message_showed(false),
|
||||
m_target_blockchain_height(0),
|
||||
m_checkpoints_path(""),
|
||||
|
@ -176,10 +176,10 @@ namespace cryptonote
|
|||
|
||||
set_enforce_dns_checkpoints(command_line::get_arg(vm, command_line::arg_dns_checkpoints));
|
||||
test_drop_download_height(command_line::get_arg(vm, command_line::arg_test_drop_download_height));
|
||||
|
||||
|
||||
if (command_line::get_arg(vm, command_line::arg_test_drop_download) == true)
|
||||
test_drop_download();
|
||||
|
||||
test_drop_download();
|
||||
|
||||
return true;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
|
@ -331,7 +331,7 @@ namespace cryptonote
|
|||
db->set_auto_remove_logs(auto_remove_logs);
|
||||
db->open(filename, db_flags);
|
||||
if(!db->m_open)
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
catch (const DB_ERROR& e)
|
||||
{
|
||||
|
@ -374,12 +374,12 @@ namespace cryptonote
|
|||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::deinit()
|
||||
{
|
||||
m_miner.stop();
|
||||
m_mempool.deinit();
|
||||
if (!m_fast_exit)
|
||||
{
|
||||
m_blockchain_storage.deinit();
|
||||
}
|
||||
m_miner.stop();
|
||||
m_mempool.deinit();
|
||||
if (!m_fast_exit)
|
||||
{
|
||||
m_blockchain_storage.deinit();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
|
@ -395,28 +395,28 @@ namespace cryptonote
|
|||
//-----------------------------------------------------------------------------------------------
|
||||
void core::test_drop_download()
|
||||
{
|
||||
m_test_drop_download = false;
|
||||
m_test_drop_download = false;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
void core::test_drop_download_height(uint64_t height)
|
||||
{
|
||||
m_test_drop_download_height = height;
|
||||
m_test_drop_download_height = height;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::get_test_drop_download() const
|
||||
{
|
||||
return m_test_drop_download;
|
||||
return m_test_drop_download;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::get_test_drop_download_height() const
|
||||
{
|
||||
if (m_test_drop_download_height == 0)
|
||||
return true;
|
||||
|
||||
if (get_blockchain_storage().get_current_blockchain_height() <= m_test_drop_download_height)
|
||||
return true;
|
||||
if (m_test_drop_download_height == 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
if (get_blockchain_storage().get_current_blockchain_height() <= m_test_drop_download_height)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::handle_incoming_tx(const blobdata& tx_blob, tx_verification_context& tvc, bool keeped_by_block, bool relayed)
|
||||
|
@ -852,14 +852,14 @@ namespace cryptonote
|
|||
{
|
||||
if(!m_starter_message_showed)
|
||||
{
|
||||
LOG_PRINT_L0(ENDL << "**********************************************************************" << ENDL
|
||||
<< "The daemon will start synchronizing with the network. It may take up to several hours." << ENDL
|
||||
LOG_PRINT_L0(ENDL << "**********************************************************************" << ENDL
|
||||
<< "The daemon will start synchronizing with the network. It may take up to several hours." << ENDL
|
||||
<< ENDL
|
||||
<< "You can set the level of process detailization* through \"set_log <level>\" command*, where <level> is between 0 (no details) and 4 (very verbose)." << ENDL
|
||||
<< ENDL
|
||||
<< "Use \"help\" command to see the list of available commands." << ENDL
|
||||
<< ENDL
|
||||
<< "Note: in case you need to interrupt the process, use \"exit\" command. Otherwise, the current progress won't be saved." << ENDL
|
||||
<< "Note: in case you need to interrupt the process, use \"exit\" command. Otherwise, the current progress won't be saved." << ENDL
|
||||
<< "**********************************************************************");
|
||||
m_starter_message_showed = true;
|
||||
}
|
||||
|
@ -915,6 +915,6 @@ namespace cryptonote
|
|||
{
|
||||
raise(SIGTERM);
|
||||
}
|
||||
|
||||
|
||||
std::atomic<bool> core::m_fast_exit(false);
|
||||
}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#pragma once
|
||||
|
@ -68,7 +68,7 @@ namespace cryptonote
|
|||
bool handle_incoming_block(const blobdata& block_blob, block_verification_context& bvc, bool update_miner_blocktemplate = true);
|
||||
bool prepare_handle_incoming_blocks(const std::list<block_complete_entry> &blocks);
|
||||
bool cleanup_handle_incoming_blocks(bool force_sync = false);
|
||||
|
||||
|
||||
bool check_incoming_block_size(const blobdata& block_blob) const;
|
||||
i_cryptonote_protocol* get_protocol(){return m_pprotocol;}
|
||||
|
||||
|
@ -175,7 +175,7 @@ namespace cryptonote
|
|||
|
||||
static std::atomic<bool> m_fast_exit;
|
||||
bool m_test_drop_download = true;
|
||||
uint64_t m_test_drop_download_height = 0;
|
||||
uint64_t m_test_drop_download_height = 0;
|
||||
|
||||
tx_memory_pool m_mempool;
|
||||
#if BLOCKCHAIN_DB == DB_LMDB
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -53,40 +53,40 @@ namespace cryptonote {
|
|||
#else
|
||||
|
||||
static inline void mul(uint64_t a, uint64_t b, uint64_t &low, uint64_t &high) {
|
||||
// __int128 isn't part of the standard, so the previous function wasn't portable. mul128() in Windows is fine,
|
||||
// but this portable function should be used elsewhere. Credit for this function goes to latexi95.
|
||||
// __int128 isn't part of the standard, so the previous function wasn't portable. mul128() in Windows is fine,
|
||||
// but this portable function should be used elsewhere. Credit for this function goes to latexi95.
|
||||
|
||||
uint64_t aLow = a & 0xFFFFFFFF;
|
||||
uint64_t aHigh = a >> 32;
|
||||
uint64_t bLow = b & 0xFFFFFFFF;
|
||||
uint64_t bHigh = b >> 32;
|
||||
|
||||
uint64_t res = aLow * bLow;
|
||||
uint64_t lowRes1 = res & 0xFFFFFFFF;
|
||||
uint64_t carry = res >> 32;
|
||||
|
||||
res = aHigh * bLow + carry;
|
||||
uint64_t highResHigh1 = res >> 32;
|
||||
uint64_t highResLow1 = res & 0xFFFFFFFF;
|
||||
|
||||
res = aLow * bHigh;
|
||||
uint64_t lowRes2 = res & 0xFFFFFFFF;
|
||||
carry = res >> 32;
|
||||
|
||||
res = aHigh * bHigh + carry;
|
||||
uint64_t highResHigh2 = res >> 32;
|
||||
uint64_t highResLow2 = res & 0xFFFFFFFF;
|
||||
|
||||
//Addition
|
||||
|
||||
uint64_t r = highResLow1 + lowRes2;
|
||||
carry = r >> 32;
|
||||
low = (r << 32) | lowRes1;
|
||||
r = highResHigh1 + highResLow2 + carry;
|
||||
uint64_t d3 = r & 0xFFFFFFFF;
|
||||
carry = r >> 32;
|
||||
r = highResHigh2 + carry;
|
||||
high = d3 | (r << 32);
|
||||
uint64_t aLow = a & 0xFFFFFFFF;
|
||||
uint64_t aHigh = a >> 32;
|
||||
uint64_t bLow = b & 0xFFFFFFFF;
|
||||
uint64_t bHigh = b >> 32;
|
||||
|
||||
uint64_t res = aLow * bLow;
|
||||
uint64_t lowRes1 = res & 0xFFFFFFFF;
|
||||
uint64_t carry = res >> 32;
|
||||
|
||||
res = aHigh * bLow + carry;
|
||||
uint64_t highResHigh1 = res >> 32;
|
||||
uint64_t highResLow1 = res & 0xFFFFFFFF;
|
||||
|
||||
res = aLow * bHigh;
|
||||
uint64_t lowRes2 = res & 0xFFFFFFFF;
|
||||
carry = res >> 32;
|
||||
|
||||
res = aHigh * bHigh + carry;
|
||||
uint64_t highResHigh2 = res >> 32;
|
||||
uint64_t highResLow2 = res & 0xFFFFFFFF;
|
||||
|
||||
//Addition
|
||||
|
||||
uint64_t r = highResLow1 + lowRes2;
|
||||
carry = r >> 32;
|
||||
low = (r << 32) | lowRes1;
|
||||
r = highResHigh1 + highResLow2 + carry;
|
||||
uint64_t d3 = r & 0xFFFFFFFF;
|
||||
carry = r >> 32;
|
||||
r = highResHigh2 + carry;
|
||||
high = d3 | (r << 32);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include <sstream>
|
||||
|
@ -68,9 +68,9 @@ namespace cryptonote
|
|||
m_thread_index(0),
|
||||
m_phandler(phandler),
|
||||
m_height(0),
|
||||
m_pausers_count(0),
|
||||
m_pausers_count(0),
|
||||
m_threads_total(0),
|
||||
m_starter_nonce(0),
|
||||
m_starter_nonce(0),
|
||||
m_last_hr_merge_time(0),
|
||||
m_hashes(0),
|
||||
m_do_print_hashrate(false),
|
||||
|
@ -109,7 +109,7 @@ namespace cryptonote
|
|||
block bl = AUTO_VAL_INIT(bl);
|
||||
difficulty_type di = AUTO_VAL_INIT(di);
|
||||
uint64_t height = AUTO_VAL_INIT(height);
|
||||
cryptonote::blobdata extra_nonce;
|
||||
cryptonote::blobdata extra_nonce;
|
||||
if(m_extra_messages.size() && m_config.current_extra_message_index < m_extra_messages.size())
|
||||
{
|
||||
extra_nonce = m_extra_messages[m_config.current_extra_message_index];
|
||||
|
@ -135,7 +135,7 @@ namespace cryptonote
|
|||
merge_hr();
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------------
|
||||
|
@ -227,7 +227,7 @@ namespace cryptonote
|
|||
uint32_t miner::get_threads_count() const {
|
||||
return m_threads_total;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------------------------
|
||||
bool miner::start(const account_public_address& adr, size_t threads_count, const boost::thread::attributes& attrs)
|
||||
{
|
||||
m_mine_address = adr;
|
||||
|
@ -346,7 +346,7 @@ namespace cryptonote
|
|||
difficulty_type local_diff = 0;
|
||||
uint32_t local_template_ver = 0;
|
||||
block b;
|
||||
slow_hash_allocate_state();
|
||||
slow_hash_allocate_state();
|
||||
while(!m_stop)
|
||||
{
|
||||
if(m_pausers_count)//anti split workaround
|
||||
|
@ -357,7 +357,6 @@ namespace cryptonote
|
|||
|
||||
if(local_template_ver != m_template_no)
|
||||
{
|
||||
|
||||
CRITICAL_REGION_BEGIN(m_template_lock);
|
||||
b = m_template;
|
||||
local_diff = m_diffic;
|
||||
|
@ -395,7 +394,7 @@ namespace cryptonote
|
|||
nonce+=m_threads_total;
|
||||
++m_hashes;
|
||||
}
|
||||
slow_hash_free_state();
|
||||
slow_hash_free_state();
|
||||
LOG_PRINT_L0("Miner thread stopped ["<< th_local_index << "]");
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -228,8 +228,8 @@ namespace cryptonote
|
|||
bool tx_memory_pool::remove_transaction_keyimages(const transaction& tx)
|
||||
{
|
||||
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
||||
// ND: Speedup
|
||||
// 1. Move transaction hash calcuation outside of loop. ._.
|
||||
// ND: Speedup
|
||||
// 1. Move transaction hash calcuation outside of loop. ._.
|
||||
crypto::hash actual_hash = get_transaction_hash(tx);
|
||||
BOOST_FOREACH(const txin_v& vi, tx.vin)
|
||||
{
|
||||
|
@ -299,7 +299,7 @@ namespace cryptonote
|
|||
{
|
||||
uint64_t tx_age = time(nullptr) - it->second.receive_time;
|
||||
|
||||
if((tx_age > CRYPTONOTE_MEMPOOL_TX_LIVETIME && !it->second.kept_by_block) ||
|
||||
if((tx_age > CRYPTONOTE_MEMPOOL_TX_LIVETIME && !it->second.kept_by_block) ||
|
||||
(tx_age > CRYPTONOTE_MEMPOOL_TX_FROM_ALT_BLOCK_LIVETIME && it->second.kept_by_block) )
|
||||
{
|
||||
LOG_PRINT_L1("Tx " << it->first << " removed from tx pool due to outdated, age: " << tx_age );
|
||||
|
@ -574,7 +574,7 @@ namespace cryptonote
|
|||
|
||||
// If adding this tx will make the block size
|
||||
// greater than CRYPTONOTE_GETBLOCKTEMPLATE_MAX
|
||||
// _BLOCK_SIZE bytes, reject the tx; this will
|
||||
// _BLOCK_SIZE bytes, reject the tx; this will
|
||||
// keep block sizes from becoming too unwieldly
|
||||
// to propagate at 60s block times.
|
||||
if ( (total_size + tx_it->second.blob_size) > CRYPTONOTE_GETBLOCKTEMPLATE_MAX_BLOCK_SIZE )
|
||||
|
@ -586,7 +586,7 @@ namespace cryptonote
|
|||
// If we've exceeded the penalty free size,
|
||||
// stop including more tx
|
||||
if (total_size > median_size)
|
||||
break;
|
||||
break;
|
||||
|
||||
// Skip transactions that are not ready to be
|
||||
// included into the blockchain or that are
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
// Copyright (c) 2014-2015, The Monero Project
|
||||
//
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other
|
||||
// materials provided with the distribution.
|
||||
//
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||||
// used to endorse or promote products derived from this software without specific
|
||||
// prior written permission.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
|
@ -25,7 +25,7 @@
|
|||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//
|
||||
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
||||
|
||||
#pragma once
|
||||
|
@ -139,7 +139,7 @@ namespace cryptonote
|
|||
};
|
||||
|
||||
private:
|
||||
bool remove_stuck_transactions();
|
||||
bool remove_stuck_transactions();
|
||||
bool have_tx_keyimg_as_spent(const crypto::key_image& key_im) const;
|
||||
bool have_tx_keyimges_as_spent(const transaction& tx) const;
|
||||
bool remove_transaction_keyimages(const transaction& tx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue