Initializing sideband when creating constants, rather than elsewhere.

This commit is contained in:
clemahieu 2021-07-24 17:54:16 +01:00
commit 1ac9679204
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
3 changed files with 14 additions and 19 deletions

View file

@ -80,19 +80,10 @@ char const * live_canary_public_key_data = "7CBAF192A3763DAEC9F9BAC1B2CDF665D836
std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_TEST_CANARY_PUB", "3BAD2C554ACE05F5E528FBBCE79D51E552C55FA765CCFD89B289C4835DE5F04A"); // nano_1gxf7jcnomi7yqkkjyxwwygo5sckrohtgsgezp6u74g6ifgydw4cajwbk8bf
}
nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network };
std::shared_ptr<nano::block> & nano::dev::genesis = nano::dev::constants.genesis;
nano::keypair nano::dev::genesis_key{ dev_private_key_data };
nano::uint128_t nano::dev::genesis_amount{ std::numeric_limits<nano::uint128_t>::max () };
namespace {
struct genesis_sideband_initializer {
genesis_sideband_initializer ()
{
nano::dev::genesis->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0));
}
};
genesis_sideband_initializer initializer;
}
nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network };
std::shared_ptr<nano::block> & nano::dev::genesis = nano::dev::constants.genesis;
nano::network_params::network_params () :
network_params (network_constants::active_network)
@ -139,6 +130,11 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) :
nano_test_final_votes_canary_height (1),
final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height)
{
nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0));
nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0));
nano_live_genesis->sideband_set (nano::block_sideband (nano_live_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0));
nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0));
nano::link epoch_link_v1;
const char * epoch_message_v1 ("epoch v1 block");
strncpy ((char *)epoch_link_v1.bytes.data (), epoch_message_v1, epoch_link_v1.bytes.size ());

View file

@ -395,10 +395,10 @@ public:
namespace dev
{
extern nano::ledger_constants constants;
extern std::shared_ptr<nano::block> & genesis;
extern nano::keypair genesis_key;
extern nano::uint128_t genesis_amount;
extern nano::ledger_constants constants;
extern std::shared_ptr<nano::block> & genesis;
}
/** Constants which depend on random values (this class should never be used globally due to CryptoPP globals potentially not being initialized) */

View file

@ -105,16 +105,15 @@ public:
*/
void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a) override
{
auto & genesis = *network_params.ledger.genesis;
auto hash_l (genesis.hash ());
debug_assert (network_params.ledger.genesis->has_sideband ());
debug_assert (account.begin (transaction_a) == account.end ());
genesis.sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0));
block.put (transaction_a, hash_l, genesis);
auto hash_l (network_params.ledger.genesis->hash ());
block.put (transaction_a, hash_l, *network_params.ledger.genesis);
++ledger_cache_a.block_count;
confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, genesis.hash () });
confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, network_params.ledger.genesis->hash () });
++ledger_cache_a.cemented_count;
ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account () && 1 >= network_params.ledger.final_votes_canary_height);
account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), genesis.hash (), std::numeric_limits<nano::uint128_t>::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 });
account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), network_params.ledger.genesis->hash (), std::numeric_limits<nano::uint128_t>::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 });
++ledger_cache_a.account_count;
ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account (), std::numeric_limits<nano::uint128_t>::max ());
frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account ());