Moving work_threshold_base from a free function to a member of work_thresholds.

This commit is contained in:
clemahieu 2021-08-08 23:20:17 +01:00
commit 3d71605cfd
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
9 changed files with 28 additions and 27 deletions

View file

@ -129,7 +129,7 @@ TEST (difficulty, network_constants)
nano::work_version version{ nano::work_version::work_1 };
ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.epoch_2);
ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::work_threshold_base (version));
ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.threshold_base (version));
ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.entry, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::state));
ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::send));
ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::receive));

View file

@ -138,10 +138,11 @@ private:
void handle_generate (nano::block_hash const & hash_a)
{
static nano::network_constants constants;
if (type == work_peer_type::good)
{
auto hash = hash_a;
auto request_difficulty = nano::work_threshold_base (version);
auto request_difficulty = constants.publish_thresholds.threshold_base (version);
auto this_l (shared_from_this ());
work_pool.generate (version, hash, request_difficulty, [this_l, hash] (boost::optional<uint64_t> work_a) {
auto result = work_a.value_or (0);
@ -149,7 +150,7 @@ private:
ptree::ptree message_l;
message_l.put ("work", nano::to_string_hex (result));
message_l.put ("difficulty", nano::to_string_hex (result_difficulty));
message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, nano::work_threshold_base (this_l->version))));
message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, constants.publish_thresholds.threshold_base (this_l->version))));
message_l.put ("hash", hash.to_string ());
std::stringstream ostream;
ptree::write_json (ostream, message_l);

View file

@ -19,7 +19,7 @@ TEST (work, one)
nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits<unsigned>::max () };
nano::change_block block (1, 1, nano::keypair ().prv, 3, 4);
block.block_work_set (*pool.generate (block.root ()));
ASSERT_LT (nano::work_threshold_base (block.work_version ()), block.difficulty ());
ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (block.work_version ()), block.difficulty ());
}
TEST (work, disabled)
@ -33,9 +33,9 @@ TEST (work, validate)
{
nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits<unsigned>::max () };
nano::send_block send_block (1, 1, 2, nano::keypair ().prv, 4, 6);
ASSERT_LT (send_block.difficulty (), nano::work_threshold_base (send_block.work_version ()));
ASSERT_LT (send_block.difficulty (), nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ()));
send_block.block_work_set (*pool.generate (send_block.root ()));
ASSERT_LT (nano::work_threshold_base (send_block.work_version ()), send_block.difficulty ());
ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ()), send_block.difficulty ());
}
TEST (work, cancel)

View file

@ -166,6 +166,20 @@ double nano::work_thresholds::denormalized_multiplier (double const multiplier_a
return multiplier;
}
uint64_t nano::work_thresholds::threshold_base (nano::work_version const version_a)
{
uint64_t result{ std::numeric_limits<uint64_t>::max () };
switch (version_a)
{
case nano::work_version::work_1:
result = base;
break;
default:
debug_assert (false && "Invalid version specified to work_threshold_base");
}
return result;
}
namespace nano
{
const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev.";

View file

@ -111,10 +111,11 @@ public:
}
uint64_t threshold_entry (nano::work_version const, nano::block_type const);
uint64_t value (nano::root const & root_a, uint64_t work_a);
uint64_t threshold (nano::block_details const &);
// Ledger threshold
uint64_t threshold (nano::work_version const, nano::block_details const);
uint64_t threshold_base (nano::work_version const);
uint64_t value (nano::root const & root_a, uint64_t work_a);
double normalized_multiplier (double const, uint64_t const);
double denormalized_multiplier (double const, uint64_t const);

View file

@ -49,21 +49,6 @@ uint64_t nano::work_difficulty (nano::work_version const version_a, nano::root c
return result;
}
uint64_t nano::work_threshold_base (nano::work_version const version_a)
{
uint64_t result{ std::numeric_limits<uint64_t>::max () };
switch (version_a)
{
case nano::work_version::work_1:
static nano::network_constants network_constants;
result = network_constants.publish_thresholds.base;
break;
default:
debug_assert (false && "Invalid version specified to work_threshold_base");
}
return result;
}
nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function<boost::optional<uint64_t> (nano::work_version const, nano::root const &, uint64_t, std::atomic<int> &)> opencl_a) :
network_constants{ network_constants },
ticket (0),

View file

@ -23,7 +23,6 @@ bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t
uint64_t work_difficulty (nano::work_version const, nano::root const &, uint64_t const);
uint64_t work_threshold_base (nano::work_version const);
class opencl_work;
class work_item final
{

View file

@ -1110,11 +1110,12 @@ int nano::node::price (nano::uint128_t const & balance_a, int amount_a)
uint64_t nano::node::default_difficulty (nano::work_version const version_a) const
{
nano::network_constants constants;
uint64_t result{ std::numeric_limits<uint64_t>::max () };
switch (version_a)
{
case nano::work_version::work_1:
result = nano::work_threshold_base (version_a);
result = constants.publish_thresholds.threshold_base (version_a);
break;
default:
debug_assert (false && "Invalid version specified to default_difficulty");

View file

@ -2215,7 +2215,7 @@ TEST (rpc, work_peer_bad)
ASSERT_TRUE (work_a.is_initialized ());
work = *work_a;
});
ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, hash1, work) >= nano::work_threshold_base (nano::work_version::work_1));
ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, hash1, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1));
}
TEST (rpc, work_peer_one)
@ -2231,7 +2231,7 @@ TEST (rpc, work_peer_one)
ASSERT_TRUE (work_a.is_initialized ());
work = *work_a;
});
ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, key1.pub, work) >= nano::work_threshold_base (nano::work_version::work_1));
ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, key1.pub, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1));
}
TEST (rpc, work_peer_many)
@ -2258,7 +2258,7 @@ TEST (rpc, work_peer_many)
node1.work_generate (nano::work_version::work_1, key1.pub, node1.network_params.network.publish_thresholds.base, [&work = works[i]] (boost::optional<uint64_t> work_a) {
work = *work_a;
});
while (nano::work_difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::work_threshold_base (nano::work_version::work_1))
while (nano::work_difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1))
{
system1.poll ();
system2.poll ();