From e9c89dc6ab903819ebbaf14bbe5852fa0eaaaee3 Mon Sep 17 00:00:00 2001 From: jeffro256 Date: Fri, 30 May 2025 14:24:52 -0500 Subject: [PATCH] wallet: kill support for deprecated ephemeral Boost messages The commit kills support for deprecated ephemeral Boost messages: signed/unsigned transaction sets, pending transactions, reserve proofs, MMS messages, etc. It does NOT kill support for loading very old wallets in Boost format, that should be supported indefinitely. These messages were deprecated 5 years ago. Since then, we have had a hard fork to enable a new non-compatible transaction type (w/ view tags), and disable the old transaction type. This renders basically all of the aforementioned messages before that HF useless, with the possible exception of reserve proofs. This commit also cleans up dead inclusions of boost serialization headers. This commit is part of upstreaming Carrot/FCMP++. Killing support for Boost messages now means less boilerplate Boost serialization review for Carrot/FCMP++. --- .../blockchain_blackball.cpp | 1 - src/blockchain_utilities/blockchain_stats.cpp | 1 - src/blockchain_utilities/blocksdat_file.h | 1 - .../bootstrap_serialization.h | 2 +- src/cryptonote_core/blockchain.cpp | 1 - src/cryptonote_core/tx_pool.cpp | 1 - src/simplewallet/simplewallet.cpp | 6 +- src/wallet/message_store.cpp | 34 +-- src/wallet/message_store.h | 89 +----- src/wallet/message_transporter.h | 2 - src/wallet/wallet2.cpp | 120 +------- src/wallet/wallet2.h | 155 ---------- src/wallet/wallet_rpc_server.cpp | 12 - tests/data/signed_monero_tx | Bin 15284 -> 0 bytes tests/data/unsigned_monero_tx | Bin 1753 -> 0 bytes tests/unit_tests/serialization.cpp | 281 ------------------ 16 files changed, 6 insertions(+), 700 deletions(-) delete mode 100644 tests/data/signed_monero_tx delete mode 100644 tests/data/unsigned_monero_tx diff --git a/src/blockchain_utilities/blockchain_blackball.cpp b/src/blockchain_utilities/blockchain_blackball.cpp index 522e40c3c8..cf41134d15 100644 --- a/src/blockchain_utilities/blockchain_blackball.cpp +++ b/src/blockchain_utilities/blockchain_blackball.cpp @@ -33,7 +33,6 @@ #include "common/command_line.h" #include "common/varint.h" #include "serialization/crypto.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" #include "cryptonote_core/tx_pool.h" #include "cryptonote_core/cryptonote_core.h" #include "cryptonote_core/blockchain.h" diff --git a/src/blockchain_utilities/blockchain_stats.cpp b/src/blockchain_utilities/blockchain_stats.cpp index 3fbdae5489..7c8fb228b2 100644 --- a/src/blockchain_utilities/blockchain_stats.cpp +++ b/src/blockchain_utilities/blockchain_stats.cpp @@ -30,7 +30,6 @@ #include #include "common/command_line.h" #include "common/varint.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" #include "cryptonote_core/cryptonote_core.h" #include "blockchain_db/blockchain_db.h" #include "time_helper.h" diff --git a/src/blockchain_utilities/blocksdat_file.h b/src/blockchain_utilities/blocksdat_file.h index 4e63361a74..d28ccb1089 100644 --- a/src/blockchain_utilities/blocksdat_file.h +++ b/src/blockchain_utilities/blocksdat_file.h @@ -36,7 +36,6 @@ #include #include "cryptonote_basic/cryptonote_basic.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" #include "cryptonote_core/blockchain.h" #include "blockchain_db/blockchain_db.h" diff --git a/src/blockchain_utilities/bootstrap_serialization.h b/src/blockchain_utilities/bootstrap_serialization.h index 667ab32076..27fe1e4505 100644 --- a/src/blockchain_utilities/bootstrap_serialization.h +++ b/src/blockchain_utilities/bootstrap_serialization.h @@ -28,7 +28,7 @@ #pragma once -#include "cryptonote_basic/cryptonote_boost_serialization.h" +#include "cryptonote_basic/cryptonote_basic.h" #include "serialization/difficulty_type.h" diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 0b3b9b7206..87aa1e50ef 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -40,7 +40,6 @@ #include "tx_pool.h" #include "blockchain.h" #include "blockchain_db/blockchain_db.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" #include "cryptonote_basic/events.h" #include "cryptonote_config.h" #include "cryptonote_basic/miner.h" diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index d2de250446..c63465e4a1 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -36,7 +36,6 @@ #include "tx_pool.h" #include "cryptonote_tx_utils.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" #include "cryptonote_basic/events.h" #include "cryptonote_config.h" #include "blockchain.h" diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index 28048590ba..923b74e252 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -3031,11 +3031,8 @@ bool simple_wallet::set_load_deprecated_formats(const std::vector & if (pwd_container) { parse_bool_and_use(args[1], [&](bool r) { - m_wallet->load_deprecated_formats(r); - m_wallet->rewrite(m_wallet_file, pwd_container->password()); - if (r) - message_writer() << tr("Warning: deprecated formats use boost serialization, which has buffer overflows and crashers. Only load deprecated formats from sources you trust."); + fail_msg_writer() << tr("Warning: deprecated formats use boost serialization, which has buffer overflows and crashes. Support for them has been discontinued."); }); } return true; @@ -3766,7 +3763,6 @@ bool simple_wallet::set_variable(const std::vector &args) << " (disabled on Windows)" #endif ; - success_msg_writer() << "load-deprecated-formats = " << m_wallet->load_deprecated_formats(); success_msg_writer() << "enable-multisig-experimental = " << m_wallet->is_multisig_enabled(); return true; } diff --git a/src/wallet/message_store.cpp b/src/wallet/message_store.cpp index 87fa6936e7..f72048559c 100644 --- a/src/wallet/message_store.cpp +++ b/src/wallet/message_store.cpp @@ -767,7 +767,7 @@ void message_store::write_to_file(const multisig_wallet_state &state, const std: THROW_WALLET_EXCEPTION_IF(!success, tools::error::file_save_error, filename); } -void message_store::read_from_file(const multisig_wallet_state &state, const std::string &filename, bool load_deprecated_formats) +void message_store::read_from_file(const multisig_wallet_state &state, const std::string &filename) { boost::system::error_code ignored_ec; bool file_exists = boost::filesystem::exists(filename, ignored_ec); @@ -793,22 +793,6 @@ void message_store::read_from_file(const multisig_wallet_state &state, const std loaded = true; } catch (...) {} - if (!loaded && load_deprecated_formats) - { - try - { - std::stringstream iss; - iss << buf; - boost::archive::portable_binary_iarchive ar(iss); - ar >> read_file_data; - loaded = true; - } - catch (const std::exception &e) - { - MERROR("MMS file " << filename << " has bad structure : " << e.what()); - THROW_WALLET_EXCEPTION_IF(true, tools::error::file_read_error, filename); - } - } if (!loaded) { MERROR("MMS file " << filename << " has bad structure "); @@ -830,22 +814,6 @@ void message_store::read_from_file(const multisig_wallet_state &state, const std loaded = true; } catch(...) {} - if (!loaded && load_deprecated_formats) - { - try - { - std::stringstream iss; - iss << decrypted_data; - boost::archive::portable_binary_iarchive ar(iss); - ar >> *this; - loaded = true; - } - catch (const std::exception &e) - { - MERROR("MMS file " << filename << " has bad structure: " << e.what()); - THROW_WALLET_EXCEPTION_IF(true, tools::error::file_read_error, filename); - } - } if (!loaded) { MERROR("MMS file " << filename << " has bad structure"); diff --git a/src/wallet/message_store.h b/src/wallet/message_store.h index 466c2acba8..f0978540a6 100644 --- a/src/wallet/message_store.h +++ b/src/wallet/message_store.h @@ -38,8 +38,6 @@ #include #include #include "serialization/serialization.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" -#include "cryptonote_basic/account_boost_serialization.h" #include "cryptonote_basic/cryptonote_basic.h" #include "common/i18n.h" #include "common/command_line.h" @@ -352,7 +350,7 @@ namespace mms void stop() { m_run.store(false, std::memory_order_relaxed); m_transporter.stop(); } void write_to_file(const multisig_wallet_state &state, const std::string &filename); - void read_from_file(const multisig_wallet_state &state, const std::string &filename, bool load_deprecated_formats = false); + void read_from_file(const multisig_wallet_state &state, const std::string &filename); template inline void serialize(t_archive &a, const unsigned int ver) @@ -418,88 +416,3 @@ namespace mms void save(const multisig_wallet_state &state); }; } - -BOOST_CLASS_VERSION(mms::file_data, 0) -BOOST_CLASS_VERSION(mms::message_store, 0) -BOOST_CLASS_VERSION(mms::message, 0) -BOOST_CLASS_VERSION(mms::file_transport_message, 0) -BOOST_CLASS_VERSION(mms::authorized_signer, 1) -BOOST_CLASS_VERSION(mms::auto_config_data, 0) - -namespace boost -{ - namespace serialization - { - template - inline void serialize(Archive &a, mms::file_data &x, const boost::serialization::version_type ver) - { - a & x.magic_string; - a & x.file_version; - a & x.iv; - a & x.encrypted_data; - } - - template - inline void serialize(Archive &a, mms::message &x, const boost::serialization::version_type ver) - { - a & x.id; - a & x.type; - a & x.direction; - a & x.content; - a & x.created; - a & x.modified; - a & x.sent; - a & x.signer_index; - a & x.hash; - a & x.state; - a & x.wallet_height; - a & x.round; - a & x.signature_count; - a & x.transport_id; - } - - template - inline void serialize(Archive &a, mms::authorized_signer &x, const boost::serialization::version_type ver) - { - a & x.label; - a & x.transport_address; - a & x.monero_address_known; - a & x.monero_address; - a & x.me; - a & x.index; - if (ver < 1) - { - return; - } - a & x.auto_config_token; - a & x.auto_config_public_key; - a & x.auto_config_secret_key; - a & x.auto_config_transport_address; - a & x.auto_config_running; - } - - template - inline void serialize(Archive &a, mms::auto_config_data &x, const boost::serialization::version_type ver) - { - a & x.label; - a & x.transport_address; - a & x.monero_address; - } - - template - inline void serialize(Archive &a, mms::file_transport_message &x, const boost::serialization::version_type ver) - { - a & x.sender_address; - a & x.iv; - a & x.encryption_public_key; - a & x.internal_message; - } - - template - inline void serialize(Archive &a, crypto::chacha_iv &x, const boost::serialization::version_type ver) - { - a & x.data; - } - - } -} diff --git a/src/wallet/message_transporter.h b/src/wallet/message_transporter.h index 342e418366..6d818f4a04 100644 --- a/src/wallet/message_transporter.h +++ b/src/wallet/message_transporter.h @@ -30,8 +30,6 @@ #pragma once #include "serialization/keyvalue_serialization.h" #include "cryptonote_basic/cryptonote_basic.h" -#include "cryptonote_basic/cryptonote_boost_serialization.h" -#include "cryptonote_basic/account_boost_serialization.h" #include "net/http_server_impl_base.h" #include "net/http_client.h" #include "net/abstract_http_client.h" diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index dd0ed39bfc..594ac8e9e3 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1250,7 +1250,6 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended, std m_offline(false), m_rpc_version(0), m_export_format(ExportFormat::Binary), - m_load_deprecated_formats(false), m_enable_multisig(false), m_pool_info_query_time(0), m_has_ever_refreshed_from_node(false), @@ -4706,7 +4705,7 @@ boost::optional wallet2::get_keys_file_data(const crypt value2.SetInt(m_export_format); json.AddMember("export_format", value2, json.GetAllocator()); - value2.SetInt(m_load_deprecated_formats); + value2.SetInt(false); json.AddMember("load_deprecated_formats", value2, json.GetAllocator()); value2.SetUint(1); @@ -4972,7 +4971,6 @@ bool wallet2::load_keys_buf(const std::string& keys_buf, const epee::wipeable_st m_subaddress_lookahead_minor = SUBADDRESS_LOOKAHEAD_MINOR; m_original_keys_available = false; m_export_format = ExportFormat::Binary; - m_load_deprecated_formats = false; m_device_name = ""; m_device_derivation_path = ""; m_key_device_type = hw::device::device_type::SOFTWARE; @@ -5157,9 +5155,6 @@ bool wallet2::load_keys_buf(const std::string& keys_buf, const epee::wipeable_st GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, export_format, ExportFormat, Int, false, Binary); m_export_format = field_export_format; - GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, load_deprecated_formats, int, Int, false, false); - m_load_deprecated_formats = field_load_deprecated_formats; - GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, device_name, std::string, String, false, std::string()); if (m_device_name.empty()) { @@ -6514,7 +6509,7 @@ void wallet2::load(const std::string& wallet_, const epee::wipeable_string& pass try { if (use_fs) - m_message_store.read_from_file(get_multisig_wallet_state(), m_mms_file, m_load_deprecated_formats); + m_message_store.read_from_file(get_multisig_wallet_state(), m_mms_file); } catch (const std::exception &e) { @@ -7689,50 +7684,13 @@ bool wallet2::parse_unsigned_tx_from_str(const std::string &unsigned_tx_st, unsi s = s.substr(1); if (version == '\003') { - if (!m_load_deprecated_formats) - { LOG_PRINT_L0("Not loading deprecated format"); return false; - } - try - { - std::istringstream iss(s); - boost::archive::portable_binary_iarchive ar(iss); - ar >> exported_txs; - } - catch (...) - { - LOG_PRINT_L0("Failed to parse data from unsigned tx"); - return false; - } } else if (version == '\004') { - if (!m_load_deprecated_formats) - { LOG_PRINT_L0("Not loading deprecated format"); return false; - } - try - { - s = decrypt_with_view_secret_key(s); - try - { - std::istringstream iss(s); - boost::archive::portable_binary_iarchive ar(iss); - ar >> exported_txs; - } - catch (...) - { - LOG_PRINT_L0("Failed to parse data from unsigned tx"); - return false; - } - } - catch (const std::exception &e) - { - LOG_PRINT_L0("Failed to decrypt unsigned tx: " << e.what()); - return false; - } } else if (version == '\005') { @@ -8004,50 +7962,13 @@ bool wallet2::parse_tx_from_str(const std::string &signed_tx_st, std::vector> signed_txs; - } - catch (...) - { - LOG_PRINT_L0("Failed to parse data from signed transaction"); - return false; - } } else if (version == '\004') { - if (!m_load_deprecated_formats) - { LOG_PRINT_L0("Not loading deprecated format"); return false; - } - try - { - s = decrypt_with_view_secret_key(s); - try - { - std::istringstream iss(s); - boost::archive::portable_binary_iarchive ar(iss); - ar >> signed_txs; - } - catch (...) - { - LOG_PRINT_L0("Failed to parse decrypted data from signed transaction"); - return false; - } - } - catch (const std::exception &e) - { - LOG_PRINT_L0("Failed to decrypt signed transaction: " << e.what()); - return false; - } } else if (version == '\005') { @@ -8199,17 +8120,6 @@ bool wallet2::parse_multisig_tx_from_str(std::string multisig_tx_st, multisig_tx loaded = true; } catch (...) {} - try - { - if (!loaded && m_load_deprecated_formats) - { - std::istringstream iss(multisig_tx_st); - boost::archive::portable_binary_iarchive ar(iss); - ar >> exported_txs; - loaded = true; - } - } - catch(...) {} if (!loaded) { @@ -12775,12 +12685,6 @@ bool wallet2::check_reserve_proof(const cryptonote::account_public_address &addr loaded = true; } catch(...) {} - if (!loaded && m_load_deprecated_formats) - { - std::istringstream iss(sig_decoded); - boost::archive::portable_binary_iarchive ar(iss); - ar >> proofs >> subaddr_spendkeys; - } THROW_WALLET_EXCEPTION_IF(subaddr_spendkeys.count(address.m_spend_public_key) == 0, error::wallet_internal_error, "The given address isn't found in the proof"); @@ -14503,19 +14407,6 @@ size_t wallet2::import_outputs_from_str(const std::string &outputs_st) } catch (...) {} - if (!loaded && m_load_deprecated_formats) - { - try - { - std::stringstream iss; - iss << body; - boost::archive::portable_binary_iarchive ar(iss); - ar >> outputs; - loaded = true; - } - catch (...) {} - } - if (!loaded) { std::get<0>(outputs) = 0; @@ -14777,13 +14668,6 @@ size_t wallet2::import_multisig(std::vector blobs) loaded = true; } catch(...) {} - if (!loaded && m_load_deprecated_formats) - { - std::istringstream iss(body); - boost::archive::portable_binary_iarchive ar(iss); - ar >> i; - loaded = true; - } CHECK_AND_ASSERT_THROW_MES(loaded, "Failed to load output data"); for (const auto &e: i) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 47b1753d76..a78bf49b05 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -1481,8 +1481,6 @@ private: void device_derivation_path(const std::string &device_derivation_path) { m_device_derivation_path = device_derivation_path; } const ExportFormat & export_format() const { return m_export_format; } inline void set_export_format(const ExportFormat& export_format) { m_export_format = export_format; } - bool load_deprecated_formats() const { return m_load_deprecated_formats; } - void load_deprecated_formats(bool load) { m_load_deprecated_formats = load; } bool is_multisig_enabled() const { return m_enable_multisig; } void enable_multisig(bool enable) { m_enable_multisig = enable; } bool is_mismatched_daemon_version_allowed() const { return m_allow_mismatched_daemon_version; } @@ -2035,7 +2033,6 @@ private: std::unique_ptr m_device_callback; ExportFormat m_export_format; - bool m_load_deprecated_formats; bool m_has_ever_refreshed_from_node; @@ -2051,18 +2048,11 @@ BOOST_CLASS_VERSION(tools::wallet2, 31) BOOST_CLASS_VERSION(tools::wallet2::transfer_details, 12) BOOST_CLASS_VERSION(tools::wallet2::multisig_info, 1) BOOST_CLASS_VERSION(tools::wallet2::multisig_info::LR, 0) -BOOST_CLASS_VERSION(tools::wallet2::multisig_tx_set, 1) BOOST_CLASS_VERSION(tools::wallet2::payment_details, 5) BOOST_CLASS_VERSION(tools::wallet2::pool_payment_details, 1) BOOST_CLASS_VERSION(tools::wallet2::unconfirmed_transfer_details, 8) BOOST_CLASS_VERSION(tools::wallet2::confirmed_transfer_details, 6) BOOST_CLASS_VERSION(tools::wallet2::address_book_row, 18) -BOOST_CLASS_VERSION(tools::wallet2::reserve_proof_entry, 0) -BOOST_CLASS_VERSION(tools::wallet2::unsigned_tx_set, 1) -BOOST_CLASS_VERSION(tools::wallet2::signed_tx_set, 1) -BOOST_CLASS_VERSION(tools::wallet2::tx_construction_data, 4) -BOOST_CLASS_VERSION(tools::wallet2::pending_tx, 3) -BOOST_CLASS_VERSION(tools::wallet2::multisig_sig, 1) BOOST_CLASS_VERSION(tools::wallet2::background_synced_tx_t, 0) BOOST_CLASS_VERSION(tools::wallet2::background_sync_data_t, 0) @@ -2243,13 +2233,6 @@ namespace boost a & x.m_partial_key_images; } - template - inline void serialize(Archive &a, tools::wallet2::multisig_tx_set &x, const boost::serialization::version_type ver) - { - a & x.m_ptx; - a & x.m_signers; - } - template inline void serialize(Archive &a, tools::wallet2::unconfirmed_transfer_details &x, const boost::serialization::version_type ver) { @@ -2426,144 +2409,6 @@ namespace boost a & x.m_payment_id; } - template - inline void serialize(Archive& a, tools::wallet2::reserve_proof_entry& x, const boost::serialization::version_type ver) - { - a & x.txid; - a & x.index_in_tx; - a & x.shared_secret; - a & x.key_image; - a & x.shared_secret_sig; - a & x.key_image_sig; - } - - template - inline void serialize(Archive &a, tools::wallet2::unsigned_tx_set &x, const boost::serialization::version_type ver) - { - a & x.txes; - if (ver == 0) - { - // load old version - std::pair old_transfers; - a & old_transfers; - std::get<0>(x.transfers) = std::get<0>(old_transfers); - std::get<1>(x.transfers) = std::get<0>(old_transfers) + std::get<1>(old_transfers).size(); - std::get<2>(x.transfers) = std::get<1>(old_transfers); - return; - } - throw std::runtime_error("Boost serialization not supported for newest unsigned_tx_set"); - } - - template - inline void serialize(Archive &a, tools::wallet2::signed_tx_set &x, const boost::serialization::version_type ver) - { - a & x.ptx; - a & x.key_images; - if (ver < 1) - return; - a & x.tx_key_images; - } - - template - inline void serialize(Archive &a, tools::wallet2::tx_construction_data &x, const boost::serialization::version_type ver) - { - a & x.sources; - a & x.change_dts; - a & x.splitted_dsts; - if (ver < 2) - { - // load list to vector - std::list selected_transfers; - a & selected_transfers; - x.selected_transfers.clear(); - x.selected_transfers.reserve(selected_transfers.size()); - for (size_t t: selected_transfers) - x.selected_transfers.push_back(t); - } - a & x.extra; - a & x.unlock_time; - a & x.use_rct; - a & x.dests; - if (ver < 1) - { - x.subaddr_account = 0; - return; - } - a & x.subaddr_account; - a & x.subaddr_indices; - if (ver < 2) - { - if (!typename Archive::is_saving()) - x.rct_config = { rct::RangeProofBorromean, 0 }; - return; - } - a & x.selected_transfers; - if (ver < 3) - { - if (!typename Archive::is_saving()) - x.rct_config = { rct::RangeProofBorromean, 0 }; - return; - } - if (ver < 4) - { - bool use_bulletproofs = x.rct_config.range_proof_type != rct::RangeProofBorromean; - a & use_bulletproofs; - if (!typename Archive::is_saving()) - x.rct_config = { use_bulletproofs ? rct::RangeProofPaddedBulletproof : rct::RangeProofBorromean, 0 }; - return; - } - a & x.rct_config; - } - - template - inline void serialize(Archive &a, tools::wallet2::multisig_sig &x, const boost::serialization::version_type ver) - { - a & x.sigs; - a & x.ignore; - a & x.used_L; - a & x.signing_keys; - a & x.msout; - if (ver < 1) - return; - a & x.total_alpha_G; - a & x.total_alpha_H; - a & x.c_0; - a & x.s; - } - - template - inline void serialize(Archive &a, tools::wallet2::pending_tx &x, const boost::serialization::version_type ver) - { - a & x.tx; - a & x.dust; - a & x.fee; - a & x.dust_added_to_fee; - a & x.change_dts; - if (ver < 2) - { - // load list to vector - std::list selected_transfers; - a & selected_transfers; - x.selected_transfers.clear(); - x.selected_transfers.reserve(selected_transfers.size()); - for (size_t t: selected_transfers) - x.selected_transfers.push_back(t); - } - a & x.key_images; - a & x.tx_key; - a & x.dests; - a & x.construction_data; - if (ver < 1) - return; - a & x.additional_tx_keys; - if (ver < 2) - return; - a & x.selected_transfers; - if (ver < 3) - return; - a & x.multisig_sigs; - } - template inline void serialize(Archive& a, tools::wallet2::background_synced_tx_t &x, const boost::serialization::version_type ver) { diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index c1d4b1476b..41ed22ddc7 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -1890,18 +1890,6 @@ namespace tools } catch(...) {} - if (!loaded && !m_restricted) - { - try - { - std::istringstream iss(blob); - boost::archive::portable_binary_iarchive ar(iss); - ar >> ptx; - loaded = true; - } - catch (...) {} - } - if (!loaded) { er.code = WALLET_RPC_ERROR_CODE_BAD_TX_METADATA; diff --git a/tests/data/signed_monero_tx b/tests/data/signed_monero_tx deleted file mode 100644 index f1aa1ee8a6c466f253b695fb478e1c05a4df48b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15284 zcmb`uRa6{I)GbKk?k=H&6Wrb1-2w!6mjEFIg1dVlKnQNZ9fG@S2<}es5OnJM@7$Tk znTOji-K$rvs(tp^b?VfqDis%JD|Z*Dhn}!}ijP}QTmXKF@vc$fIBu6UK`BC~M?kMx?uFA&o>Kl2x zmSHwb{Z6zS?W`ke@hG&Z*|EJZ0M-8n1_ObfT?fS7piaGer|_bccPA;Gzn0h0*x<7u zzRX57BiDqBxlq7 zt3DGL`h7|A^+QPaN@GSK)CH>XEKmpsfo2+Xyvut+V%T)<)F(gR+0Dhgb`MasrS|B(Z0>t9#M4uT9~%i$VYMrxbyEc9JC;j&ed}M({G47zkFwV8-=sdm zd=Y-u?Dyn#^PQ3qnMR(=tMA=J0q_3oqrps4n9eX@fuD6{6qU!x zUG0Ce6=TlKK8eWr1nFTqDqcN*#-o8ipr3HyRvSdJzTBEjF8fD(4lr#hNmy+^7}h{n z*i4c%11;8Mb~FPIAsNCm$-owhBdB6&VlXb_pn1Q$ z)!~W5o=l91u5zB9U!vZfZ64rbx2oPt?PRJ;uMWStB9%W83 zNe_OdYglg*QY?E(&15TmVpt?P%##?`4Co{=#{lx@Cw2J zRPxa~%HRl6?(Inb+vx|n)UIGgGUHulFc;mp<*OHN_Q{Q?RJMF5O&(ck{gnrFJ{YcR z?VXAT^r1qan;+j8WOeCe0xmz=|Y14cVy|W z*uh8SG1ey%o0>X%gblMErvW|HNPt6&LD)Wny-M%Zo?A$odun-`JN22k&kCh*xbio` z0(`(aBEtA_?PPQ}*?C9-k!eq8Z;)3dRLD6vYJ(T`37rJ^_TLcS@}v3rx*axlZAR0{ z${Ra^hF%5E(TuuEyF)EHz!=B5WzdW74M9RqiW(WwTisKbw3yKeG$mvP+Tbv|D==>n z5Rse6|8{fdy9=pc?Ua#oBr3^!;}WB)E~g}yD^LR*Rrh!oA7BI8Bh}8sw8 z%Eo|G0|Cn5T6$@3NeAeOmpeI)fQt$DA-$RPG?}`#;)gdtWA8oRo*X(kl-pI1M&6_U!2`0s+* z(75w!|47~kAuZn75NF)CpLZ)WyoY433Lf>xI=s+7;Fk@QO=~jsVH3n!+~$xC9|T4U z!&>2?n0Ki*L5YOq{J<}>yC#lw7;8zd;h3EvQT-?tM(2EL1ipjPxf!0w9t2<%xyD|> zTOqLuk<8M9$0x36lH8QmZseSnCo%0L>Kh5rhvkJ~!mooBMi?xqn23*D*gZd({jAJn z@qPH?%vkH>f#-O_Nt91MrzK?$(J~KlX53Vk$9j)ej<_&Mm{=sMvm^ z!^H%RCv55Np+H*qeT6I0?yts26>>iS zPDvH(_qF(iKU+7JYaL?4e$3=dkqu~fIlUsLzgFZ_2lIBJhK;)%Jz}X>ro6ENpJTul`P**xxgfIkqRtfs4}&AFFO9UKhA;#YE%2sAy5w* z-m|1VaT})v(uzFtT86n5(_cxiL>PBmdBv5pW&vY;YN^vUSK`EMpTxd&ld8z#7x@d; zz;YLvLG!qZzSaW2XjQQ^-Au94{!?}F@S10y)+Umh7KSc*OECDE*&tK{6)tq6nas2P zq`8ELoypW|6e6*zDBTu1)O~Hi@A8$L0$6+N(fE)Dhe7K5US-zty|@$;a|EI)=?%v> z@5|gtesrLZ$z^u-3vP{785p(7Z%>5pp3;)E@&iRA1(L&6DH2|TK7`{xq}RQ29`Ff^ zTqnPgaCoEmGhcixS^OVjUN7#11ZaV%^s3~bxCAc#Zz9gGRyz#AFqd@>Y`VZZk~s4E zT0Fp5NBn91&nt3Wmc)Ychs@=g9!_6Zn9ugET;b~DotZMo|79SX=z_bU1NgWUf%+Ev zh4=wi6_=q2Lp$RgeKB2kfSGB zG4!i_pLAUPf$s#D713B97KkY=56dN#-@_fYkD~i?2w&3uI5~Wy#sqXonCz5$t~r9k zts*_p{EFUqh#`e!9Y@F*nRR9r){`2nxa2LxH4e|jb5{O4u|lJ%U({g}_e59YGTQQH zyu4a%fi2JU*7{sQvv{JK7{ad}Oln(?Y>E;3`F^F?J%~jmxq>-$Dn0k6xGDGb1&i<4 zb*$bq_2)+=e6%zy@6d?GZxIdv$8?+(Yn_YXP4^1+m;0Jw%H*#3{t~SSflx#{IXIDH zFbXZ<2)!%EYKcacDjl28vgSrqt2Ee`;4}T-V5EM)^g@MxXk|*S#C2 zkYte3u)kwKy_$cVAY0O#+i9DLDJHBrcsxY^+UOuDgAf5 z)sLsIntEJU2^zrKS6TRH0z`ABs^SucX5V)Or9A3(jACx8Ra6j!!rd={Z|4(q*Y}@R zWxQXHTgA4S8l%Iy{2=~HJyEf@M%MoG0azO(zse)(TeI+`NjeWlJr$eLxBU>mR2+@S z1SMDhOUQp~&~rr1fE}NeIcY(&$XdMP(^W^nV8^1fz6ADi^Q&pVN9Jb?98#FJ6+Q;! zg0$2(bwMLqnj;TF5QB35FDtG8W!w2ND#c*|-BWMi-qB&T;7g#C%XPZ`!`=-}ze?-0 zhkzIpcztk79?iO)lGLuiE|Xq=+M$G4))lzfGpN$iXRZjWl~U(^D@2)ksrir5&eKy( zE|gmMLw>O&Q*qguq$-RbXaPIo{!h#cR&>*T3bP+&+KuCBF_|7en?N6OGrMCXue=b&)~fXy5y(uh_pFEA4-w zTWR$x3h!B4+2>_~Q8-Bk=x5M4s{-UOQRe?}>7}_A!tSQKjW7+pzmtD&3;0Mv*JCWg z3QHfMIyxF-O!ZpMAs*lz8#H`F#Z!FQCIKS*@wR*Ihx}9ZxPG$Pn_HSdp684^-&ef- zQ_{<2_U7S$v1V2Ud>q0tWdkLJYpo&^qj2oRz~dV=mL(ds?Bsn4;9Jkebn7q{iV zjYkGL^|6gSsr=c?dCgcdviONsr8+<@qTuD-407deqll_FKq~&s;u{)8!xmVq<9S5U zJ{u|MZ>j3N@#FmaR7Wl12N0!9_Asa*tKCc>0*}R49B;^P${R3d=GxGb zJ_6tNW+vbBANDlwq|>(;MUPA?_REWcgpNB^_!+VfO$*@21 zXr+W)@?E?e1-3w++$y@0PkfNgh*H79h}s>7|*uk zdSr<*u);99`?|6!E2q8=)0_Qi8+h7AksFUbtJ!@!+BFEeXZ&;J?TDlQlIB z(XWQ2^LcmtO@@3L^Mm|sy~6@3%x^7zZTES0jTmmw6M4ke1$ED?_-~!n``36X|GvI( z0`H#`l7E3skuxdOqzK3FDGyAFPHFy=<|T1l{DwRBNg3D@U{OAmB>z|VJ{I>R(239c zL&t6lR6MNV8+~9vgPZ{1#3#g_c5c;(;EQP3=tM(FEgX^hyMy z&E`Vz_g^@l`7_u69~ZuK-xJWP#`m@D<+4L{u6->Yr4WBnYHMZI*nF&e3pf>nKp~}Z z6?dmb=DInEqkntR=_c4XdBZklI({ki@q;*)ax$GHB1=%S8PDLEL7_`Q4dWKwbdNZd zG4?L?3FiW|xb28>lS9PqkWnj)iFUjH$frSWQ2eHKULfP-hl)fF!0}!@7GuQwJc3YD zNI;d+$;3LmaQoZQ?XVWg%PDWn7|^MK82R!U)rNis++)l)qg#T{59eq})gMR&q;Q~| zaLz!dmQKB_TJYO{y3+!?z9i&dxWVN`J9}z&{D@M{grii#G)Me&P&m&s3^t14?#L=a7~hh-LHf%9!vRg?CgHh)hAmyOu{h?_sf3>;!8i z+Lu19NUdy&D;jn5g*7>Gn18w;tfBzAnokJ&fM1W5thD0|{TVqgBW%vV6KVRl z@4JQghsr+pehZ`*)cMSN3OwH$|(tdYp5a?d@ zyXhPHzcH?ZTuas8E#pv-x!qb0T<$Mv=0is~F6SZ8CdrPkWA!fIZ3W!)+9Eh&g|4A< zD>;!)q$w?u1hm-hAbaFCZ17d_QR58UZgC%QTlkL19c@4pk;(ZDZxP=hav1{6)&5d5 zT5>M zmnijksHW$WN?^*ruL`yNXSdADxrr$^-Y8Dgjv|%Jn ze2hMYKo5oq1@dG=*)y)^zm`x|sN>sfOD1;xYCOZISL|C`=z~B9SJu*;Fcki^JVY8S zq_7HPOSYm0O*!)ys_C0diDZp|Y#LUu6R*$X?wCHl-wnp>v`tW`L`js(`uN;YjJNk| z1qAwcxk$J&f>7q_r-Ll{VdHd8C$g)GgzV>s?JLsA3JD{SJ0eRS$iLE7-E-xlH^p2} zZYB7pkfMNdS4M$CGO|WH1oqmiD+IGC<>3`xZQ>JXTQZ+(Ik&h6CS?&l82kCL; u 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 diff --git a/tests/unit_tests/serialization.cpp b/tests/unit_tests/serialization.cpp index 1ca9687a84..d15e3f378d 100644 --- a/tests/unit_tests/serialization.cpp +++ b/tests/unit_tests/serialization.cpp @@ -899,287 +899,6 @@ TEST(Serialization, portability_outputs) ASSERT_TRUE(td2.m_pk_index == 0); } -struct unsigned_tx_set -{ - std::vector txes; - tools::wallet2::transfer_container transfers; -}; -template -inline void serialize(Archive &a, unsigned_tx_set &x, const boost::serialization::version_type ver) -{ - a & x.txes; - a & x.transfers; -} -#define UNSIGNED_TX_PREFIX "Monero unsigned tx set\003" -TEST(Serialization, portability_unsigned_tx) -{ - const boost::filesystem::path filename = unit_test::data_dir / "unsigned_monero_tx"; - std::string s; - const cryptonote::network_type nettype = cryptonote::TESTNET; - bool r = epee::file_io_utils::load_file_to_string(filename.string(), s); - ASSERT_TRUE(r); - const size_t magiclen = strlen(UNSIGNED_TX_PREFIX); - ASSERT_FALSE(strncmp(s.c_str(), UNSIGNED_TX_PREFIX, magiclen)); - unsigned_tx_set exported_txs; - s = s.substr(magiclen); - r = false; - try - { - std::istringstream iss(s); - boost::archive::portable_binary_iarchive ar(iss); - ar >> exported_txs; - r = true; - } - catch (...) - {} - ASSERT_TRUE(r); - /* - fields of tools::wallet2::unsigned_tx_set to be checked: - std::vector txes - std::vector m_transfers - - fields of toolw::wallet2::tx_construction_data to be checked: - std::vector sources - cryptonote::tx_destination_entry change_dts - std::vector splitted_dsts - std::list selected_transfers - std::vector extra - uint64_t unlock_time - bool use_rct - std::vector dests - - fields of cryptonote::tx_source_entry to be checked: - std::vector> outputs - size_t real_output - crypto::public_key real_out_tx_key - size_t real_output_in_tx_index - uint64_t amount - bool rct - rct::key mask - - fields of cryptonote::tx_destination_entry to be checked: - uint64_t amount - account_public_address addr - */ - // txes - ASSERT_TRUE(exported_txs.txes.size() == 1); - auto& tcd = exported_txs.txes[0]; - // tcd.sources - ASSERT_TRUE(tcd.sources.size() == 1); - auto& tse = tcd.sources[0]; - // tcd.sources[0].outputs - ASSERT_TRUE(tse.outputs.size() == 5); - auto& out0 = tse.outputs[0]; - auto& out1 = tse.outputs[1]; - auto& out2 = tse.outputs[2]; - auto& out3 = tse.outputs[3]; - auto& out4 = tse.outputs[4]; - ASSERT_TRUE(out0.first == 6295); - ASSERT_TRUE(out1.first == 14302); - ASSERT_TRUE(out2.first == 17598); - ASSERT_TRUE(out3.first == 18671); - ASSERT_TRUE(out4.first == 19760); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out0.second) == "e7272cb589954ddeedd20de9411ed57265f154d41f33cec9ff69e5d642e09814096490b0ac85308342acf436cc0270d53abef9dc04c6202f2459e879bfd40ce6"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out1.second) == "c3a9f49d1fe75939cc3feb39871ce0a7366c2879a63faa1a5cf34e65723b120a272ff0c7d84ab8b6ee3528d196450b0e28b3fed276bc2597a2b5b17afb9354ab"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out2.second) == "176e239c8c39000c2275e2f63ed7d55c55e0843524091522bbd3d3b869044969021fad70fc1244115449d4754829ae7c47346342ee5d52a2cdd47dfc351d0ab0"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out3.second) == "ef12d7946302fb064f2ba9df1a73d72233ac74664ed3b370580fa3bdc377542ad93f64898bd95851d6efe0d7bf2dbbea9b7c6b3c57e2c807e7b17d55b4622259"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out4.second) == "0d8467e16e73d16510452b78823e082e05ee3a63788d40de577cf31eb555f0c8525096cbc88d00a841eed66f3cdb6f0a018e6ce9fb9433ed61afba15cbbebd04"); - // tcd.sources[0].{real_output, real_out_tx_key, real_output_in_tx_index, amount, rct, mask} - ASSERT_TRUE(tse.real_output == 4); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.real_out_tx_key) == "4d86c7ba1c285fe4bc1cd7b54ba894fa89fa02fc6b0bbeea67d53251acd14a05"); - ASSERT_TRUE(tse.real_output_in_tx_index == 1); - ASSERT_TRUE(tse.amount == 11066009260865); - ASSERT_TRUE(tse.rct); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.mask) == "789bafff169ef206aa21219342c69ca52ce1d78d776c10b21d14bdd960fc7703"); - // tcd.change_dts - ASSERT_TRUE(tcd.change_dts.amount == 9631208773403); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, tcd.change_dts.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk"); - // tcd.splitted_dsts - ASSERT_TRUE(tcd.splitted_dsts.size() == 2); - auto& splitted_dst0 = tcd.splitted_dsts[0]; - auto& splitted_dst1 = tcd.splitted_dsts[1]; - ASSERT_TRUE(splitted_dst0.amount == 1400000000000); - ASSERT_TRUE(splitted_dst1.amount == 9631208773403); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst0.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA"); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst1.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk"); - // tcd.selected_transfers - ASSERT_TRUE(tcd.selected_transfers.size() == 1); - ASSERT_TRUE(tcd.selected_transfers.front() == 2); - // tcd.extra - ASSERT_TRUE(tcd.extra.size() == 68); - // tcd.{unlock_time, use_rct} - ASSERT_TRUE(tcd.unlock_time == 0); - ASSERT_TRUE(tcd.use_rct); - // tcd.dests - ASSERT_TRUE(tcd.dests.size() == 1); - auto& dest = tcd.dests[0]; - ASSERT_TRUE(dest.amount == 1400000000000); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, dest.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA"); - // transfers - ASSERT_TRUE(exported_txs.transfers.size() == 3); - auto& td0 = exported_txs.transfers[0]; - auto& td1 = exported_txs.transfers[1]; - auto& td2 = exported_txs.transfers[2]; - ASSERT_TRUE(td0.m_block_height == 818424); - ASSERT_TRUE(td1.m_block_height == 818522); - ASSERT_TRUE(td2.m_block_height == 818522); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td0.m_txid) == "15024343b38e77a1a9860dfed29921fa17e833fec837191a6b04fa7cb9605b8e"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td1.m_txid) == "ec34c9bb12b99af33d49691384eee5bed9171498ff04e59516505f35d1fc5efc"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td2.m_txid) == "6e7013684d35820f66c6679197ded9329bfe0e495effa47e7b25258799858dba"); - ASSERT_TRUE(td0.m_internal_output_index == 0); - ASSERT_TRUE(td1.m_internal_output_index == 0); - ASSERT_TRUE(td2.m_internal_output_index == 1); - ASSERT_TRUE(td0.m_global_output_index == 19642); - ASSERT_TRUE(td1.m_global_output_index == 19757); - ASSERT_TRUE(td2.m_global_output_index == 19760); - ASSERT_TRUE (td0.m_spent); - ASSERT_FALSE(td1.m_spent); - ASSERT_FALSE(td2.m_spent); - ASSERT_TRUE(td0.m_spent_height == 0); - ASSERT_TRUE(td1.m_spent_height == 0); - ASSERT_TRUE(td2.m_spent_height == 0); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td0.m_key_image) == "c5680d3735b90871ca5e3d90cd82d6483eed1151b9ab75c2c8c3a7d89e00a5a8"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td1.m_key_image) == "d54cbd435a8d636ad9b01b8d4f3eb13bd0cf1ce98eddf53ab1617f9b763e66c0"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td2.m_key_image) == "6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td0.m_mask) == "0100000000000000000000000000000000000000000000000000000000000000"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td1.m_mask) == "d3997a7b27fa199a377643b88cbd3f20f447496746dabe92d288730ecaeda007"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(td2.m_mask) == "789bafff169ef206aa21219342c69ca52ce1d78d776c10b21d14bdd960fc7703"); - ASSERT_TRUE(td0.m_amount == 13400845012231); - ASSERT_TRUE(td1.m_amount == 1200000000000); - ASSERT_TRUE(td2.m_amount == 11066009260865); - ASSERT_TRUE(td0.m_rct); - ASSERT_TRUE(td1.m_rct); - ASSERT_TRUE(td2.m_rct); - ASSERT_TRUE(td0.m_key_image_known); - ASSERT_TRUE(td1.m_key_image_known); - ASSERT_TRUE(td2.m_key_image_known); - ASSERT_TRUE(td0.m_pk_index == 0); - ASSERT_TRUE(td1.m_pk_index == 0); - ASSERT_TRUE(td2.m_pk_index == 0); -} - -#define SIGNED_TX_PREFIX "Monero signed tx set\003" -TEST(Serialization, portability_signed_tx) -{ - const boost::filesystem::path filename = unit_test::data_dir / "signed_monero_tx"; - const cryptonote::network_type nettype = cryptonote::TESTNET; - std::string s; - bool r = epee::file_io_utils::load_file_to_string(filename.string(), s); - ASSERT_TRUE(r); - const size_t magiclen = strlen(SIGNED_TX_PREFIX); - ASSERT_FALSE(strncmp(s.c_str(), SIGNED_TX_PREFIX, magiclen)); - tools::wallet2::signed_tx_set exported_txs; - s = s.substr(magiclen); - r = false; - try - { - std::istringstream iss(s); - boost::archive::portable_binary_iarchive ar(iss); - ar >> exported_txs; - r = true; - } - catch (...) - {} - ASSERT_TRUE(r); - /* - fields of tools::wallet2::signed_tx_set to be checked: - std::vector ptx - std::vector key_images - - fields of tools::walllet2::pending_tx to be checked: - cryptonote::transaction tx // TODO - uint64_t dust - uint64_t fee - bool dust_added_to_fee - cryptonote::tx_destination_entry change_dts - std::list selected_transfers - std::string key_images - crypto::secret_key tx_key - std::vector dests - tx_construction_data construction_data - */ - // ptx - ASSERT_TRUE(exported_txs.ptx.size() == 1); - auto& ptx = exported_txs.ptx[0]; - // ptx.{dust, fee, dust_added_to_fee} - ASSERT_TRUE (ptx.dust == 0); - ASSERT_TRUE (ptx.fee == 34800487462); - ASSERT_FALSE(ptx.dust_added_to_fee); - // ptx.change.{amount, addr} - ASSERT_TRUE(ptx.change_dts.amount == 9631208773403); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, ptx.change_dts.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk"); - // ptx.selected_transfers - ASSERT_TRUE(ptx.selected_transfers.size() == 1); - ASSERT_TRUE(ptx.selected_transfers.front() == 2); - // ptx.{key_images, tx_key} - ASSERT_TRUE(ptx.key_images == "<6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76> "); - ASSERT_TRUE(epee::string_tools::pod_to_hex(unwrap(unwrap(ptx.tx_key))) == "0100000000000000000000000000000000000000000000000000000000000000"); - // ptx.dests - ASSERT_TRUE(ptx.dests.size() == 1); - ASSERT_TRUE(ptx.dests[0].amount == 1400000000000); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, ptx.dests[0].addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA"); - // ptx.construction_data - auto& tcd = ptx.construction_data; - ASSERT_TRUE(tcd.sources.size() == 1); - auto& tse = tcd.sources[0]; - // ptx.construction_data.sources[0].outputs - ASSERT_TRUE(tse.outputs.size() == 5); - auto& out0 = tse.outputs[0]; - auto& out1 = tse.outputs[1]; - auto& out2 = tse.outputs[2]; - auto& out3 = tse.outputs[3]; - auto& out4 = tse.outputs[4]; - ASSERT_TRUE(out0.first == 6295); - ASSERT_TRUE(out1.first == 14302); - ASSERT_TRUE(out2.first == 17598); - ASSERT_TRUE(out3.first == 18671); - ASSERT_TRUE(out4.first == 19760); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out0.second) == "e7272cb589954ddeedd20de9411ed57265f154d41f33cec9ff69e5d642e09814096490b0ac85308342acf436cc0270d53abef9dc04c6202f2459e879bfd40ce6"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out1.second) == "c3a9f49d1fe75939cc3feb39871ce0a7366c2879a63faa1a5cf34e65723b120a272ff0c7d84ab8b6ee3528d196450b0e28b3fed276bc2597a2b5b17afb9354ab"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out2.second) == "176e239c8c39000c2275e2f63ed7d55c55e0843524091522bbd3d3b869044969021fad70fc1244115449d4754829ae7c47346342ee5d52a2cdd47dfc351d0ab0"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out3.second) == "ef12d7946302fb064f2ba9df1a73d72233ac74664ed3b370580fa3bdc377542ad93f64898bd95851d6efe0d7bf2dbbea9b7c6b3c57e2c807e7b17d55b4622259"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(out4.second) == "0d8467e16e73d16510452b78823e082e05ee3a63788d40de577cf31eb555f0c8525096cbc88d00a841eed66f3cdb6f0a018e6ce9fb9433ed61afba15cbbebd04"); - // ptx.construction_data.sources[0].{real_output, real_out_tx_key, real_output_in_tx_index, amount, rct, mask} - ASSERT_TRUE(tse.real_output == 4); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.real_out_tx_key) == "4d86c7ba1c285fe4bc1cd7b54ba894fa89fa02fc6b0bbeea67d53251acd14a05"); - ASSERT_TRUE(tse.real_output_in_tx_index == 1); - ASSERT_TRUE(tse.amount == 11066009260865); - ASSERT_TRUE(tse.rct); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.mask) == "789bafff169ef206aa21219342c69ca52ce1d78d776c10b21d14bdd960fc7703"); - // ptx.construction_data.change_dts - ASSERT_TRUE(tcd.change_dts.amount == 9631208773403); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, tcd.change_dts.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk"); - // ptx.construction_data.splitted_dsts - ASSERT_TRUE(tcd.splitted_dsts.size() == 2); - auto& splitted_dst0 = tcd.splitted_dsts[0]; - auto& splitted_dst1 = tcd.splitted_dsts[1]; - ASSERT_TRUE(splitted_dst0.amount == 1400000000000); - ASSERT_TRUE(splitted_dst1.amount == 9631208773403); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst0.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA"); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst1.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk"); - // ptx.construction_data.selected_transfers - ASSERT_TRUE(tcd.selected_transfers.size() == 1); - ASSERT_TRUE(tcd.selected_transfers.front() == 2); - // ptx.construction_data.extra - ASSERT_TRUE(tcd.extra.size() == 68); - // ptx.construction_data.{unlock_time, use_rct} - ASSERT_TRUE(tcd.unlock_time == 0); - ASSERT_TRUE(tcd.use_rct); - // ptx.construction_data.dests - ASSERT_TRUE(tcd.dests.size() == 1); - auto& dest = tcd.dests[0]; - ASSERT_TRUE(dest.amount == 1400000000000); - ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, dest.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA"); - // key_images - ASSERT_TRUE(exported_txs.key_images.size() == 3); - auto& ki0 = exported_txs.key_images[0]; - auto& ki1 = exported_txs.key_images[1]; - auto& ki2 = exported_txs.key_images[2]; - ASSERT_TRUE(epee::string_tools::pod_to_hex(ki0) == "c5680d3735b90871ca5e3d90cd82d6483eed1151b9ab75c2c8c3a7d89e00a5a8"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(ki1) == "d54cbd435a8d636ad9b01b8d4f3eb13bd0cf1ce98eddf53ab1617f9b763e66c0"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(ki2) == "6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76"); -} - TEST(Serialization, difficulty_type) { std::vector v_original;