Skip to content

Commit

Permalink
merge pbft feature into bos, resolve conflicts in block extension usage
Browse files Browse the repository at this point in the history
  • Loading branch information
VincentOCL committed Mar 20, 2019
2 parents 8b9e8b9 + 1e95f15 commit c20cee9
Show file tree
Hide file tree
Showing 35 changed files with 4,187 additions and 92 deletions.
2 changes: 2 additions & 0 deletions libraries/chain/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ add_library( eosio_chain
block_header_state.cpp
block_state.cpp
fork_database.cpp
pbft_database.cpp
pbft.cpp
controller.cpp
authorization_manager.cpp
resource_limits.cpp
Expand Down
42 changes: 22 additions & 20 deletions libraries/chain/block_header_state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,36 +60,38 @@ namespace eosio { namespace chain {

result.active_schedule = active_schedule;
result.pending_schedule = pending_schedule;
result.dpos_proposed_irreversible_blocknum = dpos_proposed_irreversible_blocknum;
// result.dpos_proposed_irreversible_blocknum = dpos_proposed_irreversible_blocknum;
result.bft_irreversible_blocknum = bft_irreversible_blocknum;
result.pbft_stable_checkpoint_blocknum = pbft_stable_checkpoint_blocknum;

result.producer_to_last_implied_irb[prokey.producer_name] = result.dpos_proposed_irreversible_blocknum;
result.dpos_irreversible_blocknum = result.calc_dpos_last_irreversible();
// result.dpos_irreversible_blocknum = result.calc_dpos_last_irreversible();

/// grow the confirmed count
static_assert(std::numeric_limits<uint8_t>::max() >= (config::max_producers * 2 / 3) + 1, "8bit confirmations may not be able to hold all of the needed confirmations");

// This uses the previous block active_schedule because thats the "schedule" that signs and therefore confirms _this_ block
auto num_active_producers = active_schedule.producers.size();
uint32_t required_confs = (uint32_t)(num_active_producers * 2 / 3) + 1;

if( confirm_count.size() < config::maximum_tracked_dpos_confirmations ) {
result.confirm_count.reserve( confirm_count.size() + 1 );
result.confirm_count = confirm_count;
result.confirm_count.resize( confirm_count.size() + 1 );
result.confirm_count.back() = (uint8_t)required_confs;
} else {
result.confirm_count.resize( confirm_count.size() );
memcpy( &result.confirm_count[0], &confirm_count[1], confirm_count.size() - 1 );
result.confirm_count.back() = (uint8_t)required_confs;
}
// auto num_active_producers = active_schedule.producers.size();
// uint32_t required_confs = (uint32_t)(num_active_producers * 2 / 3) + 1;

// if( confirm_count.size() < config::maximum_tracked_dpos_confirmations ) {
// result.confirm_count.reserve( confirm_count.size() + 1 );
// result.confirm_count = confirm_count;
// result.confirm_count.resize( confirm_count.size() + 1 );
// result.confirm_count.back() = (uint8_t)required_confs;
// } else {
// result.confirm_count.resize( confirm_count.size() );
// memcpy( &result.confirm_count[0], &confirm_count[1], confirm_count.size() - 1 );
// result.confirm_count.back() = (uint8_t)required_confs;
// }

return result;
} /// generate_next

bool block_header_state::maybe_promote_pending() {
if( pending_schedule.producers.size() &&
dpos_irreversible_blocknum >= pending_schedule_lib_num )
if (pending_schedule.producers.size())
//TODO: is this actually safe?
// bft_irreversible_blocknum >= pending_schedule_lib_num )
{
active_schedule = move( pending_schedule );

Expand All @@ -99,7 +101,7 @@ namespace eosio { namespace chain {
if( existing != producer_to_last_produced.end() ) {
new_producer_to_last_produced[pro.producer_name] = existing->second;
} else {
new_producer_to_last_produced[pro.producer_name] = dpos_irreversible_blocknum;
new_producer_to_last_produced[pro.producer_name] = bft_irreversible_blocknum;
}
}

Expand All @@ -109,7 +111,7 @@ namespace eosio { namespace chain {
if( existing != producer_to_last_implied_irb.end() ) {
new_producer_to_last_implied_irb[pro.producer_name] = existing->second;
} else {
new_producer_to_last_implied_irb[pro.producer_name] = dpos_irreversible_blocknum;
new_producer_to_last_implied_irb[pro.producer_name] = bft_irreversible_blocknum;
}
}

Expand Down Expand Up @@ -161,7 +163,7 @@ namespace eosio { namespace chain {
/// below this point is state changes that cannot be validated with headers alone, but never-the-less,
/// must result in header state changes

result.set_confirmed( h.confirmed );
// result.set_confirmed( h.confirmed );

auto was_pending_promoted = result.maybe_promote_pending();

Expand Down
Loading

0 comments on commit c20cee9

Please sign in to comment.