Pass tx and nonce to genesis block constructor

This commit is contained in:
Zachary Michaels 2014-09-08 15:09:59 -04:00 committed by Riccardo Spagni
parent 257077a96b
commit 96eed84aad
5 changed files with 43 additions and 28 deletions

View file

@ -114,7 +114,14 @@ bool blockchain_storage::init(const std::string& config_folder, bool testnet)
LOG_PRINT_L0("Can't load blockchain storage from file, generating genesis block."); LOG_PRINT_L0("Can't load blockchain storage from file, generating genesis block.");
block bl = boost::value_initialized<block>(); block bl = boost::value_initialized<block>();
block_verification_context bvc = boost::value_initialized<block_verification_context>(); block_verification_context bvc = boost::value_initialized<block_verification_context>();
generate_genesis_block(bl); if (testnet)
{
generate_genesis_block(bl, config::testnet::GENESIS_TX, config::testnet::GENESIS_NONCE);
}
else
{
generate_genesis_block(bl, config::GENESIS_TX, config::GENESIS_NONCE);
}
add_new_block(bl, bvc); add_new_block(bl, bvc);
CHECK_AND_ASSERT_MES(!bvc.m_verifivation_failed && bvc.m_added_to_main_chain, false, "Failed to add genesis block to blockchain"); CHECK_AND_ASSERT_MES(!bvc.m_verifivation_failed && bvc.m_added_to_main_chain, false, "Failed to add genesis block to blockchain");
} }
@ -127,10 +134,14 @@ bool blockchain_storage::init(const std::string& config_folder, bool testnet)
} }
} else { } else {
cryptonote::block b; cryptonote::block b;
if (testnet) {
generate_testnet_genesis_block(b); if (testnet)
} else { {
generate_genesis_block(b); generate_genesis_block(b, config::testnet::GENESIS_TX, config::testnet::GENESIS_NONCE);
}
else
{
generate_genesis_block(b, config::GENESIS_TX, config::GENESIS_NONCE);
} }
crypto::hash genesis_hash = get_block_hash(m_blocks[0].bl); crypto::hash genesis_hash = get_block_hash(m_blocks[0].bl);
@ -151,10 +162,13 @@ bool blockchain_storage::store_genesis_block(bool testnet) {
block bl = ::boost::value_initialized<block>(); block bl = ::boost::value_initialized<block>();
block_verification_context bvc = boost::value_initialized<block_verification_context>(); block_verification_context bvc = boost::value_initialized<block_verification_context>();
if (testnet) { if (testnet)
generate_testnet_genesis_block(bl); {
} else { generate_genesis_block(bl, config::testnet::GENESIS_TX, config::testnet::GENESIS_NONCE);
generate_genesis_block(bl); }
else
{
generate_genesis_block(bl, config::GENESIS_TX, config::GENESIS_NONCE);
} }
add_new_block(bl, bvc); add_new_block(bl, bvc);

View file

@ -660,7 +660,11 @@ namespace cryptonote
return p; return p;
} }
//--------------------------------------------------------------- //---------------------------------------------------------------
bool generate_genesis_block(block& bl) bool generate_genesis_block(
block& bl
, std::string const & genesis_tx
, uint32_t nonce
)
{ {
//genesis block //genesis block
bl = boost::value_initialized<block>(); bl = boost::value_initialized<block>();
@ -681,20 +685,10 @@ namespace cryptonote
bl.major_version = CURRENT_BLOCK_MAJOR_VERSION; bl.major_version = CURRENT_BLOCK_MAJOR_VERSION;
bl.minor_version = CURRENT_BLOCK_MINOR_VERSION; bl.minor_version = CURRENT_BLOCK_MINOR_VERSION;
bl.timestamp = 0; bl.timestamp = 0;
bl.nonce = config::GENESIS_NONCE; bl.nonce = nonce;
miner::find_nonce_for_given_block(bl, 1, 0); miner::find_nonce_for_given_block(bl, 1, 0);
return true; return true;
} }
bool generate_testnet_genesis_block(cryptonote::block& b) {
if (!generate_genesis_block(b)) {
return false;
}
b.nonce += 1;
return true;
}
//--------------------------------------------------------------- //---------------------------------------------------------------
bool get_block_longhash(const block& b, crypto::hash& res, uint64_t height) bool get_block_longhash(const block& b, crypto::hash& res, uint64_t height)
{ {

View file

@ -105,8 +105,11 @@ namespace cryptonote
crypto::hash get_block_hash(const block& b); crypto::hash get_block_hash(const block& b);
bool get_block_longhash(const block& b, crypto::hash& res, uint64_t height); bool get_block_longhash(const block& b, crypto::hash& res, uint64_t height);
crypto::hash get_block_longhash(const block& b, uint64_t height); crypto::hash get_block_longhash(const block& b, uint64_t height);
bool generate_genesis_block(block& bl); bool generate_genesis_block(
bool generate_testnet_genesis_block(block& bl); block& bl
, std::string const & genesis_tx
, uint32_t nonce
);
bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b); bool parse_and_validate_block_from_blob(const blobdata& b_blob, block& b);
bool get_inputs_money_amount(const transaction& tx, uint64_t& money); bool get_inputs_money_amount(const transaction& tx, uint64_t& money);
uint64_t get_outs_money_amount(const transaction& tx); uint64_t get_outs_money_amount(const transaction& tx);

View file

@ -35,6 +35,7 @@
#include "include_base_utils.h" #include "include_base_utils.h"
using namespace epee; using namespace epee;
#include "cryptonote_config.h"
#include "wallet2.h" #include "wallet2.h"
#include "cryptonote_core/cryptonote_format_utils.h" #include "cryptonote_core/cryptonote_format_utils.h"
#include "rpc/core_rpc_server_commands_defs.h" #include "rpc/core_rpc_server_commands_defs.h"
@ -939,10 +940,13 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions(std::vector<crypto
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
void wallet2::generate_genesis(cryptonote::block& b) { void wallet2::generate_genesis(cryptonote::block& b) {
if (m_testnet) { if (m_testnet)
cryptonote::generate_testnet_genesis_block(b); {
} else { cryptonote::generate_genesis_block(b, config::testnet::GENESIS_TX, config::testnet::GENESIS_NONCE);
cryptonote::generate_genesis_block(b); }
else
{
cryptonote::generate_genesis_block(b, config::GENESIS_TX, config::GENESIS_NONCE);
} }
} }
} }

View file

@ -227,7 +227,7 @@ bool tests::proxy_core::get_blockchain_top(uint64_t& height, crypto::hash& top_i
} }
bool tests::proxy_core::init(const boost::program_options::variables_map& /*vm*/) { bool tests::proxy_core::init(const boost::program_options::variables_map& /*vm*/) {
generate_genesis_block(m_genesis); generate_genesis_block(m_genesis, config::GENESIS_TX, config::GENESIS_NONCE);
crypto::hash h = get_block_hash(m_genesis); crypto::hash h = get_block_hash(m_genesis);
add_block(h, get_block_longhash(m_genesis, 0), m_genesis, block_to_blob(m_genesis)); add_block(h, get_block_longhash(m_genesis, 0), m_genesis, block_to_blob(m_genesis));
return true; return true;