30 #ifndef ELECTRONEUM_VALIDATORS_H 31 #define ELECTRONEUM_VALIDATORS_H 33 #include <boost/algorithm/hex.hpp> 36 #include "include_base_utils.h" 37 #include "net/http_client.h" 38 #include "storages/http_abstract_invoke.h" 39 #include "storages/portable_storage.h" 42 #include "math_helper.h" 80 Validator(
const string &publicKey, uint64_t startHeight, uint64_t endHeight);
83 return this->publicKey;
87 return this->startHeight;
91 return this->endHeight;
95 this->endHeight = end_height;
99 return height >= this->startHeight && (
height <= this->endHeight || this->endHeight == 0);
105 vector<std::unique_ptr<Validator>>
list;
108 string endpoint_addr =
"vl.electroneum.com";
109 string endpoint_port =
"80";
110 string testnet_endpoint_addr =
"vl.thesecurityteam.rocks";
111 string testnet_endpoint_port =
"80";
112 milliseconds endpoint_timeout = milliseconds(10000);
116 uint32_t timeout = 60*60*12;
117 uint32_t timeout_grace_period = this->timeout * 0.1;
118 bool isInitial =
true;
121 bool testnet =
false;
125 void add(
const string &key, uint64_t startHeight, uint64_t endHeight);
126 void addOrUpdate(
const string &key, uint64_t startHeight, uint64_t endHeight);
127 void update(
const string &key, uint64_t endHeight);
128 std::unique_ptr<Validator> find(
const string &key);
129 bool exists(
const string &key);
135 testnet ? this->http_client.set_server(this->testnet_endpoint_addr, this->testnet_endpoint_port, boost::none) :
136 this->http_client.set_server(this->endpoint_addr, this->endpoint_port, boost::none);
137 this->testnet = testnet;
138 this->m_p2p = pprotocol;
143 all_of(this->list.begin(), this->list.end(), [&
height, &keys, &convert_to_byte](std::unique_ptr<Validator> &v) {
144 if (v->isWithinRange(
height)) {
145 const string k = convert_to_byte ? unhex(v->getPublicKey()) : v->getPublicKey();
160 if (!get_http_json(
"/", res, this->http_client)) {
161 LOG_PRINT_L1(
"Unable to get validator_list json from " << this->endpoint_addr <<
":" << this->endpoint_port);
164 this->timeout = 60*60*24;
168 MGINFO_MAGENTA(
"Validators list successfully refreshed from JSON endpoint! Timeout = 12 hours");
174 this->timeout = 60*60*1;
175 MGINFO_MAGENTA(
"Validators list successfully refreshed from peers! Timeout = 1 hour");
181 LOG_PRINT_L1(
"Validator List Grace Period");
189 this->timeout = 60*60*1;
192 MGINFO_MAGENTA(
"Validators list successfully refreshed from database! Timeout = 1 hour");
210 return this->serialized_v_list;
215 load_t_from_json(res, v_list);
217 return validate_and_update(res, saveToDB, isEmergencyUpdate);
243 #endif //ELECTRONEUM_VALIDATORS_H virtual bool request_validators_list_to_all()=0
vector< string > getApplicablePublicKeys(uint64_t height, bool convert_to_byte=false)
Definition: validators.h:141
virtual std::string get_validator_list() const =0
Validators(cryptonote::BlockchainDB &db, cryptonote::i_cryptonote_protocol *pprotocol, bool testnet)
Definition: validators.h:134
bool isValid()
Definition: validators.h:220
uint64_t height
Definition: blockchain.cpp:87
string getSerializedValidatorList()
Definition: validators.h:204
void on_idle()
Definition: validators.h:232
Definition: block_queue.cpp:41
bool isWithinRange(uint64_t height)
Definition: validators.h:98
Definition: validators_commands_defs.h:61
void enable()
Definition: validators.h:228
void setEndHeight(uint64_t end_height)
Definition: validators.h:94
time_t last_updated
Definition: validators.h:115
uint64_t startHeight
Definition: validators.h:75
const uint64_t getStartHeight()
Definition: validators.h:86
const string getPublicKey()
Definition: validators.h:82
Definition: validators.h:103
cryptonote::i_cryptonote_protocol * m_p2p
Definition: validators.h:123
Definition: validators.cpp:35
bool loadValidatorsList()
Definition: validators.h:153
const uint64_t getEndHeight()
Definition: validators.h:90
string serialized_v_list
Definition: validators.h:113
string publicKey
Definition: validators.h:74
Definition: validators.h:72
ValidatorsState
Definition: validators.h:53
uint64_t current_list_timestamp
Definition: validators.h:106
vector< std::unique_ptr< Validator > > list
Definition: validators.h:105
uint64_t endHeight
Definition: validators.h:76
Definition: validators_commands_defs.h:66
bool isEnabled()
Definition: validators.h:224
list_update_outcome
Definition: validators.h:61
The BlockchainDB backing store interface declaration/contract.
Definition: blockchain_db.h:342
once_a_time_seconds< 60, true > m_load_validators_interval
Definition: validators.h:119
cryptonote::BlockchainDB & m_db
Definition: validators.h:120
list_update_outcome setValidatorsList(const string &v_list, bool saveToDB, bool isEmergencyUpdate=false)
Definition: validators.h:213
epee::net_utils::http::http_simple_client http_client
Definition: validators.h:107
Definition: cryptonote_protocol_handler_common.h:42