Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/monero_util.hpp 4 : : \copyright 2022-2025 J. Bakosi, 5 : : All rights reserved. See the LICENSE file for details. 6 : : \brief Piac monero wallet interaction functionality 7 : : */ 8 : : // ***************************************************************************** 9 : : 10 : : #pragma once 11 : : 12 : : #include "macro.hpp" 13 : : 14 : : #if defined(__clang__) 15 : : #pragma clang diagnostic push 16 : : #pragma clang diagnostic ignored "-Wdeprecated-copy-dtor" 17 : : #pragma clang diagnostic ignored "-Wnon-virtual-dtor" 18 : : #pragma clang diagnostic ignored "-Wsuggest-override" 19 : : #pragma clang diagnostic ignored "-Wunused-template" 20 : : #pragma clang diagnostic ignored "-Wsign-conversion" 21 : : #pragma clang diagnostic ignored "-Wcast-qual" 22 : : #pragma clang diagnostic ignored "-Wheader-hygiene" 23 : : #pragma clang diagnostic ignored "-Wshadow" 24 : : #pragma clang diagnostic ignored "-Wshadow-field" 25 : : #pragma clang diagnostic ignored "-Wextra-semi" 26 : : #pragma clang diagnostic ignored "-Wextra-semi-stmt" 27 : : #pragma clang diagnostic ignored "-Wdocumentation" 28 : : #pragma clang diagnostic ignored "-Wunused-parameter" 29 : : #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" 30 : : #pragma clang diagnostic ignored "-Wdouble-promotion" 31 : : #pragma clang diagnostic ignored "-Wsuggest-destructor-override" 32 : : #pragma clang diagnostic ignored "-Wreserved-id-macro" 33 : : #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" 34 : : #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" 35 : : #pragma clang diagnostic ignored "-Wimplicit-int-conversion" 36 : : #pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" 37 : : #pragma clang diagnostic ignored "-Wold-style-cast" 38 : : #pragma clang diagnostic ignored "-Wshadow-field-in-constructor" 39 : : #pragma clang diagnostic ignored "-Wswitch-enum" 40 : : #pragma clang diagnostic ignored "-Wshorten-64-to-32" 41 : : #pragma clang diagnostic ignored "-Wcovered-switch-default" 42 : : #pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec" 43 : : #pragma clang diagnostic ignored "-Wmissing-noreturn" 44 : : #pragma clang diagnostic ignored "-Wunused-variable" 45 : : #pragma clang diagnostic ignored "-Wused-but-marked-unused" 46 : : #pragma clang diagnostic ignored "-Wdisabled-macro-expansion" 47 : : #pragma clang diagnostic ignored "-Winconsistent-missing-destructor-override" 48 : : #pragma clang diagnostic ignored "-Wredundant-parens" 49 : : #pragma clang diagnostic ignored "-Wunused-exception-parameter" 50 : : #pragma clang diagnostic ignored "-Wreorder-ctor" 51 : : #pragma clang diagnostic ignored "-Wweak-vtables" 52 : : #pragma clang diagnostic ignored "-Wshift-count-overflow" 53 : : #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" 54 : : #pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments" 55 : : #elif defined(STRICT_GNUC) 56 : : #pragma GCC diagnostic push 57 : : #pragma GCC diagnostic ignored "-Wunused-parameter" 58 : : #pragma GCC diagnostic ignored "-Wreorder" 59 : : #endif 60 : : 61 : : #define BOOST_BIND_GLOBAL_PLACEHOLDERS 62 : : #include "wallet/monero_wallet_full.h" 63 : : 64 : : #if defined(__clang__) 65 : : #pragma clang diagnostic pop 66 : : #elif defined(STRICT_GNUC) 67 : : #pragma GCC diagnostic pop 68 : : #endif 69 : : 70 : : #include "zmq_util.hpp" 71 : : 72 : : namespace piac { 73 : : 74 : : //! Monero wallet synchronization listener class 75 : : class WalletListener : public monero::monero_wallet_listener { 76 : : public: 77 : : 78 : 44 : WalletListener() : m_height( 0 ), m_start_height( 0 ), m_end_height( 0 ), 79 : 44 : m_percent_done( 0.0 ), m_message() {} 80 : : 81 : : void on_sync_progress( uint64_t height, uint64_t start_height, 82 : : uint64_t end_height, double percent_done, 83 : : const std::string& message ) override; 84 : : 85 : 44 : virtual ~WalletListener() = default; 86 : 1 : uint64_t height() const { return m_height; } 87 : 1 : uint64_t start_height() const { return m_start_height; } 88 : 1 : uint64_t end_height() const { return m_end_height; } 89 : 1 : double percent_done() const { return m_percent_done; } 90 : : std::string message() const { return m_message; } 91 : : 92 : : private: 93 : : uint64_t m_height; 94 : : uint64_t m_start_height; 95 : : uint64_t m_end_height; 96 : : double m_percent_done; 97 : : std::string m_message; 98 : : }; 99 : : 100 : : //! Send a command to piac daemon 101 : : void 102 : : send_cmd( std::string cmd, 103 : : zmqpp::context& ctx, 104 : : const std::string& host, 105 : : const std::string& rpc_server_public_key, 106 : : const zmqpp::curve::keypair& client_keys, 107 : : const std::unique_ptr< monero_wallet_full >& wallet ); 108 : : 109 : : //! Start wallet sync in the background 110 : : void 111 : : start_syncing( const std::string& msg, 112 : : monero_wallet_full* wallet, 113 : : WalletListener& listener ); 114 : : 115 : : //! Create a new monero wallet 116 : : std::unique_ptr< monero_wallet_full > 117 : : create_wallet( const std::string& monerod_host, WalletListener& listener ); 118 : : 119 : : //! Query and print currently active wallet keys 120 : : void 121 : : show_wallet_keys( const std::unique_ptr< monero_wallet_full >& wallet ); 122 : : 123 : : //! Query and print currently active wallet balance 124 : : void 125 : : show_wallet_balance( const std::unique_ptr< monero_wallet_full >& wallet, 126 : : const WalletListener& listener ); 127 : : 128 : : //! Change currently active user id / monero wallet 129 : : std::unique_ptr< monero_wallet_full > 130 : : switch_user( const std::string& mnemonic, 131 : : const std::string& monerod_host, 132 : : WalletListener& listener ); 133 : : 134 : : //! Show user id / monero wallet mnemonic 135 : : void 136 : : show_user( const std::unique_ptr< monero_wallet_full >& wallet ); 137 : : 138 : : } // piac::