Monero C++ Library
Loading...
Searching...
No Matches
monero_daemon_rpc.h
1
54#pragma once
55
56#include "monero_daemon.h"
57
61namespace monero {
62
63 // forward declaration of internal daemon poller
65
69 class monero_daemon_rpc : public monero_daemon {
70 public:
71
75 ~monero_daemon_rpc() override;
76 monero_daemon_rpc(const std::shared_ptr<monero_rpc_connection>& rpc);
77 monero_daemon_rpc(const std::string& uri, const std::string& username = "", const std::string& password = "", const std::string& proxy_uri = "", const std::string& zmq_uri = "", const boost::optional<uint32_t>& timeout = boost::none);
78
84 std::shared_ptr<monero_rpc_connection> get_rpc_connection() const;
85
91 bool is_connected();
92
98 void set_poll_period_in_ms(uint64_t period_ms);
99
103 std::set<monero_daemon_listener*> get_listeners() override;
104 void add_listener(monero_daemon_listener &listener) override;
105 void remove_listener(monero_daemon_listener &listener) override;
106 void remove_listeners() override;
107 monero_version get_version() override;
108 bool is_trusted() override;
109 uint64_t get_height() override;
110 std::string get_block_hash(uint64_t height) override;
111 std::shared_ptr<monero_block_template> get_block_template(const std::string& wallet_address, const boost::optional<int>& reserve_size = boost::none) override;
112 std::shared_ptr<monero_miner_data> get_miner_data() override;
113 std::string calculate_pow(uint32_t major_version, uint64_t height, const std::string& block_blob, const std::string& seed_hash) override;
114 std::shared_ptr<monero_add_auxiliary_pow_result> add_auxiliary_pow(const std::string& block_template_blob, const std::vector<std::shared_ptr<monero_auxiliary_pow>>& aux_pow) override;
115 std::shared_ptr<monero_block_header> get_last_block_header() override;
116 std::shared_ptr<monero_block_header> get_block_header_by_hash(const std::string& hash) override;
117 std::shared_ptr<monero_block_header> get_block_header_by_height(uint64_t height) override;
118 std::vector<std::shared_ptr<monero_block_header>> get_block_headers_by_range(uint64_t start_height, uint64_t end_height) override;
119 std::shared_ptr<monero_block> get_block_by_hash(const std::string& hash) override;
120 std::shared_ptr<monero_get_blocks_by_hash_result> get_blocks_by_hash(const std::vector<std::string>& block_hashes, uint64_t start_height, bool prune, uint64_t max_block_count = 0) override;
121 std::shared_ptr<monero_block> get_block_by_height(uint64_t height) override;
122 std::vector<std::shared_ptr<monero_block>> get_blocks_by_height(const std::vector<uint64_t>& heights) override;
123 std::vector<std::shared_ptr<monero_block>> get_blocks_by_range(boost::optional<uint64_t> start_height, boost::optional<uint64_t> end_height) override;
124 std::vector<std::shared_ptr<monero_block>> get_blocks_by_range_chunked(boost::optional<uint64_t> start_height, boost::optional<uint64_t> end_height, boost::optional<uint64_t> max_chunk_size) override;
125 std::shared_ptr<monero_get_block_hashes_result> get_block_hashes(const std::vector<std::string>& block_hashes) override;
126 std::vector<std::shared_ptr<monero_tx>> get_txs(const std::vector<std::string>& tx_hashes, bool prune = false) override;
127 std::vector<std::string> get_tx_hexes(const std::vector<std::string>& tx_hashes, bool prune = false) override;
128 std::shared_ptr<monero_miner_tx_sum> get_miner_tx_sum(uint64_t height, uint64_t num_blocks) override;
129 std::shared_ptr<monero_fee_estimate> get_fee_estimate(uint64_t grace_blocks = 0) override;
130 std::shared_ptr<monero_submit_tx_result> submit_tx_hex(const std::string& tx_hex, bool do_not_relay = false) override;
131 void relay_txs_by_hash(const std::vector<std::string>& tx_hashes) override;
132 std::shared_ptr<monero_tx_pool_stats> get_tx_pool_stats() override;
133 std::vector<std::shared_ptr<monero_tx>> get_tx_pool() override;
134 std::vector<std::string> get_tx_pool_hashes() override;
135 void flush_tx_pool(const std::vector<std::string> &hashes) override;
136 void flush_tx_pool() override;
137 void flush_tx_pool(const std::string &hash) override;
138 std::vector<monero_key_image_spent_status> get_key_image_spent_statuses(const std::vector<std::string>& key_images) override;
139 std::vector<uint64_t> get_output_indices(const std::string& tx_hash) override;
140 std::vector<std::shared_ptr<monero_output>> get_outputs(const std::vector<monero_output>& outputs) override;
141 std::vector<std::shared_ptr<monero_output_histogram_entry>> get_output_histogram(const std::vector<uint64_t>& amounts, const boost::optional<int>& min_count, const boost::optional<int>& max_count, const boost::optional<bool>& is_unlocked, const boost::optional<int>& recent_cutoff) override;
142 std::vector<std::shared_ptr<monero_output_distribution_entry>> get_output_distribution(const std::vector<uint64_t>& amounts, const boost::optional<bool>& is_cumulative = boost::none, const boost::optional<uint64_t>& start_height = boost::none, const boost::optional<uint64_t>& end_height = boost::none) override;
143 std::shared_ptr<monero_daemon_info> get_info() override;
144 std::shared_ptr<monero_daemon_sync_info> get_sync_info() override;
145 std::shared_ptr<monero_daemon_network_stats> get_network_stats() override;
146 std::shared_ptr<monero_hard_fork_info> get_hard_fork_info() override;
147 std::vector<std::shared_ptr<monero_alt_chain>> get_alt_chains() override;
148 std::vector<std::string> get_alt_block_hashes() override;
149 int get_download_limit() override;
150 int set_download_limit(int limit) override;
151 int reset_download_limit() override;
152 int get_upload_limit() override;
153 int set_upload_limit(int limit) override;
154 int reset_upload_limit() override;
155 std::vector<std::shared_ptr<monero_peer>> get_peers() override;
156 std::vector<std::shared_ptr<monero_peer>> get_known_peers() override;
157 std::vector<std::shared_ptr<monero_peer>> get_public_peers(bool include_offline = false) override;
158 void set_outgoing_peer_limit(int limit) override;
159 void set_incoming_peer_limit(int limit) override;
160 std::vector<std::shared_ptr<monero_ban>> get_peer_bans() override;
161 void set_peer_bans(const std::vector<std::shared_ptr<monero_ban>>& bans) override;
162 std::shared_ptr<monero_ban> get_peer_ban(const std::string& address) override;
163 void start_mining(const std::string &address, boost::optional<uint64_t> num_threads, boost::optional<bool> background_mining, boost::optional<bool> ignore_battery) override;
164 void stop_mining() override;
165 std::shared_ptr<monero_mining_status> get_mining_status() override;
166 std::shared_ptr<monero_generate_blocks_result> generate_blocks(const std::string& wallet_address, uint64_t num_blocks, const boost::optional<std::string>& prev_block_hash = boost::none, const boost::optional<uint32_t>& starting_nonce = boost::none) override;
167 void submit_blocks(const std::vector<std::string>& block_blobs) override;
168 std::shared_ptr<monero_prune_result> prune_blockchain(bool check) override;
169 void save_blockchain() override;
170 uint64_t pop_blocks(uint64_t num_blocks) override;
171 void flush_cache(bool bad_blocks = false) override;
172 void set_bootstrap_daemon(const std::string& address, const std::string& username = "", const std::string& password = "", const std::string& proxy = "") override;
173 void set_log_hash_rate(bool is_visible) override;
174 void set_log_level(int level) override;
175 std::string set_log_categories(const std::string& categories = "") override;
176 std::shared_ptr<monero_daemon_update_check_result> check_for_update() override;
177 std::shared_ptr<monero_daemon_update_download_result> download_update(const std::string& path = "") override;
178 void stop() override;
179 std::shared_ptr<monero_block_header> wait_for_next_block_header() override;
180
181 // --------------------------------- PRIVATE --------------------------------
182
183 private:
184 friend class monero_daemon_poller;
185 mutable boost::recursive_mutex m_listeners_mutex;
186 std::set<monero_daemon_listener*> m_listeners;
187 std::shared_ptr<monero_rpc_connection> m_rpc;
188 boost::mutex m_poller_mutex;
189 std::unique_ptr<monero_daemon_poller> m_poller;
190
191 // header_cache is scoped to a single get_blocks_by_range_chunked() call (see below) rather than
192 // stored as a member: it only helps avoid re-fetching a header already seen earlier in that one
193 // chunking pass, and keeping it as instance state would let it grow unbounded over the connection's
194 // lifetime and serve stale headers across reorgs on later calls
195 std::vector<std::shared_ptr<monero_block>> get_max_blocks(boost::optional<uint64_t> start_height, boost::optional<uint64_t> max_height, boost::optional<uint64_t> chunk_size, std::unordered_map<uint64_t, std::shared_ptr<monero_block_header>>& header_cache);
196 std::shared_ptr<monero_block_header> get_block_header_by_height_cached(uint64_t height, uint64_t max_height, std::unordered_map<uint64_t, std::shared_ptr<monero_block_header>>& header_cache);
197 std::shared_ptr<monero_bandwidth_limits> get_bandwidth_limits();
198 std::shared_ptr<monero_bandwidth_limits> set_bandwidth_limits(int up, int down);
199 void refresh_listening();
200 void wait_for_listener_callbacks_idle();
201 };
202
203}
Definition monero_daemon.h:66
Definition monero_daemon_rpc.cpp:68
std::vector< std::string > get_tx_pool_hashes() override
Definition monero_daemon_rpc.cpp:570
void start_mining(const std::string &address, boost::optional< uint64_t > num_threads, boost::optional< bool > background_mining, boost::optional< bool > ignore_battery) override
Definition monero_daemon_rpc.cpp:819
std::shared_ptr< monero_daemon_info > get_info() override
Definition monero_daemon_rpc.cpp:648
void flush_tx_pool() override
Definition monero_daemon_rpc.cpp:585
std::vector< std::shared_ptr< monero_block > > get_blocks_by_range(boost::optional< uint64_t > start_height, boost::optional< uint64_t > end_height) override
Definition monero_daemon_rpc.cpp:392
std::shared_ptr< monero_daemon_network_stats > get_network_stats() override
Definition monero_daemon_rpc.cpp:664
std::vector< std::shared_ptr< monero_peer > > get_known_peers() override
Definition monero_daemon_rpc.cpp:751
std::shared_ptr< monero_block_template > get_block_template(const std::string &wallet_address, const boost::optional< int > &reserve_size=boost::none) override
Definition monero_daemon_rpc.cpp:253
std::string set_log_categories(const std::string &categories="") override
Definition monero_daemon_rpc.cpp:920
std::shared_ptr< monero_prune_result > prune_blockchain(bool check) override
Definition monero_daemon_rpc.cpp:863
void set_peer_bans(const std::vector< std::shared_ptr< monero_ban > > &bans) override
Definition monero_daemon_rpc.cpp:796
std::vector< std::shared_ptr< monero_output > > get_outputs(const std::vector< monero_output > &outputs) override
Definition monero_daemon_rpc.cpp:617
void remove_listeners() override
Definition monero_daemon_rpc.cpp:188
std::shared_ptr< monero_add_auxiliary_pow_result > add_auxiliary_pow(const std::string &block_template_blob, const std::vector< std::shared_ptr< monero_auxiliary_pow > > &aux_pow) override
Definition monero_daemon_rpc.cpp:280
std::vector< std::shared_ptr< monero_alt_chain > > get_alt_chains() override
Definition monero_daemon_rpc.cpp:681
std::shared_ptr< monero_block_header > get_block_header_by_hash(const std::string &hash) override
Definition monero_daemon_rpc.cpp:300
std::vector< uint64_t > get_output_indices(const std::string &tx_hash) override
Definition monero_daemon_rpc.cpp:606
std::vector< std::shared_ptr< monero_output_distribution_entry > > get_output_distribution(const std::vector< uint64_t > &amounts, const boost::optional< bool > &is_cumulative=boost::none, const boost::optional< uint64_t > &start_height=boost::none, const boost::optional< uint64_t > &end_height=boost::none) override
Definition monero_daemon_rpc.cpp:638
std::set< monero_daemon_listener * > get_listeners() override
Definition monero_daemon_rpc.cpp:166
std::shared_ptr< monero_daemon_sync_info > get_sync_info() override
Definition monero_daemon_rpc.cpp:656
void relay_txs_by_hash(const std::vector< std::string > &tx_hashes) override
Definition monero_daemon_rpc.cpp:547
std::shared_ptr< monero_daemon_update_check_result > check_for_update() override
Definition monero_daemon_rpc.cpp:931
std::shared_ptr< monero_ban > get_peer_ban(const std::string &address) override
Definition monero_daemon_rpc.cpp:803
std::shared_ptr< monero_block_header > wait_for_next_block_header() override
Definition monero_daemon_rpc.cpp:957
std::vector< std::shared_ptr< monero_output_histogram_entry > > get_output_histogram(const std::vector< uint64_t > &amounts, const boost::optional< int > &min_count, const boost::optional< int > &max_count, const boost::optional< bool > &is_unlocked, const boost::optional< int > &recent_cutoff) override
Definition monero_daemon_rpc.cpp:628
std::shared_ptr< monero_daemon_update_download_result > download_update(const std::string &path="") override
Definition monero_daemon_rpc.cpp:941
std::vector< monero_key_image_spent_status > get_key_image_spent_statuses(const std::vector< std::string > &key_images) override
Definition monero_daemon_rpc.cpp:596
int set_upload_limit(int limit) override
Definition monero_daemon_rpc.cpp:727
void set_outgoing_peer_limit(int limit) override
Definition monero_daemon_rpc.cpp:769
std::vector< std::shared_ptr< monero_tx > > get_txs(const std::vector< std::string > &tx_hashes, bool prune=false) override
Definition monero_daemon_rpc.cpp:478
std::vector< std::string > get_alt_block_hashes() override
Definition monero_daemon_rpc.cpp:689
std::vector< std::shared_ptr< monero_peer > > get_public_peers(bool include_offline=false) override
Definition monero_daemon_rpc.cpp:759
int get_download_limit() override
Definition monero_daemon_rpc.cpp:697
std::shared_ptr< monero_block_header > get_last_block_header() override
Definition monero_daemon_rpc.cpp:292
void stop() override
Definition monero_daemon_rpc.cpp:951
std::shared_ptr< monero_miner_tx_sum > get_miner_tx_sum(uint64_t height, uint64_t num_blocks) override
Definition monero_daemon_rpc.cpp:512
void set_log_hash_rate(bool is_visible) override
Definition monero_daemon_rpc.cpp:905
void set_log_level(int level) override
Definition monero_daemon_rpc.cpp:912
void set_poll_period_in_ms(uint64_t period_ms)
Definition monero_daemon_rpc.cpp:130
std::shared_ptr< monero_generate_blocks_result > generate_blocks(const std::string &wallet_address, uint64_t num_blocks, const boost::optional< std::string > &prev_block_hash=boost::none, const boost::optional< uint32_t > &starting_nonce=boost::none) override
Definition monero_daemon_rpc.cpp:843
std::vector< std::shared_ptr< monero_block > > get_blocks_by_height(const std::vector< uint64_t > &heights) override
Definition monero_daemon_rpc.cpp:379
std::shared_ptr< monero_get_blocks_by_hash_result > get_blocks_by_hash(const std::vector< std::string > &block_hashes, uint64_t start_height, bool prune, uint64_t max_block_count=0) override
Definition monero_daemon_rpc.cpp:357
int get_upload_limit() override
Definition monero_daemon_rpc.cpp:720
std::string calculate_pow(uint32_t major_version, uint64_t height, const std::string &block_blob, const std::string &seed_hash) override
Definition monero_daemon_rpc.cpp:272
std::shared_ptr< monero_miner_data > get_miner_data() override
Definition monero_daemon_rpc.cpp:263
bool is_trusted() override
Definition monero_daemon_rpc.cpp:230
void set_bootstrap_daemon(const std::string &address, const std::string &username="", const std::string &password="", const std::string &proxy="") override
Definition monero_daemon_rpc.cpp:898
std::shared_ptr< monero_rpc_connection > get_rpc_connection() const
Definition monero_daemon_rpc.cpp:207
std::vector< std::shared_ptr< monero_tx > > get_tx_pool() override
Definition monero_daemon_rpc.cpp:562
void set_incoming_peer_limit(int limit) override
Definition monero_daemon_rpc.cpp:778
int set_download_limit(int limit) override
Definition monero_daemon_rpc.cpp:704
std::shared_ptr< monero_tx_pool_stats > get_tx_pool_stats() override
Definition monero_daemon_rpc.cpp:554
std::string get_block_hash(uint64_t height) override
Definition monero_daemon_rpc.cpp:247
std::vector< std::shared_ptr< monero_block > > get_blocks_by_range_chunked(boost::optional< uint64_t > start_height, boost::optional< uint64_t > end_height, boost::optional< uint64_t > max_chunk_size) override
Definition monero_daemon_rpc.cpp:405
uint64_t pop_blocks(uint64_t num_blocks) override
Definition monero_daemon_rpc.cpp:879
bool is_connected()
Definition monero_daemon_rpc.cpp:212
std::shared_ptr< monero_block > get_block_by_hash(const std::string &hash) override
Definition monero_daemon_rpc.cpp:327
std::vector< std::shared_ptr< monero_block_header > > get_block_headers_by_range(uint64_t start_height, uint64_t end_height) override
Definition monero_daemon_rpc.cpp:318
std::vector< std::shared_ptr< monero_peer > > get_peers() override
Definition monero_daemon_rpc.cpp:743
void remove_listener(monero_daemon_listener &listener) override
Definition monero_daemon_rpc.cpp:179
std::shared_ptr< monero_hard_fork_info > get_hard_fork_info() override
Definition monero_daemon_rpc.cpp:673
void add_listener(monero_daemon_listener &listener) override
Definition monero_daemon_rpc.cpp:171
monero_version get_version() override
Definition monero_daemon_rpc.cpp:222
std::vector< std::string > get_tx_hexes(const std::vector< std::string > &tx_hashes, bool prune=false) override
Definition monero_daemon_rpc.cpp:497
void submit_blocks(const std::vector< std::string > &block_blobs) override
Definition monero_daemon_rpc.cpp:855
void stop_mining() override
Definition monero_daemon_rpc.cpp:828
std::shared_ptr< monero_block_header > get_block_header_by_height(uint64_t height) override
Definition monero_daemon_rpc.cpp:309
std::vector< std::shared_ptr< monero_ban > > get_peer_bans() override
Definition monero_daemon_rpc.cpp:787
std::shared_ptr< monero_block > get_block_by_height(uint64_t height) override
Definition monero_daemon_rpc.cpp:370
std::shared_ptr< monero_submit_tx_result > submit_tx_hex(const std::string &tx_hex, bool do_not_relay=false) override
Definition monero_daemon_rpc.cpp:530
uint64_t get_height() override
Definition monero_daemon_rpc.cpp:238
std::shared_ptr< monero_fee_estimate > get_fee_estimate(uint64_t grace_blocks=0) override
Definition monero_daemon_rpc.cpp:521
int reset_download_limit() override
Definition monero_daemon_rpc.cpp:713
~monero_daemon_rpc() override
Definition monero_daemon_rpc.cpp:1042
std::shared_ptr< monero_mining_status > get_mining_status() override
Definition monero_daemon_rpc.cpp:834
void save_blockchain() override
Definition monero_daemon_rpc.cpp:873
std::shared_ptr< monero_get_block_hashes_result > get_block_hashes(const std::vector< std::string > &block_hashes) override
Definition monero_daemon_rpc.cpp:469
void flush_cache(bool bad_blocks=false) override
Definition monero_daemon_rpc.cpp:891
int reset_upload_limit() override
Definition monero_daemon_rpc.cpp:736
Definition monero_daemon.h:83
Definition monero_error.h:61
Definition monero_daemon_model.h:142