35 #include <boost/program_options/options_description.hpp> 36 #include <boost/program_options/variables_map.hpp> 37 #include <boost/serialization/list.hpp> 38 #include <boost/serialization/vector.hpp> 39 #include <boost/serialization/deque.hpp> 42 #include "include_base_utils.h" 46 #include "net/http_client.h" 47 #include "storages/http_abstract_invoke.h" 62 #undef MONERO_DEFAULT_LOG_CATEGORY 63 #define MONERO_DEFAULT_LOG_CATEGORY "wallet.wallet2" 65 class Serialization_portability_wallet_Test;
81 crypto::chacha_key
key;
93 virtual boost::optional<epee::wipeable_string>
on_get_password(
const char *reason) {
return boost::none; }
136 template <
class t_archive>
153 friend class ::Serialization_portability_wallet_Test;
156 static constexpr
const std::chrono::seconds
rpc_timeout = std::chrono::minutes(3) + std::chrono::seconds(30);
171 static const char*
tr(
const char* str);
175 static std::string
device_name_option(
const boost::program_options::variables_map& vm);
176 static void init_options(boost::program_options::options_description& desc_params);
179 static std::unique_ptr<wallet2>
make_from_json(
const boost::program_options::variables_map& vm,
bool unattended,
const std::string& json_file,
const std::function<boost::optional<password_container>(
const char *,
bool)> &
password_prompter);
183 make_from_file(
const boost::program_options::variables_map& vm,
bool unattended,
const std::string& wallet_file,
const std::function<boost::optional<password_container>(
const char *,
bool)> &
password_prompter);
186 static std::pair<std::unique_ptr<wallet2>,
password_container>
make_new(
const boost::program_options::variables_map& vm,
bool unattended,
const std::function<boost::optional<password_container>(
const char *,
bool)> &
password_prompter);
189 static std::unique_ptr<wallet2>
make_dummy(
const boost::program_options::variables_map& vm,
bool unattended,
const std::function<boost::optional<password_container>(
const char *,
bool)> &
password_prompter);
191 static bool verify_password(
const std::string& keys_file_name,
const epee::wipeable_string& password,
bool no_spend_key,
hw::device &hwdev, uint64_t kdf_rounds);
229 boost::optional<cryptonote::subaddress_receive_info>
received;
255 uint64_t
amount()
const {
return m_amount; }
259 FIELD(m_block_height)
262 FIELD(m_internal_output_index)
263 FIELD(m_global_output_index)
265 FIELD(m_spent_height)
270 FIELD(m_key_image_known)
272 FIELD(m_subaddr_index)
273 FIELD(m_key_image_partial)
275 FIELD(m_multisig_info)
310 std::vector<cryptonote::tx_destination_entry>
m_dests;
316 std::vector<std::pair<crypto::key_image, std::vector<uint64_t>>>
m_rings;
325 std::vector<cryptonote::tx_destination_entry>
m_dests;
331 std::vector<std::pair<crypto::key_image, std::vector<uint64_t>>>
m_rings;
335 m_amount_in(utd.m_amount_in), m_amount_out(utd.m_amount_out), m_change(utd.m_change), m_block_height(
height), m_dests(utd.m_dests), m_payment_id(utd.m_payment_id), m_timestamp(utd.m_timestamp), m_unlock_time(utd.m_tx.unlock_time), m_subaddr_account(utd.m_subaddr_account), m_subaddr_indices(utd.m_subaddr_indices), m_rings(utd.m_rings) {}
340 std::vector<cryptonote::tx_source_entry>
sources;
348 std::vector<cryptonote::tx_destination_entry>
dests;
356 FIELD(selected_transfers)
360 FIELD(use_bulletproofs)
362 FIELD(subaddr_account)
363 FIELD(subaddr_indices)
392 std::vector<cryptonote::tx_destination_entry>
dests;
401 FIELD(dust_added_to_fee)
403 FIELD(selected_transfers)
406 FIELD(additional_tx_keys)
408 FIELD(construction_data)
417 std::vector<tx_construction_data>
txes;
423 std::vector<pending_tx>
ptx;
440 crypto::chacha_iv
iv;
451 crypto::chacha_iv
iv;
485 std::vector<cryptonote::transaction>
txes;
494 std::vector<boost::optional<cryptonote::subaddress_receive_info>>
received;
511 void generate(
const std::string& wallet_,
const epee::wipeable_string& password,
512 const epee::wipeable_string& multisig_data,
bool create_address_file =
false);
526 bool two_random =
false,
bool create_address_file =
false);
536 void generate(
const std::string& wallet,
const epee::wipeable_string& password,
547 void generate(
const std::string& wallet,
const epee::wipeable_string& password,
557 void restore(
const std::string& wallet_,
const epee::wipeable_string& password,
const std::string &
device_name,
bool create_address_file);
564 std::string
make_multisig(
const epee::wipeable_string &password,
565 const std::vector<std::string> &
info,
572 std::string
make_multisig(
const epee::wipeable_string &password,
573 const std::vector<crypto::secret_key> &view_keys,
574 const std::vector<crypto::public_key> &spend_keys,
583 bool finalize_multisig(
const epee::wipeable_string &password, std::unordered_set<crypto::public_key> pkeys, std::vector<crypto::public_key> signers);
611 void rewrite(
const std::string& wallet_name,
const epee::wipeable_string& password);
612 void write_watch_only_wallet(
const std::string& wallet_name,
const epee::wipeable_string& password, std::string &new_keys_filename);
613 void load(
const std::string& wallet,
const epee::wipeable_string& password);
620 void store_to(
const std::string &
path,
const epee::wipeable_string &password);
622 std::string
path()
const;
632 void encrypt_keys(
const epee::wipeable_string &password);
634 void decrypt_keys(
const epee::wipeable_string &password);
643 bool init(std::string daemon_address =
"http://localhost:8080",
644 boost::optional<epee::net_utils::http::login> daemon_login = boost::none, uint64_t upper_transaction_weight_limit = 0,
bool ssl =
false,
bool trusted_daemon =
false);
646 void stop() {
m_run.store(
false, std::memory_order_relaxed); }
658 bool get_seed(epee::wipeable_string& electrum_words,
const epee::wipeable_string &passphrase = epee::wipeable_string())
const;
689 void add_subaddress(uint32_t index_major,
const std::string& label);
699 void refresh(
bool trusted_daemon);
700 void refresh(
bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched);
701 void refresh(
bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched,
bool& received_money);
702 bool refresh(
bool trusted_daemon, uint64_t & blocks_fetched,
bool& received_money,
bool& ok);
709 bool multisig(
bool *ready = NULL, uint32_t *
threshold = NULL, uint32_t *total = NULL)
const;
712 bool get_multisig_seed(epee::wipeable_string& seed,
const epee::wipeable_string &passphrase = std::string(),
bool raw =
true)
const;
718 uint64_t
balance(uint32_t subaddr_index_major)
const;
727 void transfer_selected(
const std::vector<cryptonote::tx_destination_entry>& dsts,
const std::vector<size_t>& selected_transfers,
size_t fake_outputs_count,
728 std::vector<std::vector<tools::wallet2::get_outs_entry>> &outs,
730 void transfer_selected_rct(std::vector<cryptonote::tx_destination_entry> dsts,
const std::vector<size_t>& selected_transfers,
size_t fake_outputs_count,
731 std::vector<std::vector<tools::wallet2::get_outs_entry>> &outs,
735 void commit_tx(std::vector<pending_tx>& ptx_vector);
736 bool save_tx(
const std::vector<pending_tx>& ptx_vector,
const std::string &filename)
const;
737 std::string
dump_tx_to_str(
const std::vector<pending_tx> &ptx_vector)
const;
739 bool save_multisig_tx(
const multisig_tx_set &txs,
const std::string &filename);
741 bool save_multisig_tx(
const std::vector<pending_tx>& ptx_vector,
const std::string &filename);
744 bool sign_tx(
const std::string &unsigned_filename,
const std::string &signed_filename, std::vector<wallet2::pending_tx> &ptx, std::function<
bool(
const unsigned_tx_set&)> accept_func = NULL,
bool export_raw =
false);
746 bool sign_tx(unsigned_tx_set &exported_txs,
const std::string &signed_filename, std::vector<wallet2::pending_tx> &ptx,
bool export_raw =
false);
747 bool sign_tx(unsigned_tx_set &exported_txs, std::vector<wallet2::pending_tx> &ptx, signed_tx_set &signed_txs);
748 std::string
sign_tx_dump_to_str(unsigned_tx_set &exported_txs, std::vector<wallet2::pending_tx> &ptx, signed_tx_set &signed_txes);
750 bool load_unsigned_tx(
const std::string &unsigned_filename, unsigned_tx_set &exported_txs)
const;
752 bool load_tx(
const std::string &signed_filename, std::vector<tools::wallet2::pending_tx> &ptx, std::function<
bool(
const signed_tx_set&)> accept_func = NULL);
753 bool parse_tx_from_str(
const std::string &signed_tx_st, std::vector<tools::wallet2::pending_tx> &ptx, std::function<
bool(
const signed_tx_set &)> accept_func);
754 std::vector<wallet2::pending_tx>
create_transactions_2(std::vector<cryptonote::tx_destination_entry> dsts,
const size_t fake_outs_count,
const uint64_t unlock_time, uint32_t priority,
const std::vector<uint8_t>& extra, uint32_t subaddr_account, std::set<uint32_t> subaddr_indices);
755 std::vector<wallet2::pending_tx>
create_transactions_all(uint64_t below,
const cryptonote::account_public_address &address,
bool is_subaddress,
const size_t outputs,
const size_t fake_outs_count,
const uint64_t unlock_time, uint32_t priority,
const std::vector<uint8_t>& extra, uint32_t subaddr_account, std::set<uint32_t> subaddr_indices);
757 std::vector<wallet2::pending_tx>
create_transactions_from(
const cryptonote::account_public_address &address,
bool is_subaddress,
const size_t outputs, std::vector<size_t> unused_transfers_indices, std::vector<size_t> unused_dust_indices,
const size_t fake_outs_count,
const uint64_t unlock_time, uint32_t priority,
const std::vector<uint8_t>& extra);
759 bool load_multisig_tx_from_file(
const std::string &filename, multisig_tx_set &exported_txs, std::function<
bool(
const multisig_tx_set&)> accept_func = NULL);
760 bool sign_multisig_tx_from_file(
const std::string &filename, std::vector<crypto::hash> &txids, std::function<
bool(
const multisig_tx_set&)> accept_func);
761 bool sign_multisig_tx(multisig_tx_set &exported_txs, std::vector<crypto::hash> &txids);
762 bool sign_multisig_tx_to_file(multisig_tx_set &exported_txs,
const std::string &filename, std::vector<crypto::hash> &txids);
767 void get_payments(
const crypto::hash& payment_id, std::list<wallet2::payment_details>& payments, uint64_t min_height = 0,
const boost::optional<uint32_t>& subaddr_account = boost::none,
const std::set<uint32_t>& subaddr_indices = {})
const;
768 void get_payments(std::list<std::pair<crypto::hash,wallet2::payment_details>>& payments, uint64_t min_height, uint64_t max_height = (uint64_t)-1,
const boost::optional<uint32_t>& subaddr_account = boost::none,
const std::set<uint32_t>& subaddr_indices = {})
const;
769 void get_payments_out(std::list<std::pair<crypto::hash,wallet2::confirmed_transfer_details>>& confirmed_payments,
770 uint64_t min_height, uint64_t max_height = (uint64_t)-1,
const boost::optional<uint32_t>& subaddr_account = boost::none,
const std::set<uint32_t>& subaddr_indices = {})
const;
771 void get_unconfirmed_payments_out(std::list<std::pair<crypto::hash,wallet2::unconfirmed_transfer_details>>& unconfirmed_payments,
const boost::optional<uint32_t>& subaddr_account = boost::none,
const std::set<uint32_t>& subaddr_indices = {})
const;
772 void get_unconfirmed_payments(std::list<std::pair<crypto::hash,wallet2::pool_payment_details>>& unconfirmed_payments,
const boost::optional<uint32_t>& subaddr_account = boost::none,
const std::set<uint32_t>& subaddr_indices = {})
const;
782 template <
class t_archive>
785 uint64_t dummy_refresh_height = 0;
790 std::vector<crypto::hash> blockchain;
792 for (
const auto &
b: blockchain)
818 a & dummy_refresh_height;
827 std::unordered_map<crypto::hash, payment_details> m;
829 for (std::unordered_map<crypto::hash, payment_details>::const_iterator i = m.begin(); i != m.end(); ++i)
855 std::unordered_multimap<crypto::hash, payment_details> m;
857 for (
const auto &i: m)
867 std::unordered_map<cryptonote::subaddress_index, crypto::public_key> dummy_subaddresses_inv;
868 a & dummy_subaddresses_inv;
894 static void wallet_exists(
const std::string& file_path,
bool& keys_file_exists,
bool& wallet_file_exists);
965 std::string
get_reserve_proof(
const boost::optional<std::pair<uint32_t, uint64_t>> &account_minreserve,
const std::string &message);
1008 size_t pop_best_value_from(
const transfer_container &transfers, std::vector<size_t> &unused_dust_indices,
const std::vector<size_t>& selected_transfers,
bool smallest =
false)
const;
1009 size_t pop_best_value(std::vector<size_t> &unused_dust_indices,
const std::vector<size_t>& selected_transfers,
bool smallest =
false)
const;
1021 const std::pair<std::map<std::string, std::string>, std::vector<std::string>>&
get_account_tags();
1027 void set_account_tag(
const std::set<uint32_t> account_indices,
const std::string& tag);
1035 std::string
sign(
const std::string &data)
const;
1055 std::vector<tools::wallet2::transfer_details>
export_outputs()
const;
1057 size_t import_outputs(
const std::vector<tools::wallet2::transfer_details> &outputs);
1061 void import_payments_out(
const std::list<std::pair<crypto::hash,wallet2::confirmed_transfer_details>> &confirmed_payments);
1062 std::tuple<size_t, crypto::hash, std::vector<crypto::hash>>
export_blockchain()
const;
1065 std::vector<std::pair<crypto::key_image, crypto::signature>>
export_key_images()
const;
1066 uint64_t
import_key_images(
const std::vector<std::pair<crypto::key_image, crypto::signature>> &signed_key_images, uint64_t &spent, uint64_t &unspent,
bool check_spent =
true);
1067 uint64_t
import_key_images(
const std::string &filename, uint64_t &spent, uint64_t &unspent);
1072 std::string
encrypt(
const char *plaintext,
size_t len,
const crypto::secret_key &skey,
bool authenticated =
true)
const;
1075 std::string
encrypt(
const epee::wipeable_string &plaintext,
const crypto::secret_key &skey,
bool authenticated =
true)
const;
1077 template<
typename T=std::
string>
T decrypt(
const std::string &ciphertext,
const crypto::secret_key &skey,
bool authenticated =
true)
const;
1080 std::string
make_uri(
const std::string &address,
const std::string &payment_id, uint64_t amount,
const std::string &tx_description,
const std::string &recipient_name, std::string &error)
const;
1081 bool parse_uri(
const std::string &uri, std::string &address, std::string &payment_id, uint64_t &amount, std::string &tx_description, std::string &recipient_name, std::vector<std::string> &unknown_parameters, std::string &error);
1087 std::vector<std::pair<uint64_t, uint64_t>>
estimate_backlog(
const std::vector<std::pair<double, double>> &fee_levels);
1088 std::vector<std::pair<uint64_t, uint64_t>>
estimate_backlog(uint64_t min_tx_weight, uint64_t max_tx_weight,
const std::vector<uint64_t> &fees);
1112 void light_wallet_get_outs(std::vector<std::vector<get_outs_entry>> &outs,
const std::vector<size_t> &selected_transfers,
size_t fake_outputs_count);
1134 void set_attribute(
const std::string &key,
const std::string &value);
1142 template<
class t_request,
class t_response>
1143 inline bool invoke_http_json(
const boost::string_ref uri,
const t_request& req, t_response& res, std::chrono::milliseconds timeout = std::chrono::seconds(15),
const boost::string_ref http_method =
"GET")
1146 return epee::net_utils::invoke_http_json(uri, req, res,
m_http_client, timeout, http_method);
1148 template<
class t_request,
class t_response>
1149 inline bool invoke_http_bin(
const boost::string_ref uri,
const t_request& req, t_response& res, std::chrono::milliseconds timeout = std::chrono::seconds(15),
const boost::string_ref http_method =
"GET")
1152 return epee::net_utils::invoke_http_bin(uri, req, res,
m_http_client, timeout, http_method);
1154 template<
class t_request,
class t_response>
1155 inline bool invoke_http_json_rpc(
const boost::string_ref uri,
const std::string& method_name,
const t_request& req, t_response& res, std::chrono::milliseconds timeout = std::chrono::seconds(15),
const boost::string_ref http_method =
"GET",
const std::string& req_id =
"0")
1158 return epee::net_utils::invoke_http_json_rpc(uri, method_name, req, res,
m_http_client, timeout, http_method, req_id);
1177 void change_password(
const std::string &filename,
const epee::wipeable_string &original_password,
const epee::wipeable_string &new_password);
1187 bool store_keys(
const std::string& keys_file_name,
const epee::wipeable_string& password,
bool watch_only =
false);
1193 bool load_keys(
const std::string& keys_file_name,
const epee::wipeable_string& password);
1200 void pull_blocks(uint64_t start_height, uint64_t& blocks_start_height,
const std::list<crypto::hash> &short_chain_history, std::vector<cryptonote::block_complete_entry> &
blocks, std::vector<cryptonote::COMMAND_RPC_GET_BLOCKS_FAST::block_output_indices> &o_indices);
1201 void pull_hashes(uint64_t start_height, uint64_t& blocks_start_height,
const std::list<crypto::hash> &short_chain_history, std::vector<crypto::hash> &hashes);
1202 void fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height, std::list<crypto::hash> &short_chain_history,
bool force =
false);
1203 void pull_and_parse_next_blocks(uint64_t start_height, uint64_t &blocks_start_height, std::list<crypto::hash> &short_chain_history,
const std::vector<cryptonote::block_complete_entry> &prev_blocks,
const std::vector<parsed_block> &prev_parsed_blocks, std::vector<cryptonote::block_complete_entry> &
blocks, std::vector<parsed_block> &parsed_blocks,
bool &error);
1204 void process_parsed_blocks(uint64_t start_height,
const std::vector<cryptonote::block_complete_entry> &
blocks,
const std::vector<parsed_block> &parsed_blocks, uint64_t& blocks_added);
1205 uint64_t
select_transfers(uint64_t needed_money, std::vector<size_t> unused_transfers_indices, std::vector<size_t>& selected_transfers)
const;
1209 void add_unconfirmed_tx(
const cryptonote::transaction& tx, uint64_t amount_in,
const std::vector<cryptonote::tx_destination_entry> &dests,
const crypto::hash &payment_id, uint64_t change_amount, uint32_t subaddr_account,
const std::set<uint32_t>& subaddr_indices);
1223 std::vector<size_t>
pick_preferred_rct_inputs(uint64_t needed_money, uint32_t subaddr_account,
const std::set<uint32_t> &subaddr_indices)
const;
1226 void get_outs(std::vector<std::vector<get_outs_entry>> &outs,
const std::vector<size_t> &selected_transfers,
size_t fake_outputs_count);
1227 bool tx_add_fake_output(std::vector<std::vector<tools::wallet2::get_outs_entry>> &outs, uint64_t global_index,
const crypto::public_key& tx_public_key,
const rct::key& mask, uint64_t real_index,
bool unlocked)
const;
1229 bool should_pick_a_second_output(
bool use_rct,
size_t n_transfers,
const std::vector<size_t> &unused_transfers_indices,
const std::vector<size_t> &unused_dust_indices)
const;
1230 std::vector<size_t>
get_only_rct(
const std::vector<size_t> &unused_dust_indices,
const std::vector<size_t> &unused_transfers_indices)
const;
1231 void scan_output(
const cryptonote::transaction &tx,
const crypto::public_key &tx_pub_key,
size_t i, tx_scan_info_t &tx_scan_info,
int &num_vouts_received, std::unordered_map<cryptonote::subaddress_index, uint64_t> &tx_money_got_in_outs, std::vector<size_t> &outs);
1237 void update_multisig_rescan_info(
const std::vector<std::vector<rct::key>> &multisig_k,
const std::vector<std::vector<tools::wallet2::multisig_info>> &
info,
size_t n);
1243 void setup_keys(
const epee::wipeable_string &password);
1252 void create_keys_file(
const std::string &wallet_,
bool watch_only,
const epee::wipeable_string &password,
bool create_address_file);
1264 std::unordered_map<crypto::hash, crypto::secret_key>
m_tx_keys;
1278 std::pair<std::map<std::string, std::string>, std::vector<std::string>>
m_account_tags;
1379 template <
class Archive>
1383 template <
class Archive>
1419 template <
class Archive>
1500 template <
class Archive>
1507 template <
class Archive>
1515 template <
class Archive>
1522 template <
class Archive>
1556 if (!
typename Archive::is_saving() && x.
m_change != (uint64_t)-1)
1571 template <
class Archive>
1593 if (!
typename Archive::is_saving() && x.
m_change != (uint64_t)-1)
1601 if (!
typename Archive::is_saving())
1618 template <
class Archive>
1650 template <
class Archive>
1657 template <
class Archive>
1671 template <
class Archive>
1682 template <
class Archive>
1689 template <
class Archive>
1696 template <
class Archive>
1705 std::list<size_t> selected_transfers;
1706 a & selected_transfers;
1709 for (
size_t t: selected_transfers)
1731 template <
class Archive>
1741 template <
class Archive>
1752 std::list<size_t> selected_transfers;
1753 a & selected_transfers;
1756 for (
size_t t: selected_transfers)
1784 std::vector<cryptonote::tx_destination_entry>& splitted_dsts, std::vector<cryptonote::tx_destination_entry> &dust_dsts)
1786 splitted_dsts.clear();
1792 [&](uint64_t chunk) { splitted_dsts.push_back(cryptonote::tx_destination_entry(chunk, de.addr, de.is_subaddress)); },
1793 [&](uint64_t a_dust) { splitted_dsts.push_back(cryptonote::tx_destination_entry(a_dust, de.addr, de.is_subaddress)); } );
1797 [&](uint64_t chunk) {
1798 if (chunk <= dust_threshold)
1799 dust_dsts.push_back(cryptonote::tx_destination_entry(chunk, change_dst.addr, false));
1801 splitted_dsts.push_back(cryptonote::tx_destination_entry(chunk, change_dst.addr, false));
1803 [&](uint64_t a_dust) { dust_dsts.push_back(cryptonote::tx_destination_entry(a_dust, change_dst.addr, false)); } );
1808 std::vector<cryptonote::tx_destination_entry>& splitted_dsts, std::vector<cryptonote::tx_destination_entry> &dust_dsts)
1810 splitted_dsts = dsts;
1813 uint64_t change = change_dst.
amount;
1823 std::string indexes;
Definition: binary_utils.h:36
const uint32_t T[512]
Definition: groestl_tables.h:33
Definition: rctTypes.h:111
Definition: cryptonote_config.h:206
Definition: unordered_containers_boost_serialization.h:37
Definition: cryptonote_basic.h:427
Definition: cryptonote_protocol_defs.h:109
static const unsigned char iv[64]
Definition: sha512-hash.c:13
crypto::public_key shared_secret
Definition: wallet2.h:473
POD_CLASS key_derivation
Definition: crypto.h:85
Definition: cryptonote_basic.h:366
void decompose_amount_into_digits(uint64_t amount, uint64_t dust_threshold, const chunk_handler_t &chunk_handler, const dust_handler_t &dust_handler)
Definition: cryptonote_format_utils.h:187
uint64_t height
Definition: blockchain.cpp:88
uint64_t index_in_tx
Definition: wallet2.h:472
crypto namespace.
Definition: crypto.cpp:59
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
Definition: crypto.h:69
Definition: blockchain_ancestry.cpp:70
Definition: wallet2.h:469
Definition: cryptonote_basic.h:77
#define FEE_PER_KB
Definition: cryptonote_config.h:67
tools::wallet2::RefreshType refresh_type
Definition: simplewallet.cpp:320
boost::optional< tools::password_container > password_prompter(const char *prompt, bool verify)
Definition: simplewallet.cpp:219
uint64_t amount
Definition: cryptonote_tx_utils.h:51
static const crypto::hash null_hash
Definition: hash.h:93
size_t real_output
Definition: cryptonote_tx_utils.h:47
Definition: rctTypes.h:104
#define END_SERIALIZE()
self-explanatory
Definition: serialization.h:214
Definition: cryptonote_basic.h:156
BOOST_CLASS_VERSION(nodetool::node_server< cryptonote::t_cryptonote_protocol_handler< cryptonote::core > >, 1)
std::vector< tx_out > vout
Definition: cryptonote_basic.h:165
Definition: core_rpc_server_commands_defs.h:542
declaration and default definition for the functions used the API
Definition: expect.cpp:33
static void add(ge_p3 &p3, const ge_cached &other)
Definition: multiexp.cc:124
device_type
Definition: device.hpp:99
Definition: cryptonote_tx_utils.h:42
Definition: rctTypes.h:78
#define ts
Definition: skein.c:522
int b
Definition: base.py:1
Definition: subaddress_index.h:38
#define BEGIN_SERIALIZE_OBJECT()
begins the environment of the DSL for described the serialization of an object
Definition: serialization.h:190
Definition: rctTypes.h:416
uint64_t amount
Definition: cryptonote_tx_utils.h:76
Definition: device.hpp:82
POD_CLASS public_key
Definition: crypto.h:63
Definition: core_rpc_server_commands_defs.h:327
uint8_t version
Definition: blockchain.cpp:87
account_public_address addr
Definition: cryptonote_tx_utils.h:77
std::string blobdata
Definition: blobdatatype.h:35
CXA_THROW_INFO_T * info
Definition: stack_trace.cpp:90
#define blocks
Definition: sha512-hash.c:11
network_type
Definition: cryptonote_config.h:204
POD_CLASS signature
Definition: crypto.h:95
Definition: cryptonote_basic.h:400
key identity()
Definition: rctOps.h:73
POD_CLASS hash8
Definition: hash.h:52
crypto::public_key key
Definition: cryptonote_basic.h:81
crypto::signature shared_secret_sig
Definition: wallet2.h:475
POD_CLASS key_image
Definition: crypto.h:89
txout_target_v target
Definition: cryptonote_basic.h:146
size_t real_output_in_tx_index
Definition: cryptonote_tx_utils.h:50
string a
Definition: MakeCryptoOps.py:15
crypto::hash get_transaction_hash(const transaction &t)
Definition: cryptonote_format_utils.cpp:829
std::vector< output_entry > outputs
Definition: cryptonote_tx_utils.h:46
Definition: cryptonote_tx_utils.h:74
crypto::signature key_image_sig
Definition: wallet2.h:476
crypto::hash txid
Definition: wallet2.h:471
POD_CLASS hash
Definition: hash.h:49
A container for blockchain checkpoints.
Definition: checkpoints.h:51
crypto::key_image key_image
Definition: wallet2.h:474
std::pair< uint64_t, rct::ctkey > output_entry
Definition: cryptonote_tx_utils.h:44
std::string print_money(uint64_t amount, unsigned int decimal_point)
Definition: cryptonote_format_utils.cpp:808
RangeProofType
Definition: rctTypes.h:234
Definition: cryptonote_basic.h:143
std::enable_if< Archive::is_loading::value, void >::type initialize_transfer_details(Archive &a, tools::wallet2::transfer_details &x, const boost::serialization::version_type ver)
Definition: wallet2.h:1384
#define FIELD(f)
tags the field with the variable name and then serializes it
Definition: serialization.h:243
Definition: core_rpc_server_commands_defs.h:104
Definition: cryptonote_basic.h:182
#define true
Definition: stdbool.h:36
uint8_t threshold
Definition: blockchain.cpp:89