forked from lthn/blockchain
DIFFICULTY_STARTER was split into DIFFICULTY_POW_STARTER and DIFFICULTY_POS_STARTER
This commit is contained in:
parent
0b2fef7642
commit
4f703fe8f8
8 changed files with 25 additions and 17 deletions
|
|
@ -42,6 +42,7 @@
|
|||
#include "misc_language.h"
|
||||
#include "block_flags.h"
|
||||
#include "etc_custom_serialization.h"
|
||||
#include "difficulty.h"
|
||||
|
||||
namespace currency
|
||||
{
|
||||
|
|
@ -56,6 +57,10 @@ namespace currency
|
|||
const static crypto::hash gdefault_genesis = epee::string_tools::hex_to_pod<crypto::hash>("CC608F59F8080E2FBFE3C8C80EB6E6A953D47CF2D6AEBD345BADA3A1CAB99852");
|
||||
const static crypto::hash ffff_hash = epee::string_tools::hex_to_pod<crypto::hash>("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||
|
||||
const static wide_difficulty_type global_difficulty_pow_starter = DIFFICULTY_POW_STARTER;
|
||||
const static wide_difficulty_type global_difficulty_pos_starter = DIFFICULTY_POS_STARTER;
|
||||
const static uint64_t global_difficulty_pos_target = DIFFICULTY_POS_TARGET;
|
||||
const static uint64_t global_difficulty_pow_target = DIFFICULTY_POW_TARGET;
|
||||
|
||||
typedef std::string payment_id_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
#define CURRENCY_MINER_TX_MAX_OUTS CURRENCY_TX_MAX_ALLOWED_OUTS
|
||||
#define CURRENCY_TX_OUTS_RND_SPLIT_DIGITS_TO_KEEP 3
|
||||
|
||||
#define DIFFICULTY_STARTER 1
|
||||
#define DIFFICULTY_POW_STARTER 1
|
||||
#define DIFFICULTY_POS_TARGET 120 // seconds
|
||||
#define DIFFICULTY_POW_TARGET 120 // seconds
|
||||
#define DIFFICULTY_TOTAL_TARGET ((DIFFICULTY_POS_TARGET + DIFFICULTY_POW_TARGET) / 4)
|
||||
|
|
@ -110,6 +110,7 @@
|
|||
#define STRATUM_DEFAULT_PORT 11777
|
||||
#define P2P_NETWORK_ID_TESTNET_FLAG 0
|
||||
#define P2P_MAINTAINERS_PUB_KEY "8f138bb73f6d663a3746a542770781a09579a7b84cb4125249e95530824ee607"
|
||||
#define DIFFICULTY_POS_STARTER 1
|
||||
#else
|
||||
#define P2P_DEFAULT_PORT (11112 + CURRENCY_FORMATION_VERSION)
|
||||
#define RPC_DEFAULT_PORT 12111
|
||||
|
|
@ -117,6 +118,7 @@
|
|||
#define STRARUM_DEFAULT_PORT 51113
|
||||
#define P2P_NETWORK_ID_TESTNET_FLAG 1
|
||||
#define P2P_MAINTAINERS_PUB_KEY "aaa2d7aabc8d383fd53a3ae898697b28f236ceade6bafc1eecff413a6a02272a"
|
||||
#define DIFFICULTY_POS_STARTER 625000000000
|
||||
#endif
|
||||
|
||||
#define P2P_NETWORK_ID_VER (CURRENCY_FORMATION_VERSION+0)
|
||||
|
|
|
|||
|
|
@ -4005,11 +4005,12 @@ namespace currency
|
|||
const difficulties& a_diff,
|
||||
const difficulties& b_diff )
|
||||
{
|
||||
static const wide_difficulty_type difficulty_starter = DIFFICULTY_STARTER;
|
||||
const wide_difficulty_type& a_pos_cumulative_difficulty = a_diff.pos_diff > 0 ? a_diff.pos_diff : difficulty_starter;
|
||||
const wide_difficulty_type& b_pos_cumulative_difficulty = b_diff.pos_diff > 0 ? b_diff.pos_diff : difficulty_starter;
|
||||
const wide_difficulty_type& a_pow_cumulative_difficulty = a_diff.pow_diff > 0 ? a_diff.pow_diff : difficulty_starter;
|
||||
const wide_difficulty_type& b_pow_cumulative_difficulty = b_diff.pow_diff > 0 ? b_diff.pow_diff : difficulty_starter;
|
||||
static const wide_difficulty_type difficulty_pos_starter = DIFFICULTY_POS_STARTER;
|
||||
static const wide_difficulty_type difficulty_pow_starter = DIFFICULTY_POW_STARTER;
|
||||
const wide_difficulty_type& a_pos_cumulative_difficulty = a_diff.pos_diff > 0 ? a_diff.pos_diff : difficulty_pos_starter;
|
||||
const wide_difficulty_type& b_pos_cumulative_difficulty = b_diff.pos_diff > 0 ? b_diff.pos_diff : difficulty_pos_starter;
|
||||
const wide_difficulty_type& a_pow_cumulative_difficulty = a_diff.pow_diff > 0 ? a_diff.pow_diff : difficulty_pow_starter;
|
||||
const wide_difficulty_type& b_pow_cumulative_difficulty = b_diff.pow_diff > 0 ? b_diff.pow_diff : difficulty_pow_starter;
|
||||
|
||||
boost::multiprecision::uint1024_t basic_sum = boost::multiprecision::uint1024_t(a_pow_cumulative_difficulty) + (boost::multiprecision::uint1024_t(a_pos_cumulative_difficulty)*difficulty_pow_at_split_point) / difficulty_pos_at_split_point;
|
||||
boost::multiprecision::uint1024_t res =
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ namespace currency {
|
|||
return res.convert_to<wide_difficulty_type>();
|
||||
}
|
||||
|
||||
wide_difficulty_type next_difficulty_1(vector<uint64_t>& timestamps, vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds)
|
||||
wide_difficulty_type next_difficulty_1(vector<uint64_t>& timestamps, vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds, const wide_difficulty_type& difficulty_starter)
|
||||
{
|
||||
|
||||
// timestamps - first is latest, back - is oldest timestamps
|
||||
|
|
@ -194,7 +194,7 @@ namespace currency {
|
|||
CHECK_AND_ASSERT_MES(length == cumulative_difficulties.size(), 0, "Check \"length == cumulative_difficulties.size()\" failed");
|
||||
if (length <= 1)
|
||||
{
|
||||
return DIFFICULTY_STARTER;
|
||||
return difficulty_starter;
|
||||
}
|
||||
static_assert(DIFFICULTY_WINDOW >= 2, "Window is too small");
|
||||
|
||||
|
|
@ -221,7 +221,7 @@ namespace currency {
|
|||
return summ / devider;
|
||||
}
|
||||
|
||||
wide_difficulty_type next_difficulty_2(vector<uint64_t>& timestamps, vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds)
|
||||
wide_difficulty_type next_difficulty_2(vector<uint64_t>& timestamps, vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds, const wide_difficulty_type& difficulty_starter)
|
||||
{
|
||||
|
||||
// timestamps - first is latest, back - is oldest timestamps
|
||||
|
|
@ -236,7 +236,7 @@ namespace currency {
|
|||
CHECK_AND_ASSERT_MES(length == cumulative_difficulties.size(), 0, "Check \"length == cumulative_difficulties.size()\" failed");
|
||||
if (length <= 1)
|
||||
{
|
||||
return DIFFICULTY_STARTER;
|
||||
return difficulty_starter;
|
||||
}
|
||||
static_assert(DIFFICULTY_WINDOW >= 2, "Window is too small");
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ namespace currency
|
|||
typedef boost::multiprecision::uint128_t wide_difficulty_type;
|
||||
|
||||
bool check_hash(const crypto::hash &hash, wide_difficulty_type difficulty);
|
||||
wide_difficulty_type next_difficulty_1(std::vector<std::uint64_t>& timestamps, std::vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds);
|
||||
wide_difficulty_type next_difficulty_2(std::vector<std::uint64_t>& timestamps, std::vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds);
|
||||
wide_difficulty_type next_difficulty_1(std::vector<std::uint64_t>& timestamps, std::vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds, const wide_difficulty_type& difficulty_starter);
|
||||
wide_difficulty_type next_difficulty_2(std::vector<std::uint64_t>& timestamps, std::vector<wide_difficulty_type>& cumulative_difficulties, size_t target_seconds, const wide_difficulty_type& difficulty_starter);
|
||||
uint64_t difficulty_to_boundary(wide_difficulty_type difficulty);
|
||||
void difficulty_to_boundary_long(wide_difficulty_type difficulty, crypto::hash& result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ namespace
|
|||
for (size_t i = 0; i < new_block_count; ++i)
|
||||
{
|
||||
block blk_next;
|
||||
wide_difficulty_type diffic = next_difficulty_1(timestamps, cummulative_difficulties, DIFFICULTY_POW_TARGET);
|
||||
wide_difficulty_type diffic = next_difficulty_1(timestamps, cummulative_difficulties, DIFFICULTY_POW_TARGET, DIFFICULTY_POW_STARTER);
|
||||
if (!generator.construct_block_manually(blk_next, blk_prev, miner_account,
|
||||
test_generator::bf_timestamp | test_generator::bf_diffic, 0, 0, blk_prev.timestamp, crypto::hash(), diffic))
|
||||
return false;
|
||||
|
|
@ -152,7 +152,7 @@ bool gen_block_invalid_nonce::generate(std::vector<test_event_entry>& events) co
|
|||
return false;
|
||||
|
||||
// Create invalid nonce
|
||||
wide_difficulty_type diffic = next_difficulty_1(timestamps, commulative_difficulties, DIFFICULTY_POW_TARGET);
|
||||
wide_difficulty_type diffic = next_difficulty_1(timestamps, commulative_difficulties, DIFFICULTY_POW_TARGET, DIFFICULTY_POW_STARTER);
|
||||
CHECK_AND_ASSERT_MES(diffic > 1, false, "diffic > 1 validation failed");
|
||||
const block& blk_last = boost::get<block>(events.back());
|
||||
uint64_t timestamp = blk_last.timestamp;
|
||||
|
|
|
|||
|
|
@ -766,7 +766,7 @@ bool test_generator::get_params_for_next_pos_block(const crypto::hash& head_id,
|
|||
std::vector<uint64_t> timestamps;
|
||||
std::vector<wide_difficulty_type> commulative_difficulties;
|
||||
if (!blocks.size())
|
||||
return DIFFICULTY_STARTER;
|
||||
return DIFFICULTY_POW_STARTER;
|
||||
|
||||
for (size_t i = blocks.size() - 1; i != 0; --i)
|
||||
{
|
||||
|
|
@ -775,7 +775,7 @@ bool test_generator::get_params_for_next_pos_block(const crypto::hash& head_id,
|
|||
timestamps.push_back(blocks[i]->b.timestamp);
|
||||
commulative_difficulties.push_back(blocks[i]->cumul_difficulty);
|
||||
}
|
||||
return next_difficulty_1(timestamps, commulative_difficulties, pow ? DIFFICULTY_POW_TARGET : DIFFICULTY_POS_TARGET);
|
||||
return next_difficulty_1(timestamps, commulative_difficulties, pow ? global_difficulty_pow_target : global_difficulty_pos_target, pow ? global_difficulty_pow_starter : global_difficulty_pos_starter);
|
||||
}
|
||||
|
||||
currency::wide_difficulty_type test_generator::get_cumul_difficulty_for_next_block(const crypto::hash& head_id, bool pow) const
|
||||
|
|
|
|||
|
|
@ -2769,7 +2769,7 @@ bool premine_wallet_test::generate(std::vector<test_event_entry>& events) const
|
|||
currency::generate_genesis_block(blk_0_info.b);
|
||||
blk_0_info.already_generated_coins = get_outs_money_amount(blk_0_info.b.miner_tx);
|
||||
blk_0_info.block_size = get_object_blobsize(blk_0_info.b.miner_tx);
|
||||
blk_0_info.cumul_difficulty = DIFFICULTY_STARTER;
|
||||
blk_0_info.cumul_difficulty = DIFFICULTY_POW_STARTER;
|
||||
blk_0_info.ks_hash = currency::null_hash;
|
||||
blk_0_info.m_transactions.clear();
|
||||
events.push_back(blk_0_info.b);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue