37 #include <fc/time.hpp>
39 #include <graphene/utilities/key_conversion.hpp>
41 #include <fc/crypto/hex.hpp>
42 #include <fc/smart_ref_impl.hpp>
44 #include <graphene/utilities/git_revision.hpp>
45 #include <fc/git_revision.hpp>
65 idump((user)(password));
69 if (acc->password_hash_b64 !=
"*")
71 std::string password_salt = fc::base64_decode(acc->password_salt_b64);
72 std::string acc_password_hash = fc::base64_decode(acc->password_hash_b64);
74 fc::sha256 hash_obj = fc::sha256::hash(password + password_salt);
75 if (hash_obj.data_size() != acc_password_hash.length())
77 if (memcmp(hash_obj.data(), acc_password_hash.c_str(), hash_obj.data_size()) != 0)
81 idump((acc->allowed_apis));
82 std::shared_ptr<api_session_data> session = _ctx.
session.lock();
85 std::map<std::string, fc::api_ptr>& _api_map = session->api_map;
87 for (
const std::string& api_name : acc->allowed_apis)
89 auto it = _api_map.find(api_name);
90 if (it != _api_map.end())
92 wlog(
"known api: ${api}", (
"api", api_name));
104 std::shared_ptr<api_session_data> session = _ctx.
session.lock();
107 const std::map<std::string, fc::api_ptr>& _api_map = session->api_map;
108 auto it = _api_map.find(api_name);
109 if (it == _api_map.end())
111 wlog(
"unknown api: ${api}", (
"api", api_name));
112 return fc::api_ptr();
116 ilog(
"found api: ${api}", (
"api", api_name));
118 FC_ASSERT(it->second !=
nullptr);
125 fc::string(fc::git_revision_sha));
139 _applied_block_connection
146 if (max_block_age < 0)
149 fc::time_point_sec now = fc::time_point::now();
153 return (dgpo.
time < now - fc::seconds(max_block_age));
159 _max_block_age = max_block_age;
165 auto capture_this = shared_from_this();
167 fc::async([
this, capture_this, b]() {
168 int32_t block_num = int32_t(b.
block_num());
169 if (_callbacks.size())
171 for (
size_t trx_num = 0; trx_num < b.
transactions.size(); ++trx_num)
175 auto itr = _callbacks.find(
id);
176 if (itr == _callbacks.end())
179 itr->second = [](variant) {};
187 auto exp_it = _callbacks_expirations.begin();
188 if (exp_it == _callbacks_expirations.end())
194 auto cb_it = _callbacks.find(txid);
196 if (cb_it == _callbacks.end())
203 _callbacks.erase(cb_it);
205 _callbacks_expirations.erase(exp_it);
222 _app.
p2p_node()->broadcast_transaction(trx);
234 fc::promise<fc::variant>::ptr prom(
new fc::promise<fc::variant>());
236 return fc::future<fc::variant>(prom).wait();
249 _app.
p2p_node()->broadcast(graphene::net::block_message(b));
257 : _hardfork_svc(hardfork_svc)
272 return _hardfork_svc.has_hardfork(SCORUM_HARDFORK_0_4)
273 || (idx != proposal_operation::tag<development_committee_empower_betting_moderator_operation>::value
274 && idx != proposal_operation::tag<development_committee_change_betting_resolve_delay_operation>::value);
324 if (_app.is_read_only())
326 _app.get_write_node_net_api()->broadcast_transaction_with_callback(cb, trx);
330 FC_ASSERT(!check_max_block_age(_max_block_age));
331 auto& hardfork_svc = _app.chain_database()->hardfork_property_service();
338 _callbacks[trx.
id()] = cb;
339 _callbacks_expirations[trx.
expiration].push_back(trx.
id());
341 _app.chain_database()->push_transaction(trx);
342 _app.p2p_node()->broadcast_transaction(trx);
357 fc::mutable_variant_object
result = _app.
p2p_node()->network_get_info();
358 result[
"connection_count"] = _app.
p2p_node()->get_connection_count();
369 return _app.
p2p_node()->get_connected_peers();
374 return _app.
p2p_node()->get_potential_peers();
379 return _app.
p2p_node()->get_advanced_node_parameters();
384 return _app.
p2p_node()->set_advanced_node_parameters(params);
std::shared_ptr< chain::database > chain_database() const
bool is_read_only() const
graphene::net::node_ptr p2p_node()
fc::api< network_broadcast_api > & get_write_node_net_api()
fc::optional< api_access_info > get_api_access_info(const std::string &username) const
fc::api_ptr create_api_by_name(const api_context &ctx)
void get_max_block_age(int32_t &result)
bool operator()(const scorum::protocol::cancel_pending_bets_operation &) const
bool operator()(const scorum::protocol::update_game_markets_operation &) const
bool operator()(const scorum::protocol::post_bet_operation &) const
check_banned_operations_visitor(hardfork_property_service_i &hardfork_svc)
bool operator()(const scorum::protocol::proposal_create_operation &op) const
bool operator()(const scorum::protocol::delegate_sp_from_reg_pool_operation &) const
bool operator()(const scorum::protocol::post_game_results_operation &) const
bool operator()(const Op &) const
bool operator()(const scorum::protocol::update_game_start_time_operation &) const
bool operator()(const scorum::protocol::cancel_game_operation &) const
bool operator()(const scorum::protocol::create_game_operation &) const
scorum_version_info get_version()
bool login(const std::string &user, const std::string &password)
Authenticate to the RPC server.
fc::api_ptr get_api_by_name(const std::string &api_name) const
login_api(const api_context &ctx)
void on_api_startup()
internal method, not exposed via JSON RPC
fc::variant broadcast_transaction_synchronous(const signed_transaction &trx)
void broadcast_transaction_with_callback(confirmation_callback cb, const signed_transaction &trx)
bool check_max_block_age(int32_t max_block_age)
void broadcast_transaction(const signed_transaction &trx)
Broadcast a transaction to the network.
std::function< void(variant)> confirmation_callback
network_broadcast_api(const api_context &a)
void on_api_startup()
internal method, not exposed via JSON RPC
void on_applied_block(const signed_block &b)
Not reflected, thus not accessible to API clients.
void broadcast_block(const signed_block &block)
void set_max_block_age(int32_t max_block_age)
void add_node(const fc::ip::endpoint &ep)
add_node Connect to a new peer
std::vector< graphene::net::potential_peer_record > get_potential_peers() const
Return list of potential peers.
fc::variant_object get_advanced_node_parameters() const
Get advanced node parameters, such as desired and max number of connections.
void on_api_startup()
internal method, not exposed via JSON RPC
std::vector< graphene::net::peer_status > get_connected_peers() const
Get status of all current connections to peers.
network_node_api(const api_context &a)
void set_advanced_node_parameters(const fc::variant_object ¶ms)
Set advanced node parameters, such as desired and max number of connections.
fc::variant_object get_info() const
Return general network information, such as p2p port.
Maintains global state information.
time_point_sec time
Current head block time.
#define SCORUM_BLOCKCHAIN_VERSION
boost::signals2::scoped_connection connect_signal(boost::signals2::signal< void(Args...)> &sig, C &c, void(C::*f)(Args...))
fc::ripemd160 transaction_id_type
std::weak_ptr< api_session_data > session
virtual bool has_hardfork(uint32_t hardfork) const =0
This operation canceling game.
This operation cancel unmatched bets by id.
This operation creates game object.
This operation creates bet.
With this operation moderator provides game results(wincases)
Creates new committee proposal.
proposal_operation operation
std::vector< signed_transaction > transactions
transaction_id_type id() const
std::vector< operation > operations
fc::time_point_sec expiration
This operation updates game markets list.
This operation updates game start time.