Scorum
witness.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 namespace scorum {
7 namespace protocol {
8 struct chain_properties;
9 }
10 namespace chain {
11 
12 namespace dba {
13 template <typename> class db_accessor;
14 }
15 
16 class account_object;
17 
19 
20 struct witness_service_i : public base_service_i<witness_object>
21 {
24 
25  virtual const witness_object& get(const account_name_type& owner) const = 0;
26 
27  virtual bool is_exists(const account_name_type& owner) const = 0;
28 
29  virtual const witness_object& get_top_witness() const = 0;
30 
32  const std::string& url,
33  const public_key_type& block_signing_key,
34  const chain_properties& props)
35  = 0;
36 
38  const public_key_type& block_signing_key)
39  = 0;
40 
41  virtual void update_witness(const witness_object& witness,
42  const std::string& url,
43  const public_key_type& block_signing_key,
44  const chain_properties& props)
45  = 0;
46 
48  virtual void adjust_witness_vote(const witness_object& witness, const share_type& delta) = 0;
49 
51  virtual void adjust_witness_votes(const account_object& account, const share_type& delta) = 0;
52 };
53 
54 class dbs_witness : public dbs_service_base<witness_service_i>
55 {
56  friend class dbservice_dbs_factory;
57 
58 public:
59  explicit dbs_witness(dba::db_index& db,
63 
66 
67  const witness_object& get(const account_name_type& owner) const override;
68 
69  bool is_exists(const account_name_type& owner) const override;
70 
71  const witness_object& get_top_witness() const override;
72 
74  const std::string& url,
75  const public_key_type& block_signing_key,
76  const chain_properties& props) override;
77 
79  const public_key_type& block_signing_key) override;
80 
81  void update_witness(const witness_object& witness,
82  const std::string& url,
83  const public_key_type& block_signing_key,
84  const chain_properties& props) override;
85 
87  void adjust_witness_vote(const witness_object& witness, const share_type& delta) override;
88 
90  void adjust_witness_votes(const account_object& account, const share_type& delta) override;
91 
92 private:
93  const witness_object& create_internal(const account_name_type& owner, const public_key_type& block_signing_key);
94  block_info get_head_block_context();
95 
97  witness_schedule_service_i& _witness_schedule_svc;
99 };
100 } // namespace chain
101 } // namespace scorum
virtual const object_type & get() const override
const witness_object & create_witness(const account_name_type &owner, const std::string &url, const public_key_type &block_signing_key, const chain_properties &props) override
Definition: witness.cpp:48
void update_witness(const witness_object &witness, const std::string &url, const public_key_type &block_signing_key, const chain_properties &props) override
Definition: witness.cpp:86
void adjust_witness_votes(const account_object &account, const share_type &delta) override
Definition: witness.cpp:98
dbs_witness(dba::db_index &db, witness_schedule_service_i &, dynamic_global_property_service_i &, dba::db_accessor< chain_property_object > &)
Definition: witness.cpp:16
const witness_object & get_top_witness() const override
Definition: witness.cpp:41
const witness_object & create_initial_witness(const account_name_type &owner, const public_key_type &block_signing_key) override
Definition: witness.cpp:66
void adjust_witness_vote(const witness_object &witness, const share_type &delta) override
Definition: witness.cpp:109
scorum::protocol::chain_properties chain_properties
Definition: witness.hpp:18
fc::safe< share_value_type > share_type
Definition: types.hpp:73
fc::fixed_string_16 account_name_type
Definition: types.hpp:62
Definition: asset.cpp:15
virtual const witness_object & create_initial_witness(const account_name_type &owner, const public_key_type &block_signing_key)=0
virtual void adjust_witness_vote(const witness_object &witness, const share_type &delta)=0
virtual const witness_object & get(const account_name_type &owner) const =0
virtual const witness_object & get_top_witness() const =0
virtual bool is_exists(const account_name_type &owner) const =0
virtual const witness_object & create_witness(const account_name_type &owner, const std::string &url, const public_key_type &block_signing_key, const chain_properties &props)=0
virtual void update_witness(const witness_object &witness, const std::string &url, const public_key_type &block_signing_key, const chain_properties &props)=0
virtual void adjust_witness_votes(const account_object &account, const share_type &delta)=0