adding checkpoints #121 to database
This commit is contained in:
parent
84a83042ff
commit
c49fbd87e7
3 changed files with 28 additions and 1 deletions
|
|
@ -82,6 +82,7 @@ const signed_transaction& database::get_recent_transaction(const transaction_id_
|
||||||
*/
|
*/
|
||||||
bool database::push_block(const signed_block& new_block, uint32_t skip)
|
bool database::push_block(const signed_block& new_block, uint32_t skip)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool result;
|
bool result;
|
||||||
with_skip_flags( skip, [&]()
|
with_skip_flags( skip, [&]()
|
||||||
{
|
{
|
||||||
|
|
@ -365,6 +366,21 @@ const vector<operation_history_object>& database::get_applied_operations() const
|
||||||
|
|
||||||
void database::apply_block( const signed_block& next_block, uint32_t skip )
|
void database::apply_block( const signed_block& next_block, uint32_t skip )
|
||||||
{
|
{
|
||||||
|
auto block_num = next_block.block_num();
|
||||||
|
if( _checkpoints.size() )
|
||||||
|
{
|
||||||
|
auto itr = _checkpoints.find( block_num );
|
||||||
|
if( itr != _checkpoints.end() )
|
||||||
|
FC_ASSERT( next_block.id() == itr->second, "Block did not match checkpoint", ("checkpoint",*itr)("block_id",next_block.id()) );
|
||||||
|
|
||||||
|
auto last = _checkpoints.rbegin();
|
||||||
|
if( last->first >= block_num )
|
||||||
|
{
|
||||||
|
// WE CAN SKIP ALMOST EVERYTHING
|
||||||
|
skip = ~0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
with_skip_flags( skip, [&]()
|
with_skip_flags( skip, [&]()
|
||||||
{
|
{
|
||||||
_apply_block( next_block );
|
_apply_block( next_block );
|
||||||
|
|
@ -649,4 +665,10 @@ void database::create_block_summary(const signed_block& next_block)
|
||||||
FC_ASSERT( sum.id.instance() == next_block.block_num(), "", ("summary.id",sum.id)("next.block_num",next_block.block_num()) );
|
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<uint32_t,block_id_type>& checkpts )
|
||||||
|
{
|
||||||
|
for( const auto& i : checkpts )
|
||||||
|
_checkpoints[i.first] = i.second;
|
||||||
|
}
|
||||||
|
|
||||||
} }
|
} }
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,9 @@ namespace graphene { namespace chain {
|
||||||
optional<signed_block> fetch_block_by_number( uint32_t num )const;
|
optional<signed_block> fetch_block_by_number( uint32_t num )const;
|
||||||
const signed_transaction& get_recent_transaction( const transaction_id_type& trx_id )const;
|
const signed_transaction& get_recent_transaction( const transaction_id_type& trx_id )const;
|
||||||
|
|
||||||
|
void add_checkpoints( const flat_map<uint32_t,block_id_type>& checkpts );
|
||||||
|
const flat_map<uint32_t,block_id_type> get_checkpoints()const { return _checkpoints; }
|
||||||
|
|
||||||
bool push_block( const signed_block& b, uint32_t skip = skip_nothing );
|
bool push_block( const signed_block& b, uint32_t skip = skip_nothing );
|
||||||
processed_transaction push_transaction( const signed_transaction& trx, uint32_t skip = skip_nothing );
|
processed_transaction push_transaction( const signed_transaction& trx, uint32_t skip = skip_nothing );
|
||||||
bool _push_block( const signed_block& b );
|
bool _push_block( const signed_block& b );
|
||||||
|
|
@ -470,6 +473,8 @@ namespace graphene { namespace chain {
|
||||||
vector<uint64_t> _committee_count_histogram_buffer;
|
vector<uint64_t> _committee_count_histogram_buffer;
|
||||||
uint64_t _total_voting_stake;
|
uint64_t _total_voting_stake;
|
||||||
|
|
||||||
|
flat_map<uint32_t,block_id_type> _checkpoints;
|
||||||
|
|
||||||
node_property_object _node_property_object;
|
node_property_object _node_property_object;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,5 +54,5 @@ namespace graphene { namespace chain {
|
||||||
} } // graphene::chain
|
} } // graphene::chain
|
||||||
|
|
||||||
FC_REFLECT_TYPENAME( graphene::chain::fee_parameters )
|
FC_REFLECT_TYPENAME( graphene::chain::fee_parameters )
|
||||||
FC_REFLECT( graphene::chain::fee_schedule, (parameters) )
|
FC_REFLECT( graphene::chain::fee_schedule, (parameters)(scale) )
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue