diff --git a/libraries/chain/assert_evaluator.cpp b/libraries/chain/assert_evaluator.cpp index c805280b..e8cf935e 100644 --- a/libraries/chain/assert_evaluator.cpp +++ b/libraries/chain/assert_evaluator.cpp @@ -41,7 +41,7 @@ struct predicate_evaluator } void operator()( const block_id_predicate& p )const { - FC_ASSERT( block_summary_id_type( block_header::num_from_id( p.id ) )(db).block_id == p.id ); + FC_ASSERT( block_summary_id_type( block_header::num_from_id( p.id ) & 0xffff )(db).block_id == p.id ); } }; diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index 5adba8a5..afa98823 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -524,6 +524,7 @@ processed_transaction database::_apply_transaction(const signed_transaction& trx // integer that satisfies (a) and (b); for x1, the next // largest integer that satisfies (a), does not satisfy (b). // + /** int64_t N = head_block_num(); int64_t a = N & 0xFFFF; int64_t r = trx.ref_block_num; @@ -546,8 +547,9 @@ processed_transaction database::_apply_transaction(const signed_transaction& trx { ref_block_height = uint32_t( x0 ); } + */ - const auto& tapos_block_summary = block_summary_id_type( ref_block_height )(*this); + const auto& tapos_block_summary = block_summary_id_type( trx.ref_block_num )(*this); //This is the signature check for transactions with relative expiration. if( !(skip & skip_transaction_signatures) ) @@ -652,11 +654,11 @@ const witness_object& database::validate_block_header( uint32_t skip, const sign void database::create_block_summary(const signed_block& next_block) { - const auto& sum = create( [&](block_summary_object& p) { + block_summary_id_type sid(next_block.block_num() & 0xffff ); + modify( sid(*this), [&](block_summary_object& p) { p.block_id = next_block.id(); p.timestamp = next_block.timestamp; }); - FC_ASSERT( sum.id.instance() == next_block.block_num(), "", ("summary.id",sum.id)("next.block_num",next_block.block_num()) ); } void database::add_checkpoints( const flat_map& checkpts ) diff --git a/libraries/chain/db_init.cpp b/libraries/chain/db_init.cpp index ffd928a3..287a810e 100644 --- a/libraries/chain/db_init.cpp +++ b/libraries/chain/db_init.cpp @@ -214,6 +214,9 @@ void database::init_genesis(const genesis_state_type& genesis_state) transaction_evaluation_state genesis_eval_state(this); + flat_index& bsi = get_mutable_index_type< flat_index >(); + bsi.resize(0xffff+1); + // Create blockchain accounts fc::ecc::private_key null_private_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key"))); create([](account_balance_object& b) { diff --git a/libraries/db/include/graphene/db/flat_index.hpp b/libraries/db/include/graphene/db/flat_index.hpp index 2df5a23c..06eb3826 100644 --- a/libraries/db/include/graphene/db/flat_index.hpp +++ b/libraries/db/include/graphene/db/flat_index.hpp @@ -105,6 +105,12 @@ namespace graphene { namespace db { size_t size()const{ return _objects.size(); } + void resize( uint32_t s ) { + _objects.resize(s); + for( uint32_t i = 0; i < s; ++i ) + _objects[i].id = object_id_type(object_type::space_id,object_type::type_id,i); + } + private: vector< T > _objects; };