Monero C++ Library
monero_daemon_model.h
1 
53 #pragma once
54 
55 #include <boost/property_tree/ptree.hpp>
56 #include <boost/property_tree/json_parser.hpp>
57 #include "rapidjson/document.h"
58 #include "rapidjson/writer.h"
59 #include "rapidjson/stringbuffer.h"
60 
64 namespace monero {
65 
70 
76  std::string serialize() const;
77 
84  virtual rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const = 0;
85  };
86 
90  enum monero_network_type : uint8_t {
91  MAINNET = 0,
92  TESTNET,
93  STAGENET
94  };
95 
100  boost::optional<uint32_t> m_number;
101  boost::optional<bool> m_is_release;
102 
103  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
104  };
105 
110  boost::optional<std::string> m_uri;
111  boost::optional<std::string> m_username;
112  boost::optional<std::string> m_password;
113 
114  monero_rpc_connection(const boost::optional<std::string>& uri = boost::none, const boost::optional<std::string>& username = boost::none, const boost::optional<std::string>& password = boost::none) : m_uri(uri), m_username(username), m_password(password) {}
115  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
116  };
117 
118  // forward declarations
119  struct monero_tx;
120  struct monero_output;
121 
128  boost::optional<std::string> m_hash;
129  boost::optional<uint64_t> m_height;
130  boost::optional<uint64_t> m_timestamp;
131  boost::optional<uint64_t> m_size;
132  boost::optional<uint64_t> m_weight;
133  boost::optional<uint64_t> m_long_term_weight;
134  boost::optional<uint64_t> m_depth;
135  boost::optional<uint64_t> m_difficulty;
136  boost::optional<uint64_t> m_cumulative_difficulty;
137  boost::optional<uint32_t> m_major_version;
138  boost::optional<uint32_t> m_minor_version;
139  boost::optional<uint32_t> m_nonce;
140  boost::optional<std::string> m_miner_tx_hash;
141  boost::optional<uint32_t> m_num_txs;
142  boost::optional<bool> m_orphan_status;
143  boost::optional<std::string> m_prev_hash;
144  boost::optional<uint64_t> m_reward;
145  boost::optional<std::string> m_pow_hash;
146 
147  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
148  virtual void merge(const std::shared_ptr<monero_block_header>& self, const std::shared_ptr<monero_block_header>& other);
149  };
150 
155  boost::optional<std::string> m_hex;
156  boost::optional<std::shared_ptr<monero_tx>> m_miner_tx;
157  std::vector<std::shared_ptr<monero_tx>> m_txs;
158  std::vector<std::string> m_tx_hashes;
159 
160  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
161  void merge(const std::shared_ptr<monero_block_header>& self, const std::shared_ptr<monero_block_header>& other);
162  void merge(const std::shared_ptr<monero_block>& self, const std::shared_ptr<monero_block>& other);
163  };
164 
168  struct monero_tx : public serializable_struct {
169  static const std::string DEFAULT_PAYMENT_ID; // default payment id "0000000000000000"
170  boost::optional<std::shared_ptr<monero_block>> m_block;
171  boost::optional<std::string> m_hash;
172  boost::optional<uint32_t> m_version;
173  boost::optional<bool> m_is_miner_tx;
174  boost::optional<std::string> m_payment_id;
175  boost::optional<uint64_t> m_fee;
176  boost::optional<uint32_t> m_ring_size;
177  boost::optional<bool> m_relay;
178  boost::optional<bool> m_is_relayed;
179  boost::optional<bool> m_is_confirmed;
180  boost::optional<bool> m_in_tx_pool;
181  boost::optional<uint64_t> m_num_confirmations;
182  boost::optional<uint64_t> m_unlock_height;
183  boost::optional<uint64_t> m_last_relayed_timestamp;
184  boost::optional<uint64_t> m_received_timestamp;
185  boost::optional<bool> m_is_double_spend_seen;
186  boost::optional<std::string> m_key;
187  boost::optional<std::string> m_full_hex;
188  boost::optional<std::string> m_pruned_hex;
189  boost::optional<std::string> m_prunable_hex;
190  boost::optional<std::string> m_prunable_hash;
191  boost::optional<uint64_t> m_size;
192  boost::optional<uint64_t> m_weight;
193  std::vector<std::shared_ptr<monero_output>> m_inputs;
194  std::vector<std::shared_ptr<monero_output>> m_outputs;
195  std::vector<uint32_t> m_output_indices;
196  boost::optional<std::string> m_metadata;
197  boost::optional<std::string> m_common_tx_sets;
198  std::vector<uint8_t> m_extra;
199  boost::optional<std::string> m_rct_signatures; // TODO: implement
200  boost::optional<std::string> m_rct_sig_prunable; // TODO: implement
201  boost::optional<bool> m_is_kept_by_block;
202  boost::optional<bool> m_is_failed;
203  boost::optional<uint64_t> m_last_failed_height;
204  boost::optional<std::string> m_last_failed_hash;
205  boost::optional<uint64_t> m_max_used_block_height;
206  boost::optional<std::string> m_max_used_block_hash;
207  std::vector<std::string> m_signatures;
208 
209  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
210  static void from_property_tree(const boost::property_tree::ptree& node, std::shared_ptr<monero_tx> tx);
211  std::shared_ptr<monero_tx> copy(const std::shared_ptr<monero_tx>& src, const std::shared_ptr<monero_tx>& tgt) const;
212  virtual void merge(const std::shared_ptr<monero_tx>& self, const std::shared_ptr<monero_tx>& other);
213  boost::optional<uint64_t> get_height() const;
214  };
215 
220  boost::optional<std::string> m_hex;
221  boost::optional<std::string> m_signature;
222 
223  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
224  static void from_property_tree(const boost::property_tree::ptree& node, const std::shared_ptr<monero_key_image>& key_image);
225  static std::vector<std::shared_ptr<monero_key_image>> deserialize_key_images(const std::string& key_images_json); // TODO: remove this specialty util used once
226  std::shared_ptr<monero_key_image> copy(const std::shared_ptr<monero_key_image>& src, const std::shared_ptr<monero_key_image>& tgt) const;
227  void merge(const std::shared_ptr<monero_key_image>& self, const std::shared_ptr<monero_key_image>& other);
228  };
229 
234  std::shared_ptr<monero_tx> m_tx;
235  boost::optional<std::shared_ptr<monero_key_image>> m_key_image;
236  boost::optional<uint64_t> m_amount;
237  boost::optional<uint64_t> m_index;
238  std::vector<uint64_t> m_ring_output_indices;
239  boost::optional<std::string> m_stealth_public_key;
240 
241  rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
242  static void from_property_tree(const boost::property_tree::ptree& node, const std::shared_ptr<monero_output>& output);
243  std::shared_ptr<monero_output> copy(const std::shared_ptr<monero_output>& src, const std::shared_ptr<monero_output>& tgt) const;
244  virtual void merge(const std::shared_ptr<monero_output>& self, const std::shared_ptr<monero_output>& other);
245  };
246 }
monero::monero_key_image::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:537
monero::monero_block_header
Definition: monero_daemon_model.h:127
monero
Definition: monero_daemon.cpp:58
monero::monero_block
Definition: monero_daemon_model.h:154
monero::serializable_struct::to_rapidjson_val
virtual rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const =0
monero::serializable_struct
Definition: monero_daemon_model.h:69
monero::monero_key_image
Definition: monero_daemon_model.h:219
monero::serializable_struct::serialize
std::string serialize() const
Definition: monero_daemon_model.cpp:83
monero::monero_block::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:188
monero::monero_tx::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:241
monero::monero_network_type
monero_network_type
Definition: monero_daemon_model.h:90
monero::monero_tx
Definition: monero_daemon_model.h:168
monero::monero_rpc_connection::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:111
monero::monero_output
Definition: monero_daemon_model.h:233
monero::monero_block_header::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:128
monero::monero_version::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:93
monero::monero_rpc_connection
Definition: monero_daemon_model.h:109
monero::monero_version
Definition: monero_daemon_model.h:99
monero::monero_output::to_rapidjson_val
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const
Definition: monero_daemon_model.cpp:601