Scorum
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
genesis.cpp
Go to the documentation of this file.
2 
5 
7 
21 
22 #include <fc/io/json.hpp>
23 
24 #include <vector>
25 #include <map>
26 
27 namespace scorum {
28 namespace chain {
29 
30 fc::time_point_sec database::get_genesis_time() const
31 {
32  return _const_genesis_time;
33 }
34 
36 {
37  _const_genesis_time = genesis_state.initial_timestamp;
38 }
39 
40 void database::init_genesis(const genesis_state_type& genesis_state)
41 {
42  try
43  {
44  FC_ASSERT(genesis_state.initial_timestamp != time_point_sec::min(), "Must initialize genesis timestamp.");
45  FC_ASSERT(genesis_state.witness_candidates.size() > 0, "Cannot start a chain with zero witnesses.");
46 
47  struct auth_inhibitor
48  {
49  auth_inhibitor(database& db)
50  : db(db)
51  , old_flags(db.node_properties().skip_flags)
52  {
54  }
55 
56  ~auth_inhibitor()
57  {
58  db.node_properties().skip_flags = old_flags;
59  }
60 
61  private:
62  database& db;
63  uint32_t old_flags;
64  } inhibitor(*this);
65 
66  create<chain_property_object>([&](chain_property_object& cp) {
67  cp.chain_id = genesis_state.initial_chain_id;
68  cp.genesis_time = genesis_state.initial_timestamp;
69  });
70 
71  BOOST_ATTRIBUTE_UNUSED
72  db_genesis genesis(*this, genesis_state);
73 
74  // Nothing to do
75  for (uint32_t i = 0; i <= SCORUM_BLOCKID_POOL_SIZE; ++i)
76  create<block_summary_object>([&](block_summary_object&) {});
77 
78  create<hardfork_property_object>(
79  [&](hardfork_property_object& hpo) { hpo.processed_hardforks.push_back(get_genesis_time()); });
80  }
81  catch (fc::exception& er)
82  {
83  throw std::logic_error(std::string("Invalid genesis: ") + er.to_detail_string());
84  }
85 }
86 
88  : _db(db)
89  , _genesis_state(genesis_state)
90 {
91  genesis::accounts_initializator_impl accounts_initializator;
92  genesis::founders_initializator_impl founders_initializator;
93  genesis::global_property_initializator_impl global_property_initializator;
94  genesis::registration_bonus_initializator_impl registration_bonus_initializator;
95  genesis::registration_initializator_impl registration_initializator;
96  genesis::rewards_initializator_impl rewards_initializator;
97  genesis::steemit_bounty_account_initializator_impl steemit_bounty_account_initializator;
98  genesis::witness_schedule_initializator_impl witness_schedule_initializator;
99  genesis::witnesses_initializator_impl witnesses_initializator;
100  genesis::dev_pool_initializator_impl dev_pool_initializator;
101  genesis::dev_committee_initializator_impl dev_committee_initializator;
102  genesis::advertising_property_initializator_impl advertising_property_initializator;
103  genesis::betting_property_initializator_impl betting_property_initializator;
104 
105  genesis::initializator_context ctx(_db, _db, _genesis_state);
106 
107  accounts_initializator.after(global_property_initializator).apply(ctx);
108  rewards_initializator.after(global_property_initializator).apply(ctx);
109  founders_initializator.after(accounts_initializator).apply(ctx);
110  witnesses_initializator.after(accounts_initializator).apply(ctx);
111  registration_initializator.after(accounts_initializator).apply(ctx);
112  steemit_bounty_account_initializator.after(accounts_initializator).apply(ctx);
113  registration_bonus_initializator.after(registration_initializator).after(accounts_initializator).apply(ctx);
114  witness_schedule_initializator.after(witnesses_initializator).apply(ctx);
115  dev_pool_initializator.after(global_property_initializator).apply(ctx);
116  dev_committee_initializator.after(accounts_initializator).apply(ctx);
117  advertising_property_initializator.after(dev_committee_initializator).apply(ctx);
118  betting_property_initializator.after(dev_committee_initializator).apply(ctx);
119 }
120 
121 } // namespace chain
122 } // namespace scorum
tracks minimal information about past blocks to implement TaPOS
tracks the blockchain state in an extensible manner
Definition: database.hpp:52
void init_genesis(const genesis_state_type &genesis_state)
Definition: genesis.cpp:40
time_point_sec get_genesis_time() const
Definition: genesis.cpp:30
void set_initial_timestamp(const genesis_state_type &genesis_state)
Definition: genesis.cpp:35
@ skip_authority_check
used while reindexing – disables any checking of authority on transactions
Definition: database.hpp:85
node_property_object & node_properties()
Definition: database.cpp:1252
db_genesis(db_genesis const &)=delete
task & after(task &impl)
Definition: tasks_base.hpp:44
void apply(ContextType &ctx)
Definition: tasks_base.hpp:55
#define SCORUM_BLOCKID_POOL_SIZE
Definition: config.hpp:132
Definition: asset.cpp:15
std::vector< witness_type > witness_candidates