From 9ccbc55ba655dd15ce4df9929d13d04e62ba2115 Mon Sep 17 00:00:00 2001 From: theoreticalbts Date: Mon, 12 Oct 2015 11:46:32 -0400 Subject: [PATCH] Implement chain_id #374 --- libraries/app/application.cpp | 10 +++++++++- libraries/chain/db_management.cpp | 2 +- libraries/chain/genesis_state.cpp | 2 +- .../chain/include/graphene/chain/genesis_state.hpp | 6 ++++++ libraries/egenesis/embed_genesis.cpp | 6 +++--- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/libraries/app/application.cpp b/libraries/app/application.cpp index 8fe24dfb..c74424af 100644 --- a/libraries/app/application.cpp +++ b/libraries/app/application.cpp @@ -36,6 +36,7 @@ #include +#include #include #include #include @@ -94,6 +95,7 @@ namespace detail { initial_state.initial_balances.push_back({nathan_key.get_public_key(), GRAPHENE_SYMBOL, GRAPHENE_MAX_SHARE_SUPPLY}); + initial_state.initial_chain_id = fc::sha256::hash( "BOGUS" ); return initial_state; } @@ -243,7 +245,9 @@ namespace detail { ilog("Initializing database..."); if( _options->count("genesis-json") ) { - genesis_state_type genesis = fc::json::from_file(_options->at("genesis-json").as()).as(); + std::string genesis_str; + fc::read_file_contents( _options->at("genesis-json").as(), genesis_str ); + genesis_state_type genesis = fc::json::from_string( genesis_str ).as(); bool modified_genesis = false; if( _options->count("genesis-timestamp") ) { @@ -263,7 +267,11 @@ namespace detail { if( modified_genesis ) { std::cerr << "WARNING: GENESIS WAS MODIFIED, YOUR CHAIN ID MAY BE DIFFERENT\n"; + genesis_str += "BOGUS"; + genesis.initial_chain_id = fc::sha256::hash( genesis_str ); } + else + genesis.initial_chain_id = fc::sha256::hash( genesis_str ); return genesis; } else diff --git a/libraries/chain/db_management.cpp b/libraries/chain/db_management.cpp index facf19d5..64f5061b 100644 --- a/libraries/chain/db_management.cpp +++ b/libraries/chain/db_management.cpp @@ -104,7 +104,7 @@ void database::wipe(const fc::path& data_dir, bool include_blocks) void database::open( const fc::path& data_dir, - std::function genesis_loader ) + std::function genesis_loader) { try { diff --git a/libraries/chain/genesis_state.cpp b/libraries/chain/genesis_state.cpp index a8af8b56..6ec054f4 100644 --- a/libraries/chain/genesis_state.cpp +++ b/libraries/chain/genesis_state.cpp @@ -9,7 +9,7 @@ namespace graphene { namespace chain { chain_id_type genesis_state_type::compute_chain_id() const { - return fc::sha256::hash( *this ); + return initial_chain_id; } } } // graphene::chain diff --git a/libraries/chain/include/graphene/chain/genesis_state.hpp b/libraries/chain/include/graphene/chain/genesis_state.hpp index 7cd710b6..7018a4d8 100644 --- a/libraries/chain/include/graphene/chain/genesis_state.hpp +++ b/libraries/chain/include/graphene/chain/genesis_state.hpp @@ -89,6 +89,11 @@ struct genesis_state_type { vector initial_committee_candidates; vector initial_worker_candidates; + /** + * Temporary, will be moved elsewhere. + */ + chain_id_type initial_chain_id; + /** * Get the chain_id corresponding to this genesis state. * @@ -123,4 +128,5 @@ FC_REFLECT(graphene::chain::genesis_state_type, (initial_timestamp)(max_core_supply)(initial_parameters)(initial_accounts)(initial_assets)(initial_balances) (initial_vesting_balances)(initial_active_witnesses)(initial_witness_candidates) (initial_committee_candidates)(initial_worker_candidates) + (initial_chain_id) (immutable_parameters)) diff --git a/libraries/egenesis/embed_genesis.cpp b/libraries/egenesis/embed_genesis.cpp index 0413e568..208d98f6 100644 --- a/libraries/egenesis/embed_genesis.cpp +++ b/libraries/egenesis/embed_genesis.cpp @@ -168,12 +168,12 @@ struct egenesis_info std::cerr << "embed_genesis: Need genesis or genesis_json\n"; exit(1); } - // init chain_id from genesis - if( !chain_id.valid() ) - chain_id = genesis->compute_chain_id(); // init genesis_json_hash from genesis_json if( !genesis_json_hash.valid() ) genesis_json_hash = fc::sha256::hash( *genesis_json ); + // init chain_id from genesis_json_hash + if( !chain_id.valid() ) + chain_id = genesis_json_hash; // init genesis_json_array from genesis_json if( !genesis_json_array.valid() ) {