Monero
Loading...
Searching...
No Matches
core_rpc_server.h
Go to the documentation of this file.
1// Copyright (c) 2014-2022, The Monero Project
2//
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without modification, are
6// permitted provided that the following conditions are met:
7//
8// 1. Redistributions of source code must retain the above copyright notice, this list of
9// conditions and the following disclaimer.
10//
11// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12// of conditions and the following disclaimer in the documentation and/or other
13// materials provided with the distribution.
14//
15// 3. Neither the name of the copyright holder nor the names of its contributors may be
16// used to endorse or promote products derived from this software without specific
17// prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
30
31#pragma once
32
33#include <memory>
34
35#include <boost/program_options/options_description.hpp>
36#include <boost/program_options/variables_map.hpp>
37
38#include "bootstrap_daemon.h"
40#include "net/http_client.h"
43#include "p2p/net_node.h"
45#include "rpc_payment.h"
46
47#undef MONERO_DEFAULT_LOG_CATEGORY
48#define MONERO_DEFAULT_LOG_CATEGORY "daemon.rpc"
49
50// yes, epee doesn't properly use its full namespace when calling its
51// functions from macros. *sigh*
52using namespace epee;
53
54namespace cryptonote
55{
56 /************************************************************************/
57 /* */
58 /************************************************************************/
59 class core_rpc_server: public epee::http_server_impl_base<core_rpc_server>
60 {
61 public:
62
80
82
84 core& cr
86 );
88
89 static void init_options(boost::program_options::options_description& desc);
90 bool init(
91 const boost::program_options::variables_map& vm,
92 const bool restricted,
93 const std::string& port,
94 bool allow_rpc_payment,
95 const std::string& proxy = {}
96 );
97 network_type nettype() const { return m_core.get_nettype(); }
98
99 CHAIN_HTTP_TO_MAP2(connection_context); //forward http requests to uri map
100
144 BEGIN_JSON_RPC_MAP("/json_rpc")
193
208 bool on_get_info(const COMMAND_RPC_GET_INFO::request& req, COMMAND_RPC_GET_INFO::response& res, const connection_context *ctx = NULL);
210 bool on_save_bc(const COMMAND_RPC_SAVE_BC::request& req, COMMAND_RPC_SAVE_BC::response& res, const connection_context *ctx = NULL);
222 bool on_get_limit(const COMMAND_RPC_GET_LIMIT::request& req, COMMAND_RPC_GET_LIMIT::response& res, const connection_context *ctx = NULL);
223 bool on_set_limit(const COMMAND_RPC_SET_LIMIT::request& req, COMMAND_RPC_SET_LIMIT::response& res, const connection_context *ctx = NULL);
224 bool on_out_peers(const COMMAND_RPC_OUT_PEERS::request& req, COMMAND_RPC_OUT_PEERS::response& res, const connection_context *ctx = NULL);
225 bool on_in_peers(const COMMAND_RPC_IN_PEERS::request& req, COMMAND_RPC_IN_PEERS::response& res, const connection_context *ctx = NULL);
226 bool on_update(const COMMAND_RPC_UPDATE::request& req, COMMAND_RPC_UPDATE::response& res, const connection_context *ctx = NULL);
229
230 //json_rpc
232 bool on_getblockhash(const COMMAND_RPC_GETBLOCKHASH::request& req, COMMAND_RPC_GETBLOCKHASH::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
233 bool on_getblocktemplate(const COMMAND_RPC_GETBLOCKTEMPLATE::request& req, COMMAND_RPC_GETBLOCKTEMPLATE::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
234 bool on_getminerdata(const COMMAND_RPC_GETMINERDATA::request& req, COMMAND_RPC_GETMINERDATA::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
235 bool on_calcpow(const COMMAND_RPC_CALCPOW::request& req, COMMAND_RPC_CALCPOW::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
236 bool on_add_aux_pow(const COMMAND_RPC_ADD_AUX_POW::request& req, COMMAND_RPC_ADD_AUX_POW::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
237 bool on_submitblock(const COMMAND_RPC_SUBMITBLOCK::request& req, COMMAND_RPC_SUBMITBLOCK::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
238 bool on_generateblocks(const COMMAND_RPC_GENERATEBLOCKS::request& req, COMMAND_RPC_GENERATEBLOCKS::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
239 bool on_get_last_block_header(const COMMAND_RPC_GET_LAST_BLOCK_HEADER::request& req, COMMAND_RPC_GET_LAST_BLOCK_HEADER::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
242 bool on_get_block_headers_range(const COMMAND_RPC_GET_BLOCK_HEADERS_RANGE::request& req, COMMAND_RPC_GET_BLOCK_HEADERS_RANGE::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
243 bool on_get_block(const COMMAND_RPC_GET_BLOCK::request& req, COMMAND_RPC_GET_BLOCK::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
244 bool on_get_connections(const COMMAND_RPC_GET_CONNECTIONS::request& req, COMMAND_RPC_GET_CONNECTIONS::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
245 bool on_get_info_json(const COMMAND_RPC_GET_INFO::request& req, COMMAND_RPC_GET_INFO::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
246 bool on_hard_fork_info(const COMMAND_RPC_HARD_FORK_INFO::request& req, COMMAND_RPC_HARD_FORK_INFO::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
247 bool on_set_bans(const COMMAND_RPC_SETBANS::request& req, COMMAND_RPC_SETBANS::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
248 bool on_get_bans(const COMMAND_RPC_GETBANS::request& req, COMMAND_RPC_GETBANS::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
249 bool on_banned(const COMMAND_RPC_BANNED::request& req, COMMAND_RPC_BANNED::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
250 bool on_flush_txpool(const COMMAND_RPC_FLUSH_TRANSACTION_POOL::request& req, COMMAND_RPC_FLUSH_TRANSACTION_POOL::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
251 bool on_get_output_histogram(const COMMAND_RPC_GET_OUTPUT_HISTOGRAM::request& req, COMMAND_RPC_GET_OUTPUT_HISTOGRAM::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
252 bool on_get_version(const COMMAND_RPC_GET_VERSION::request& req, COMMAND_RPC_GET_VERSION::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
253 bool on_get_coinbase_tx_sum(const COMMAND_RPC_GET_COINBASE_TX_SUM::request& req, COMMAND_RPC_GET_COINBASE_TX_SUM::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
254 bool on_get_base_fee_estimate(const COMMAND_RPC_GET_BASE_FEE_ESTIMATE::request& req, COMMAND_RPC_GET_BASE_FEE_ESTIMATE::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
255 bool on_get_alternate_chains(const COMMAND_RPC_GET_ALTERNATE_CHAINS::request& req, COMMAND_RPC_GET_ALTERNATE_CHAINS::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
256 bool on_relay_tx(const COMMAND_RPC_RELAY_TX::request& req, COMMAND_RPC_RELAY_TX::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
257 bool on_sync_info(const COMMAND_RPC_SYNC_INFO::request& req, COMMAND_RPC_SYNC_INFO::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
259 bool on_get_output_distribution(const COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::request& req, COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
260 bool on_prune_blockchain(const COMMAND_RPC_PRUNE_BLOCKCHAIN::request& req, COMMAND_RPC_PRUNE_BLOCKCHAIN::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
261 bool on_flush_cache(const COMMAND_RPC_FLUSH_CACHE::request& req, COMMAND_RPC_FLUSH_CACHE::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
262 bool on_rpc_access_info(const COMMAND_RPC_ACCESS_INFO::request& req, COMMAND_RPC_ACCESS_INFO::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
263 bool on_rpc_access_submit_nonce(const COMMAND_RPC_ACCESS_SUBMIT_NONCE::request& req, COMMAND_RPC_ACCESS_SUBMIT_NONCE::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
264 bool on_rpc_access_pay(const COMMAND_RPC_ACCESS_PAY::request& req, COMMAND_RPC_ACCESS_PAY::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
265 bool on_rpc_access_tracking(const COMMAND_RPC_ACCESS_TRACKING::request& req, COMMAND_RPC_ACCESS_TRACKING::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
266 bool on_rpc_access_data(const COMMAND_RPC_ACCESS_DATA::request& req, COMMAND_RPC_ACCESS_DATA::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
267 bool on_rpc_access_account(const COMMAND_RPC_ACCESS_ACCOUNT::request& req, COMMAND_RPC_ACCESS_ACCOUNT::response& res, epee::json_rpc::error& error_resp, const connection_context *ctx = NULL);
268 //-----------------------
269
270private:
272 bool check_core_ready();
273 bool add_host_fail(const connection_context *ctx, unsigned int score = 1);
274
275 //utils
277 bool fill_block_header_response(const block& blk, bool orphan_status, uint64_t height, const crypto::hash& hash, block_header_response& response, bool fill_pow_hash);
278 std::map<std::string, bool> get_public_nodes(uint32_t credits_per_hash_threshold = 0);
280 const std::string &address,
281 const std::string &username_password,
282 const std::string &proxy);
284 const std::string &address,
285 const boost::optional<epee::net_utils::http::login> &credentials,
286 const std::string &proxy);
288 template <typename COMMAND_TYPE>
289 bool use_bootstrap_daemon_if_necessary(const invoke_http_mode &mode, const std::string &command_name, const typename COMMAND_TYPE::request& req, typename COMMAND_TYPE::response& res, bool &r);
290 bool get_block_template(const account_public_address &address, const crypto::hash *prev_block, const cryptonote::blobdata &extra_nonce, size_t &reserved_offset, cryptonote::difficulty_type &difficulty, uint64_t &height, uint64_t &expected_reward, block &b, uint64_t &seed_height, crypto::hash &seed_hash, crypto::hash &next_seed_hash, epee::json_rpc::error &error_resp);
291 bool check_payment(const std::string &client, uint64_t payment, const std::string &rpc, bool same_ts, std::string &message, uint64_t &credits, std::string &top_hash);
292
295 boost::shared_mutex m_bootstrap_daemon_mutex;
296 std::unique_ptr<bootstrap_daemon> m_bootstrap_daemon;
299 std::chrono::system_clock::time_point m_bootstrap_height_check_time;
303 std::map<std::string, uint64_t> m_host_fails_score;
304 std::unique_ptr<rpc_payment> m_rpc_payment;
307 };
308}
309
cryptonote::block b
Definition: block.cpp:40
int pop_blocks(cryptonote::core &core, int num_blocks)
Definition: blockchain_import.cpp:95
Definition: core_rpc_server.h:60
bool disable_rpc_ban
Definition: core_rpc_server.h:305
bool on_get_outs_bin(const COMMAND_RPC_GET_OUTPUTS_BIN::request &req, COMMAND_RPC_GET_OUTPUTS_BIN::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:778
bool on_rpc_access_info(const COMMAND_RPC_ACCESS_INFO::request &req, COMMAND_RPC_ACCESS_INFO::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3358
bool on_out_peers(const COMMAND_RPC_OUT_PEERS::request &req, COMMAND_RPC_OUT_PEERS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2999
bool on_get_base_fee_estimate(const COMMAND_RPC_GET_BASE_FEE_ESTIMATE::request &req, COMMAND_RPC_GET_BASE_FEE_ESTIMATE::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2889
bool on_mining_status(const COMMAND_RPC_MINING_STATUS::request &req, COMMAND_RPC_MINING_STATUS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1379
bool on_prune_blockchain(const COMMAND_RPC_PRUNE_BLOCKCHAIN::request &req, COMMAND_RPC_PRUNE_BLOCKCHAIN::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3333
bool on_get_transactions(const COMMAND_RPC_GET_TRANSACTIONS::request &req, COMMAND_RPC_GET_TRANSACTIONS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:875
std::string m_bootstrap_daemon_proxy
Definition: core_rpc_server.h:297
bool on_get_info(const COMMAND_RPC_GET_INFO::request &req, COMMAND_RPC_GET_INFO::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:474
bool on_stop_daemon(const COMMAND_RPC_STOP_DAEMON::request &req, COMMAND_RPC_STOP_DAEMON::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1675
bool on_get_coinbase_tx_sum(const COMMAND_RPC_GET_COINBASE_TX_SUM::request &req, COMMAND_RPC_GET_COINBASE_TX_SUM::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2872
bool on_banned(const COMMAND_RPC_BANNED::request &req, COMMAND_RPC_BANNED::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2677
bool on_get_height(const COMMAND_RPC_GET_HEIGHT::request &req, COMMAND_RPC_GET_HEIGHT::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:459
static const command_line::arg_descriptor< bool > arg_rpc_ssl_allow_any_cert
Definition: core_rpc_server.h:72
~core_rpc_server()
Definition: core_rpc_server.cpp:257
bool fill_block_header_response(const block &blk, bool orphan_status, uint64_t height, const crypto::hash &hash, block_header_response &response, bool fill_pow_hash)
Definition: core_rpc_server.cpp:2227
static const command_line::arg_descriptor< std::string > arg_rpc_ssl_ca_certificates
Definition: core_rpc_server.h:70
bool on_hard_fork_info(const COMMAND_RPC_HARD_FORK_INFO::request &req, COMMAND_RPC_HARD_FORK_INFO::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2625
epee::critical_section m_host_fails_score_lock
Definition: core_rpc_server.h:302
static const command_line::arg_descriptor< std::string > arg_rpc_payment_address
Definition: core_rpc_server.h:76
bool on_pop_blocks(const COMMAND_RPC_POP_BLOCKS::request &req, COMMAND_RPC_POP_BLOCKS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3122
bool on_add_aux_pow(const COMMAND_RPC_ADD_AUX_POW::request &req, COMMAND_RPC_ADD_AUX_POW::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1967
bool on_get_output_distribution(const COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::request &req, COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3232
bool on_set_log_categories(const COMMAND_RPC_SET_LOG_CATEGORIES::request &req, COMMAND_RPC_SET_LOG_CATEGORIES::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1549
bool check_payment(const std::string &client, uint64_t payment, const std::string &rpc, bool same_ts, std::string &message, uint64_t &credits, std::string &top_hash)
Definition: core_rpc_server.cpp:392
bool on_get_block_header_by_hash(const COMMAND_RPC_GET_BLOCK_HEADER_BY_HASH::request &req, COMMAND_RPC_GET_BLOCK_HEADER_BY_HASH::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2374
nodetool::node_server< cryptonote::t_cryptonote_protocol_handler< cryptonote::core > > & m_p2p
Definition: core_rpc_server.h:294
static const command_line::arg_descriptor< std::string > arg_bootstrap_daemon_proxy
Definition: core_rpc_server.h:75
bool on_save_bc(const COMMAND_RPC_SAVE_BC::request &req, COMMAND_RPC_SAVE_BC::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1420
bool on_relay_tx(const COMMAND_RPC_RELAY_TX::request &req, COMMAND_RPC_RELAY_TX::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3134
bool on_get_outs(const COMMAND_RPC_GET_OUTPUTS::request &req, COMMAND_RPC_GET_OUTPUTS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:808
bool on_get_peer_list(const COMMAND_RPC_GET_PEER_LIST::request &req, COMMAND_RPC_GET_PEER_LIST::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1432
bool add_host_fail(const connection_context *ctx, unsigned int score=1)
Definition: core_rpc_server.cpp:439
bool on_set_limit(const COMMAND_RPC_SET_LIMIT::request &req, COMMAND_RPC_SET_LIMIT::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2959
bool on_get_info_json(const COMMAND_RPC_GET_INFO::request &req, COMMAND_RPC_GET_INFO::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2614
static const command_line::arg_descriptor< std::string > arg_rpc_ssl_private_key
Definition: core_rpc_server.h:68
bool on_submitblock(const COMMAND_RPC_SUBMITBLOCK::request &req, COMMAND_RPC_SUBMITBLOCK::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2086
bool on_get_blocks_by_height(const COMMAND_RPC_GET_BLOCKS_BY_HEIGHT::request &req, COMMAND_RPC_GET_BLOCKS_BY_HEIGHT::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:713
bool on_get_limit(const COMMAND_RPC_GET_LIMIT::request &req, COMMAND_RPC_GET_LIMIT::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2946
bool on_set_bootstrap_daemon(const COMMAND_RPC_SET_BOOTSTRAP_DAEMON::request &req, COMMAND_RPC_SET_BOOTSTRAP_DAEMON::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1653
epee::net_utils::connection_context_base connection_context
Definition: core_rpc_server.h:81
bool on_rpc_access_submit_nonce(const COMMAND_RPC_ACCESS_SUBMIT_NONCE::request &req, COMMAND_RPC_ACCESS_SUBMIT_NONCE::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3433
static const command_line::arg_descriptor< uint64_t > arg_rpc_payment_difficulty
Definition: core_rpc_server.h:77
bool on_get_block_header_by_height(const COMMAND_RPC_GET_BLOCK_HEADER_BY_HEIGHT::request &req, COMMAND_RPC_GET_BLOCK_HEADER_BY_HEIGHT::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2503
bool check_core_ready()
Definition: core_rpc_server.cpp:430
bool on_stop_mining(const COMMAND_RPC_STOP_MINING::request &req, COMMAND_RPC_STOP_MINING::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1359
bool on_send_raw_tx(const COMMAND_RPC_SEND_RAW_TX::request &req, COMMAND_RPC_SEND_RAW_TX::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1207
boost::shared_mutex m_bootstrap_daemon_mutex
Definition: core_rpc_server.h:295
static const command_line::arg_descriptor< std::string > arg_rpc_ssl_certificate
Definition: core_rpc_server.h:69
bool use_bootstrap_daemon_if_necessary(const invoke_http_mode &mode, const std::string &command_name, const typename COMMAND_TYPE::request &req, typename COMMAND_TYPE::response &res, bool &r)
Definition: core_rpc_server.cpp:2253
bool on_set_log_hash_rate(const COMMAND_RPC_SET_LOG_HASH_RATE::request &req, COMMAND_RPC_SET_LOG_HASH_RATE::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1521
CHAIN_HTTP_TO_MAP2(connection_context)
bool on_get_net_stats(const COMMAND_RPC_GET_NET_STATS::request &req, COMMAND_RPC_GET_NET_STATS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:557
bool on_sync_info(const COMMAND_RPC_SYNC_INFO::request &req, COMMAND_RPC_SYNC_INFO::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3186
static const command_line::arg_descriptor< bool > arg_public_node
Definition: core_rpc_server.h:63
invoke_http_mode
Definition: core_rpc_server.h:287
@ JON
Definition: core_rpc_server.h:287
@ JON_RPC
Definition: core_rpc_server.h:287
@ BIN
Definition: core_rpc_server.h:287
bool on_get_transaction_pool(const COMMAND_RPC_GET_TRANSACTION_POOL::request &req, COMMAND_RPC_GET_TRANSACTION_POOL::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1558
bool on_calcpow(const COMMAND_RPC_CALCPOW::request &req, COMMAND_RPC_CALCPOW::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1930
bool on_get_alt_blocks_hashes(const COMMAND_RPC_GET_ALT_BLOCKS_HASHES::request &req, COMMAND_RPC_GET_ALT_BLOCKS_HASHES::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:686
uint64_t get_block_reward(const block &blk)
Definition: core_rpc_server.cpp:2217
bool on_get_block(const COMMAND_RPC_GET_BLOCK::request &req, COMMAND_RPC_GET_BLOCK::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2538
bool get_block_template(const account_public_address &address, const crypto::hash *prev_block, const cryptonote::blobdata &extra_nonce, size_t &reserved_offset, cryptonote::difficulty_type &difficulty, uint64_t &height, uint64_t &expected_reward, block &b, uint64_t &seed_height, crypto::hash &seed_hash, crypto::hash &next_seed_hash, epee::json_rpc::error &error_resp)
Definition: core_rpc_server.cpp:1745
bool on_get_output_distribution_bin(const COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::request &req, COMMAND_RPC_GET_OUTPUT_DISTRIBUTION::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3280
bool on_get_blocks(const COMMAND_RPC_GET_BLOCKS_FAST::request &req, COMMAND_RPC_GET_BLOCKS_FAST::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:584
bool on_get_version(const COMMAND_RPC_GET_VERSION::request &req, COMMAND_RPC_GET_VERSION::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2855
bool on_get_block_headers_range(const COMMAND_RPC_GET_BLOCK_HEADERS_RANGE::request &req, COMMAND_RPC_GET_BLOCK_HEADERS_RANGE::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2443
bool on_getblocktemplate(const COMMAND_RPC_GETBLOCKTEMPLATE::request &req, COMMAND_RPC_GETBLOCKTEMPLATE::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1797
bool on_get_transaction_pool_hashes(const COMMAND_RPC_GET_TRANSACTION_POOL_HASHES::request &req, COMMAND_RPC_GET_TRANSACTION_POOL_HASHES::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1608
bool on_set_bans(const COMMAND_RPC_SETBANS::request &req, COMMAND_RPC_SETBANS::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2706
bool on_get_txpool_backlog(const COMMAND_RPC_GET_TRANSACTION_POOL_BACKLOG::request &req, COMMAND_RPC_GET_TRANSACTION_POOL_BACKLOG::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3212
bool on_getminerdata(const COMMAND_RPC_GETMINERDATA::request &req, COMMAND_RPC_GETMINERDATA::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1893
std::unique_ptr< bootstrap_daemon > m_bootstrap_daemon
Definition: core_rpc_server.h:296
static const command_line::arg_descriptor< std::string > arg_bootstrap_daemon_address
Definition: core_rpc_server.h:73
bool on_get_transaction_pool_hashes_bin(const COMMAND_RPC_GET_TRANSACTION_POOL_HASHES_BIN::request &req, COMMAND_RPC_GET_TRANSACTION_POOL_HASHES_BIN::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1584
bool on_start_mining(const COMMAND_RPC_START_MINING::request &req, COMMAND_RPC_START_MINING::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1308
bool on_set_log_level(const COMMAND_RPC_SET_LOG_LEVEL::request &req, COMMAND_RPC_SET_LOG_LEVEL::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1536
bool on_update(const COMMAND_RPC_UPDATE::request &req, COMMAND_RPC_UPDATE::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3019
bool on_get_output_histogram(const COMMAND_RPC_GET_OUTPUT_HISTOGRAM::request &req, COMMAND_RPC_GET_OUTPUT_HISTOGRAM::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2808
network_type nettype() const
Definition: core_rpc_server.h:97
static void init_options(boost::program_options::options_description &desc)
Definition: core_rpc_server.cpp:153
bool m_restricted
Definition: core_rpc_server.h:301
bool m_rpc_payment_allow_free_loopback
Definition: core_rpc_server.h:306
bool on_get_transaction_pool_stats(const COMMAND_RPC_GET_TRANSACTION_POOL_STATS::request &req, COMMAND_RPC_GET_TRANSACTION_POOL_STATS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1636
std::chrono::system_clock::time_point m_bootstrap_height_check_time
Definition: core_rpc_server.h:299
static const command_line::arg_descriptor< std::string > arg_rpc_ssl
Definition: core_rpc_server.h:67
static const command_line::arg_descriptor< std::string > arg_bootstrap_daemon_login
Definition: core_rpc_server.h:74
bool m_should_use_bootstrap_daemon
Definition: core_rpc_server.h:298
bool on_get_alternate_chains(const COMMAND_RPC_GET_ALTERNATE_CHAINS::request &req, COMMAND_RPC_GET_ALTERNATE_CHAINS::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2913
bool on_get_indexes(const COMMAND_RPC_GET_TX_GLOBAL_OUTPUTS_INDEXES::request &req, COMMAND_RPC_GET_TX_GLOBAL_OUTPUTS_INDEXES::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:855
static const command_line::arg_descriptor< bool > arg_rpc_payment_allow_free_loopback
Definition: core_rpc_server.h:79
static const command_line::arg_descriptor< std::string, false, true, 2 > arg_rpc_bind_port
Definition: core_rpc_server.h:64
bool on_get_public_nodes(const COMMAND_RPC_GET_PUBLIC_NODES::request &req, COMMAND_RPC_GET_PUBLIC_NODES::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1479
bool on_is_key_image_spent(const COMMAND_RPC_IS_KEY_IMAGE_SPENT::request &req, COMMAND_RPC_IS_KEY_IMAGE_SPENT::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1129
bool set_bootstrap_daemon(const std::string &address, const std::string &username_password, const std::string &proxy)
Definition: core_rpc_server.cpp:179
static const command_line::arg_descriptor< uint64_t > arg_rpc_payment_credits
Definition: core_rpc_server.h:78
bool on_getblockcount(const COMMAND_RPC_GETBLOCKCOUNT::request &req, COMMAND_RPC_GETBLOCKCOUNT::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1685
static const command_line::arg_descriptor< std::vector< std::string > > arg_rpc_ssl_allowed_fingerprints
Definition: core_rpc_server.h:71
bool on_rpc_access_data(const COMMAND_RPC_ACCESS_DATA::request &req, COMMAND_RPC_ACCESS_DATA::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3550
bool m_was_bootstrap_ever_used
Definition: core_rpc_server.h:300
bool on_get_hashes(const COMMAND_RPC_GET_HASHES_FAST::request &req, COMMAND_RPC_GET_HASHES_FAST::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:755
std::map< std::string, uint64_t > m_host_fails_score
Definition: core_rpc_server.h:303
bool on_rpc_access_account(const COMMAND_RPC_ACCESS_ACCOUNT::request &req, COMMAND_RPC_ACCESS_ACCOUNT::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3579
bool on_rpc_access_tracking(const COMMAND_RPC_ACCESS_TRACKING::request &req, COMMAND_RPC_ACCESS_TRACKING::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3525
bool on_get_last_block_header(const COMMAND_RPC_GET_LAST_BLOCK_HEADER::request &req, COMMAND_RPC_GET_LAST_BLOCK_HEADER::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2342
bool on_flush_txpool(const COMMAND_RPC_FLUSH_TRANSACTION_POOL::request &req, COMMAND_RPC_FLUSH_TRANSACTION_POOL::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2754
std::unique_ptr< rpc_payment > m_rpc_payment
Definition: core_rpc_server.h:304
bool on_in_peers(const COMMAND_RPC_IN_PEERS::request &req, COMMAND_RPC_IN_PEERS::response &res, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3009
bool on_rpc_access_pay(const COMMAND_RPC_ACCESS_PAY::request &req, COMMAND_RPC_ACCESS_PAY::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3491
bool on_get_connections(const COMMAND_RPC_GET_CONNECTIONS::request &req, COMMAND_RPC_GET_CONNECTIONS::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2603
bool on_getblockhash(const COMMAND_RPC_GETBLOCKHASH::request &req, COMMAND_RPC_GETBLOCKHASH::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:1701
bool on_get_bans(const COMMAND_RPC_GETBANS::request &req, COMMAND_RPC_GETBANS::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2642
static const command_line::arg_descriptor< std::string > arg_rpc_restricted_bind_port
Definition: core_rpc_server.h:65
static const command_line::arg_descriptor< bool > arg_restricted_rpc
Definition: core_rpc_server.h:66
std::map< std::string, bool > get_public_nodes(uint32_t credits_per_hash_threshold=0)
Definition: core_rpc_server.cpp:193
bool on_generateblocks(const COMMAND_RPC_GENERATEBLOCKS::request &req, COMMAND_RPC_GENERATEBLOCKS::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:2143
core & m_core
Definition: core_rpc_server.h:293
bool on_flush_cache(const COMMAND_RPC_FLUSH_CACHE::request &req, COMMAND_RPC_FLUSH_CACHE::response &res, epee::json_rpc::error &error_resp, const connection_context *ctx=NULL)
Definition: core_rpc_server.cpp:3422
handles core cryptonote functionality
Definition: cryptonote_core.h:87
network_type get_nettype() const
get the network type we're on
Definition: cryptonote_core.h:801
Definition: cryptonote_protocol_handler.h:80
Definition: syncobj.h:82
Definition: http_server_impl_base.h:48
Definition: net_node.h:129
BOOST_CLASS_VERSION(nodetool::node_server< cryptonote::t_cryptonote_protocol_handler< cryptonote::core > >, 1)
This is the original cryptonote protocol network-events handler, modified by us.
const char * res
Definition: hmac_keccak.cpp:42
static epee::net_utils::http::http_simple_client_template< dummy_client > client
Definition: http-client.cpp:62
#define MAP_JON_RPC(method_name, callback_f, command_type)
Definition: http_server_handlers_map2.h:248
#define BEGIN_URI_MAP2()
Definition: http_server_handlers_map2.h:60
#define END_JSON_RPC_MAP()
Definition: http_server_handlers_map2.h:270
#define MAP_URI_AUTO_JON2(s_pattern, callback_f, command_type)
Definition: http_server_handlers_map2.h:104
#define MAP_URI_AUTO_BIN2(s_pattern, callback_f, command_type)
Definition: http_server_handlers_map2.h:106
#define MAP_JON_RPC_WE_IF(method_name, callback_f, command_type, cond)
Definition: http_server_handlers_map2.h:206
#define MAP_JON_RPC_WE(method_name, callback_f, command_type)
Definition: http_server_handlers_map2.h:226
#define MAP_URI_AUTO_JON2_IF(s_pattern, callback_f, command_type, cond)
Definition: http_server_handlers_map2.h:70
#define BEGIN_JSON_RPC_MAP(uri)
Definition: http_server_handlers_map2.h:147
#define END_URI_MAP2()
Definition: http_server_handlers_map2.h:144
#define const
Definition: ipfrdr.c:80
static void init()
Definition: logging.cpp:38
static int mode
Definition: mdb_dump.c:26
uint32_t address
Definition: getifaddr.c:269
Definition: portable_binary_archive.hpp:29
crypto namespace.
Definition: crypto.cpp:60
POD_CLASS hash
Definition: hash.h:48
Holds cryptonote related classes and helpers.
Definition: blockchain_db.cpp:45
boost::multiprecision::uint128_t difficulty_type
Definition: difficulty.h:41
network_type
Definition: cryptonote_config.h:289
std::string blobdata
Definition: blobdatatype.h:39
Definition: abstract_http_client.h:60
TODO: (mj-xmr) This will be reduced in an another PR.
Definition: byte_slice.h:40
Definition: get_output_distribution.py:1
Definition: p2p.py:1
Definition: enums.h:68
boost::endian::big_uint16_t port
Definition: socks.cpp:59
unsigned int uint32_t
Definition: stdint.h:126
unsigned __int64 uint64_t
Definition: stdint.h:136
Definition: command_line.h:53
Definition: core_rpc_server_commands_defs.h:2642
Definition: core_rpc_server_commands_defs.h:2593
Definition: core_rpc_server_commands_defs.h:2469
Definition: core_rpc_server_commands_defs.h:2529
Definition: core_rpc_server_commands_defs.h:2505
Definition: core_rpc_server_commands_defs.h:2553
Definition: core_rpc_server_commands_defs.h:1018
Definition: core_rpc_server_commands_defs.h:2016
Definition: core_rpc_server_commands_defs.h:996
Definition: core_rpc_server_commands_defs.h:2721
Definition: core_rpc_server_commands_defs.h:2043
Definition: core_rpc_server_commands_defs.h:1077
Definition: core_rpc_server_commands_defs.h:1944
Definition: core_rpc_server_commands_defs.h:869
Definition: core_rpc_server_commands_defs.h:885
Definition: core_rpc_server_commands_defs.h:893
Definition: core_rpc_server_commands_defs.h:946
Definition: core_rpc_server_commands_defs.h:2226
Definition: core_rpc_server_commands_defs.h:242
Definition: core_rpc_server_commands_defs.h:2197
Definition: core_rpc_server_commands_defs.h:218
Definition: core_rpc_server_commands_defs.h:163
Definition: core_rpc_server_commands_defs.h:1703
Definition: core_rpc_server_commands_defs.h:1187
Definition: core_rpc_server_commands_defs.h:1218
Definition: core_rpc_server_commands_defs.h:1245
Definition: core_rpc_server_commands_defs.h:2160
Definition: core_rpc_server_commands_defs.h:1681
Definition: core_rpc_server_commands_defs.h:263
Definition: core_rpc_server_commands_defs.h:139
Definition: core_rpc_server_commands_defs.h:643
Definition: core_rpc_server_commands_defs.h:1161
Definition: core_rpc_server_commands_defs.h:1799
Definition: core_rpc_server_commands_defs.h:743
Definition: core_rpc_server_commands_defs.h:477
Definition: core_rpc_server_commands_defs.h:521
Definition: core_rpc_server_commands_defs.h:2392
Definition: core_rpc_server_commands_defs.h:2065
Definition: core_rpc_server_commands_defs.h:1316
Definition: core_rpc_server_commands_defs.h:1366
Definition: core_rpc_server_commands_defs.h:324
Definition: core_rpc_server_commands_defs.h:1591
Definition: core_rpc_server_commands_defs.h:1540
Definition: core_rpc_server_commands_defs.h:1562
Definition: core_rpc_server_commands_defs.h:1659
Definition: core_rpc_server_commands_defs.h:1516
Definition: core_rpc_server_commands_defs.h:441
Definition: core_rpc_server_commands_defs.h:2117
Definition: core_rpc_server_commands_defs.h:1905
Definition: core_rpc_server_commands_defs.h:1879
Definition: core_rpc_server_commands_defs.h:408
Definition: core_rpc_server_commands_defs.h:796
Definition: core_rpc_server_commands_defs.h:1852
Definition: core_rpc_server_commands_defs.h:2669
Definition: core_rpc_server_commands_defs.h:2694
Definition: core_rpc_server_commands_defs.h:2308
Definition: core_rpc_server_commands_defs.h:848
Definition: core_rpc_server_commands_defs.h:565
Definition: core_rpc_server_commands_defs.h:1979
Definition: core_rpc_server_commands_defs.h:1732
Definition: core_rpc_server_commands_defs.h:1823
Definition: core_rpc_server_commands_defs.h:1441
Definition: core_rpc_server_commands_defs.h:1397
Definition: core_rpc_server_commands_defs.h:1419
Definition: core_rpc_server_commands_defs.h:615
Definition: core_rpc_server_commands_defs.h:1761
Definition: core_rpc_server_commands_defs.h:775
Definition: core_rpc_server_commands_defs.h:1064
Definition: core_rpc_server_commands_defs.h:2330
Definition: core_rpc_server_commands_defs.h:2271
Definition: cryptonote_basic.h:512
Definition: core_rpc_server_commands_defs.h:1110
Definition: cryptonote_basic.h:475
Definition: jsonrpc_structs.h:32
Definition: net_utils_base.h:365
randomx_vm * vm
Definition: tests.cpp:20