55 #include "monero_wallet.h"
56 #include "wallet/wallet2.h"
58 #include <boost/thread/mutex.hpp>
59 #include <boost/thread/thread.hpp>
60 #include <boost/thread/condition_variable.hpp>
174 void set_daemon_connection(
const std::string& uri,
const std::string& username =
"",
const std::string& password =
"")
override;
182 std::string
get_path()
const override;
190 std::string
get_address(
const uint32_t account_idx,
const uint32_t subaddress_idx)
const override;
199 uint64_t
get_height_by_date(uint16_t year, uint8_t month, uint8_t day)
const override;
212 uint64_t
get_balance(uint32_t account_idx)
const override;
213 uint64_t
get_balance(uint32_t account_idx, uint32_t subaddress_idx)
const override;
217 std::vector<monero_account>
get_accounts(
bool include_subaddresses,
const std::string& tag)
const override;
220 std::vector<monero_subaddress>
get_subaddresses(
const uint32_t account_idx,
const std::vector<uint32_t>& subaddress_indices)
const override;
222 std::vector<std::shared_ptr<monero_tx_wallet>>
get_txs()
const override;
224 std::vector<std::shared_ptr<monero_tx_wallet>>
get_txs(
const monero_tx_query& query, std::vector<std::string>& missing_tx_hashes)
const override;
229 std::vector<std::shared_ptr<monero_key_image>>
get_key_images()
const override;
230 std::shared_ptr<monero_key_image_import_result>
import_key_images(
const std::vector<std::shared_ptr<monero_key_image>>& key_images)
override;
234 std::vector<std::shared_ptr<monero_tx_wallet>>
sweep_dust(
bool relay =
false)
override;
235 std::vector<std::string>
relay_txs(
const std::vector<std::string>& tx_metadatas)
override;
237 std::string
sign_txs(
const std::string& unsigned_tx_hex)
override;
238 std::vector<std::string>
submit_txs(
const std::string& signed_tx_hex)
override;
239 std::string
sign_message(
const std::string& msg)
const override;
240 bool verify_message(
const std::string& msg,
const std::string& address,
const std::string& signature)
const override;
241 std::string
get_tx_key(
const std::string& tx_hash)
const override;
242 std::shared_ptr<monero_check_tx>
check_tx_key(
const std::string& tx_hash,
const std::string& txKey,
const std::string& address)
const override;
243 std::string
get_tx_proof(
const std::string& tx_hash,
const std::string& address,
const std::string& message)
const override;
244 std::shared_ptr<monero_check_tx>
check_tx_proof(
const std::string& tx_hash,
const std::string& address,
const std::string& message,
const std::string& signature)
const override;
245 std::string
get_spend_proof(
const std::string& tx_hash,
const std::string& message)
const override;
246 bool check_spend_proof(
const std::string& tx_hash,
const std::string& message,
const std::string& signature)
const override;
249 std::shared_ptr<monero_check_reserve>
check_reserve_proof(
const std::string& address,
const std::string& message,
const std::string& signature)
const override;
250 std::string
get_tx_note(
const std::string& tx_hash)
const override;
251 std::vector<std::string>
get_tx_notes(
const std::vector<std::string>& tx_hashes)
const override;
252 void set_tx_note(
const std::string& tx_hash,
const std::string& note)
override;
253 void set_tx_notes(
const std::vector<std::string>& tx_hashes,
const std::vector<std::string>& notes)
override;
254 std::vector<monero_address_book_entry>
get_address_book_entries(
const std::vector<uint64_t>& indices)
const override;
256 void edit_address_book_entry(uint64_t index,
bool set_address,
const std::string& address,
bool set_description,
const std::string& description)
override;
259 std::shared_ptr<monero_tx_config>
parse_payment_uri(
const std::string& uri)
const override;
260 bool get_attribute(
const std::string& key, std::string& value)
const override;
261 void set_attribute(
const std::string& key,
const std::string& val)
override;
262 void start_mining(boost::optional<uint64_t> num_threads, boost::optional<bool> background_mining, boost::optional<bool> ignore_battery)
override;
274 void save()
override;
275 void move_to(std::string path, std::string password)
override;
282 std::string get_cache_file_buffer(
const epee::wipeable_string& password)
const;
288 std::unique_ptr<tools::wallet2> m_w2;
289 std::unique_ptr<wallet2_listener> m_w2_listener;
290 std::set<monero_wallet_listener*> m_listeners;
293 std::vector<monero_subaddress> get_subaddresses_aux(uint32_t account_idx,
const std::vector<uint32_t>& subaddress_indices,
const std::vector<tools::wallet2::transfer_details>& transfers)
const;
294 std::vector<std::shared_ptr<monero_transfer>> get_transfers_aux(
const monero_transfer_query& query)
const;
295 std::vector<std::shared_ptr<monero_output_wallet>> get_outputs_aux(
const monero_output_query& query)
const;
296 std::vector<std::shared_ptr<monero_tx_wallet>> sweep_account(
const monero_tx_config& config);
299 mutable std::atomic<bool> m_is_synced;
300 mutable std::atomic<bool> m_is_connected;
301 boost::condition_variable m_sync_cv;
302 boost::mutex m_sync_mutex;
303 std::atomic<bool> m_rescan_on_sync;
304 std::atomic<bool> m_syncing_enabled;
305 std::atomic<bool> m_sync_loop_running;
306 std::atomic<int> m_syncing_interval;
307 boost::thread m_syncing_thread;
308 boost::mutex m_syncing_mutex;
309 void run_sync_loop();
310 monero_sync_result lock_and_sync(boost::optional<uint64_t> start_height = boost::none);
static monero_wallet_core * create_wallet_random(const std::string &path, const std::string &password, const monero_network_type network_type, const monero_rpc_connection &daemon_connection=monero_rpc_connection(), const std::string &language="English", std::unique_ptr< epee::net_utils::http::http_client_factory > http_client_factory=nullptr)
Definition: monero_wallet_core.cpp:941
Definition: monero_wallet_model.h:308
uint64_t get_daemon_max_peer_height() const override
Definition: monero_wallet_core.cpp:1260
static monero_wallet_core * create_wallet_from_keys(const std::string &path, const std::string &password, const monero_network_type network_type, const std::string &address, const std::string &view_key, const std::string &spend_key, const monero_rpc_connection &daemon_connection=monero_rpc_connection(), uint64_t restore_height=0, const std::string &language="English", std::unique_ptr< epee::net_utils::http::http_client_factory > http_client_factory=nullptr)
Definition: monero_wallet_core.cpp:981
void set_tx_note(const std::string &tx_hash, const std::string ¬e) override
Definition: monero_wallet_core.cpp:2684
void start_syncing() override
Definition: monero_wallet_core.cpp:1339
uint64_t get_unlocked_balance() const override
Definition: monero_wallet_core.cpp:1385
uint64_t get_balance() const override
Definition: monero_wallet_core.cpp:1371
std::string get_tx_key(const std::string &tx_hash) const override
Definition: monero_wallet_core.cpp:2485
static bool wallet_exists(const std::string &path)
Definition: monero_wallet_core.cpp:911
std::string get_mnemonic_language() const override
Definition: monero_wallet_core.cpp:1142
bool get_attribute(const std::string &key, std::string &value) const override
Definition: monero_wallet_core.cpp:2841
std::string get_reserve_proof_account(uint32_t account_idx, uint64_t amount, const std::string &message) const override
Definition: monero_wallet_core.cpp:2639
Definition: monero_daemon.cpp:58
std::string get_private_view_key() const override
Definition: monero_wallet_core.cpp:1152
std::string get_path() const override
Definition: monero_wallet_core.cpp:1127
std::vector< monero_subaddress > get_subaddresses(const uint32_t account_idx, const std::vector< uint32_t > &subaddress_indices) const override
Definition: monero_wallet_core.cpp:1453
void edit_address_book_entry(uint64_t index, bool set_address, const std::string &address, bool set_description, const std::string &description) override
Definition: monero_wallet_core.cpp:2751
Definition: monero_wallet_model.h:278
std::string get_public_spend_key() const override
Definition: monero_wallet_core.cpp:1157
void close(bool save=false) override
Definition: monero_wallet_core.cpp:3112
void set_sync_height(uint64_t sync_height) override
Definition: monero_wallet_core.cpp:1248
int import_outputs_hex(const std::string &outputs_hex) override
Definition: monero_wallet_core.cpp:1635
std::vector< std::shared_ptr< monero_key_image > > get_key_images() const override
Definition: monero_wallet_core.cpp:1647
monero_subaddress get_address_index(const std::string &address) const override
Definition: monero_wallet_core.cpp:1173
Definition: monero_wallet_model.h:96
Definition: monero_wallet_model.h:414
Definition: monero_wallet.h:71
void set_attribute(const std::string &key, const std::string &val) override
Definition: monero_wallet_core.cpp:2845
std::string get_address(const uint32_t account_idx, const uint32_t subaddress_idx) const override
Definition: monero_wallet_core.cpp:1169
static monero_wallet_core * open_wallet(const std::string &path, const std::string &password, const monero_network_type network_type)
Definition: monero_wallet_core.cpp:919
std::vector< std::string > submit_multisig_tx_hex(const std::string &signed_multisig_tx_hex) override
Definition: monero_wallet_core.cpp:3047
~monero_wallet_core()
Definition: monero_wallet_core.cpp:1051
Definition: monero_wallet_model.h:438
std::string get_reserve_proof_wallet(const std::string &message) const override
Definition: monero_wallet_core.cpp:2633
std::shared_ptr< monero_key_image_import_result > import_key_images(const std::vector< std::shared_ptr< monero_key_image >> &key_images) override
Definition: monero_wallet_core.cpp:1662
bool is_synced() const override
Definition: monero_wallet_core.cpp:1116
std::string get_keys_file_buffer(const epee::wipeable_string &password, bool view_only) const
Definition: monero_wallet_core.cpp:3098
static monero_wallet_core * open_wallet_data(const std::string &password, const monero_network_type, const std::string &keys_data, const std::string &cache_data, const monero_rpc_connection &daemon_connection=monero_rpc_connection(), std::unique_ptr< epee::net_utils::http::http_client_factory > http_client_factory=nullptr)
Definition: monero_wallet_core.cpp:929
monero_tx_set parse_tx_set(const monero_tx_set &tx_set) override
Definition: monero_wallet_core.cpp:2250
std::string get_tx_note(const std::string &tx_hash) const override
Definition: monero_wallet_core.cpp:2667
monero_multisig_init_result make_multisig(const std::vector< std::string > &multisig_hexes, int threshold, const std::string &password) override
Definition: monero_wallet_core.cpp:2937
monero_integrated_address decode_integrated_address(const std::string &integrated_address) const override
Definition: monero_wallet_core.cpp:1224
monero_subaddress create_subaddress(uint32_t account_idx, const std::string &label="") override
Definition: monero_wallet_core.cpp:1462
Definition: monero_wallet_model.h:343
void stop_mining() override
Definition: monero_wallet_core.cpp:2879
monero_multisig_sign_result sign_multisig_tx_hex(const std::string &multisig_tx_hex) override
Definition: monero_wallet_core.cpp:3004
std::vector< std::shared_ptr< monero_tx_wallet > > get_txs() const override
Definition: monero_wallet_core.cpp:1482
std::string get_outputs_hex() const override
Definition: monero_wallet_core.cpp:1631
bool is_view_only() const override
Definition: monero_wallet_core.h:173
bool is_daemon_synced() const override
Definition: monero_wallet_core.cpp:1105
int import_multisig_hex(const std::vector< std::string > &multisig_hexes) override
Definition: monero_wallet_core.cpp:2976
Definition: monero_wallet.h:123
Definition: monero_wallet_model.h:225
Definition: monero_wallet_model.h:79
monero_network_type
Definition: monero_daemon_model.h:90
Definition: monero_wallet_model.h:67
std::vector< monero_address_book_entry > get_address_book_entries(const std::vector< uint64_t > &indices) const override
Definition: monero_wallet_core.cpp:2702
std::vector< std::shared_ptr< monero_tx_wallet > > sweep_unlocked(const monero_tx_config &config) override
Definition: monero_wallet_core.cpp:1814
std::vector< std::string > relay_txs(const std::vector< std::string > &tx_metadatas) override
Definition: monero_wallet_core.cpp:2212
void set_tx_notes(const std::vector< std::string > &tx_hashes, const std::vector< std::string > ¬es) override
Definition: monero_wallet_core.cpp:2694
std::string get_private_spend_key() const override
Definition: monero_wallet_core.cpp:1162
std::string get_spend_proof(const std::string &tx_hash, const std::string &message) const override
Definition: monero_wallet_core.cpp:2607
uint64_t get_daemon_height() const override
Definition: monero_wallet_core.cpp:1252
std::vector< std::shared_ptr< monero_transfer > > get_transfers(const monero_transfer_query &query) const override
Definition: monero_wallet_core.cpp:1589
Definition: monero_wallet_model.h:322
void delete_address_book_entry(uint64_t index) override
Definition: monero_wallet_core.cpp:2784
std::string get_tx_proof(const std::string &tx_hash, const std::string &address, const std::string &message) const override
Definition: monero_wallet_core.cpp:2560
Definition: monero_wallet_core.h:77
uint64_t get_height() const override
Definition: monero_wallet_core.cpp:1240
void move_to(std::string path, std::string password) override
Definition: monero_wallet_core.cpp:3093
void save() override
Definition: monero_wallet_core.cpp:3088
std::set< monero_wallet_listener * > get_listeners() override
Definition: monero_wallet_core.cpp:1285
std::string sign_message(const std::string &msg) const override
Definition: monero_wallet_core.cpp:2456
std::string get_multisig_hex() override
Definition: monero_wallet_core.cpp:2969
monero_sync_result sync() override
Definition: monero_wallet_core.cpp:1290
static std::vector< std::string > get_mnemonic_languages()
Definition: monero_wallet_core.cpp:1043
std::shared_ptr< monero_check_reserve > check_reserve_proof(const std::string &address, const std::string &message, const std::string &signature) const override
Definition: monero_wallet_core.cpp:2647
void add_listener(monero_wallet_listener &listener) override
Definition: monero_wallet_core.cpp:1273
monero_account create_account(const std::string &label="") override
Definition: monero_wallet_core.cpp:1438
std::shared_ptr< monero_check_tx > check_tx_key(const std::string &tx_hash, const std::string &txKey, const std::string &address) const override
Definition: monero_wallet_core.cpp:2510
monero_version get_version() const override
Definition: monero_wallet_core.cpp:1120
void stop_syncing() override
Definition: monero_wallet_core.cpp:1350
Definition: monero_wallet_model.h:183
uint64_t get_sync_height() const override
Definition: monero_wallet_core.cpp:1244
std::string create_payment_uri(const monero_tx_config &config) const override
Definition: monero_wallet_core.cpp:2790
bool is_connected() const override
Definition: monero_wallet_core.cpp:1097
std::shared_ptr< monero_check_tx > check_tx_proof(const std::string &tx_hash, const std::string &address, const std::string &message, const std::string &signature) const override
Definition: monero_wallet_core.cpp:2578
std::string sign_txs(const std::string &unsigned_tx_hex) override
Definition: monero_wallet_core.cpp:2409
monero_network_type get_network_type() const override
Definition: monero_wallet_core.cpp:1131
uint64_t add_address_book_entry(const std::string &address, const std::string &description) override
Definition: monero_wallet_core.cpp:2734
bool verify_message(const std::string &msg, const std::string &address, const std::string &signature) const override
Definition: monero_wallet_core.cpp:2460
std::vector< std::shared_ptr< monero_tx_wallet > > sweep_dust(bool relay=false) override
Definition: monero_wallet_core.cpp:2126
monero_integrated_address get_integrated_address(const std::string &standard_address="", const std::string &payment_id="") const override
Definition: monero_wallet_core.cpp:1194
Definition: monero_wallet_model.h:428
std::string get_public_view_key() const override
Definition: monero_wallet_core.cpp:1147
virtual std::vector< monero_account > get_accounts() const
Definition: monero_wallet.h:565
std::string prepare_multisig() override
Definition: monero_wallet_core.cpp:2931
void start_mining(boost::optional< uint64_t > num_threads, boost::optional< bool > background_mining, boost::optional< bool > ignore_battery) override
Definition: monero_wallet_core.cpp:2849
std::shared_ptr< monero_tx_wallet > sweep_output(const monero_tx_config &config) override
Definition: monero_wallet_core.cpp:2000
uint64_t get_height_by_date(uint16_t year, uint8_t month, uint8_t day) const override
Definition: monero_wallet_core.cpp:1269
std::string get_mnemonic() const override
Definition: monero_wallet_core.cpp:1135
bool is_daemon_trusted() const override
Definition: monero_wallet_core.cpp:1111
std::vector< std::shared_ptr< monero_tx_wallet > > create_txs(const monero_tx_config &config) override
Definition: monero_wallet_core.cpp:1689
std::vector< std::shared_ptr< monero_output_wallet > > get_outputs(const monero_output_query &query) const override
Definition: monero_wallet_core.cpp:1610
Definition: monero_wallet_core.cpp:682
uint64_t wait_for_next_block() override
Definition: monero_wallet_core.cpp:2889
std::shared_ptr< monero_tx_config > parse_payment_uri(const std::string &uri) const override
Definition: monero_wallet_core.cpp:2813
std::vector< std::string > submit_txs(const std::string &signed_tx_hex) override
Definition: monero_wallet_core.cpp:2431
Definition: monero_daemon_model.h:109
void remove_listener(monero_wallet_listener &listener) override
Definition: monero_wallet_core.cpp:1279
monero_account get_account(const uint32_t account_idx, bool include_subaddresses) const override
Definition: monero_wallet_core.cpp:1421
static monero_wallet_core * create_wallet_from_mnemonic(const std::string &path, const std::string &password, const monero_network_type network_type, const std::string &mnemonic, const monero_rpc_connection &daemon_connection=monero_rpc_connection(), uint64_t restore_height=0, const std::string &seed_offset="", std::unique_ptr< epee::net_utils::http::http_client_factory > http_client_factory=nullptr)
Definition: monero_wallet_core.cpp:956
monero_multisig_info get_multisig_info() override
Definition: monero_wallet_core.cpp:2925
bool is_multisig_import_needed() const override
Definition: monero_wallet_core.cpp:2921
boost::optional< monero_rpc_connection > get_daemon_connection() const override
Definition: monero_wallet_core.cpp:1082
Definition: monero_daemon_model.h:99
monero_multisig_init_result exchange_multisig_keys(const std::vector< std::string > &mutisig_hexes, const std::string &password) override
Definition: monero_wallet_core.cpp:2947
std::vector< std::string > get_tx_notes(const std::vector< std::string > &tx_hashes) const override
Definition: monero_wallet_core.cpp:2677
void rescan_blockchain() override
Definition: monero_wallet_core.cpp:1362
bool check_spend_proof(const std::string &tx_hash, const std::string &message, const std::string &signature) const override
Definition: monero_wallet_core.cpp:2620
void set_daemon_connection(const std::string &uri, const std::string &username="", const std::string &password="") override
Definition: monero_wallet_core.cpp:1056
void rescan_spent() override
Definition: monero_wallet_core.cpp:1354