32 namespace graphene {
namespace chain {
34 using boost::container::flat_set;
49 auto interval = block_interval();
56 return genesis_time + slot_num * interval;
71 return head_slot_time + (slot_num * interval);
77 if( when < first_slot_time )
79 return (when - first_slot_time).to_seconds() / block_interval() + 1;
82 uint32_t database::update_witness_missed_blocks(
const signed_block& b )
85 FC_ASSERT( missed_blocks != 0,
"Trying to push double-produced block onto current block?!" );
87 const auto& witnesses = witness_schedule_id_type()(*this).current_shuffled_witnesses;
88 if( missed_blocks < witnesses.size() )
89 for( uint32_t i = 0; i < missed_blocks; ++i ) {
104 void database::update_witness_schedule()
124 uint64_t k = now_hi + uint64_t(i)*2685821657736338717ULL;
128 k *= 2685821657736338717ULL;
131 uint32_t j = i + k%jmax;
void modify(const T &obj, const Lambda &m)
chain_parameters parameters
time_point_sec head_block_time() const
Maintains global state information (committee_member list, current fees)This is an implementation det...
fc::uint128_t recent_slots_filled
uint8_t maintenance_skip_slots
number of block_intervals to skip at maintenance time
flat_set< witness_id_type > active_witnesses
uint32_t get_slot_at_time(fc::time_point_sec when) const
uint32_t witness_participation_rate() const
#define GRAPHENE_100_PERCENT
#define FC_ASSERT(TEST,...)
Checks a condition and throws an assert_exception if the test is FALSE.
fc::time_point_sec get_slot_time(uint32_t slot_num) const
const witness_schedule_object & get_witness_schedule_object() const
uint32_t head_block_num() const
Maintains global state information (committee_member list, current fees)This is an implementation det...
uint8_t popcount(uint64_t v)
uint32_t sec_since_epoch() const
const dynamic_global_property_object & get_dynamic_global_properties() const
vector< witness_id_type > current_shuffled_witnesses
witness_id_type get_scheduled_witness(uint32_t slot_num) const
Get the witness scheduled for block production in a slot.
const global_property_object & get_global_properties() const