From c4be6e120a26d55852a176faecaf3cea62108a20 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Thu, 15 Feb 2024 06:13:54 +0400 Subject: [PATCH] adaptation of zarcanum era codebase to pre_zarcanum api(for backward compatibility with exchanges) --- src/wallet/wallet_public_structs_defs.h | 43 ++++++++++++++++++++++--- src/wallet/wallet_rpc_server.cpp | 39 +++++++++++++--------- src/wallet/wallet_rpc_server.h | 6 ++-- tests/core_tests/chaingen_main.cpp | 2 +- tests/core_tests/wallet_rpc_tests.cpp | 6 ++-- 5 files changed, 71 insertions(+), 25 deletions(-) diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index 11c11a68..6610bb7d 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -273,18 +273,28 @@ namespace wallet_public } }; - struct wallet_transfer_info_old : public wallet_transfer_info { - uint64_t amount = 0; - bool is_income = false; + //uint64_t amount = 0; + //bool is_income = false; BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE(is_income) - KV_SERIALIZE(amount) + KV_SERIALIZE_EPHEMERAL_N(uint64_t, wallet_transfer_info_to_amount, "amount") + KV_SERIALIZE_EPHEMERAL_N(bool, wallet_transfer_info_to_is_income, "is_income") + //KV_SERIALIZE(amount) KV_CHAIN_BASE(wallet_transfer_info) END_KV_SERIALIZE_MAP() + static uint64_t wallet_transfer_info_to_amount(const wallet_transfer_info_old& wtio) + { + return wtio.get_native_amount(); + } + + static bool wallet_transfer_info_to_is_income(const wallet_transfer_info_old& wtio) + { + return wtio.get_native_is_income(); + } + }; @@ -1226,6 +1236,29 @@ namespace wallet_public }; }; + struct COMMAND_RPC_SEARCH_FOR_TRANSACTIONS_LEGACY + { + typedef COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::request request; + + struct response + { + std::list in; + std::list out; + //std::list pending; + //std::list failed; + std::list pool; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(in) + KV_SERIALIZE(out) + //KV_SERIALIZE(pending) + //KV_SERIALIZE(failed) + KV_SERIALIZE(pool) + END_KV_SERIALIZE_MAP() + }; + }; + + struct htlc_entry_info { currency::account_public_address counterparty_address; diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 498af626..96b65215 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -276,6 +276,16 @@ namespace tools WALLET_RPC_CATCH_TRY_ENTRY(); } //------------------------------------------------------------------------------------------------------------------------------ + template + void copy_wallet_transfer_info_old_container(const t_from& from_c, t_to& to_c) + { + for (const auto& item : from_c) + { + to_c.push_back(wallet_public::wallet_transfer_info_old()); + *static_cast(&to_c.back()) = item; + } + } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::on_get_recent_txs_and_info(const wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO::request& req, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) { //this is legacy api, should be removed after successful transition to HF4 @@ -286,20 +296,7 @@ namespace tools res.pi = rsp2.pi; res.total_transfers = rsp2.total_transfers; res.last_item_index = rsp2.last_item_index; - for (const auto& item : rsp2.transfers) - { - res.transfers.push_back(wallet_public::wallet_transfer_info_old()); - *static_cast(&res.transfers.back()) = item; - for (const auto& subitem : item.subtransfers) - { - if (subitem.asset_id == currency::native_coin_asset_id) - { - res.transfers.back().amount = subitem.amount; - res.transfers.back().is_income = subitem.is_income; - } - } - } - + copy_wallet_transfer_info_old_container(rsp2.transfers, res.transfers); return true; WALLET_RPC_CATCH_TRY_ENTRY(); } @@ -699,8 +696,19 @@ namespace tools return true; } + + bool wallet_rpc_server::on_search_for_transactions(const wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS_LEGACY::request& req, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS_LEGACY::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::response res_origin; + bool r = this->on_search_for_transactions2(req, res_origin, er, cntx); + copy_wallet_transfer_info_old_container(res_origin.in, res.in); + copy_wallet_transfer_info_old_container(res_origin.out, res.out); + copy_wallet_transfer_info_old_container(res_origin.pool, res.pool); + + return r; + } //------------------------------------------------------------------------------------------------------------------------------ - bool wallet_rpc_server::on_search_for_transactions(const wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::request& req, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::response& res, epee::json_rpc::error& er, connection_context& cntx) + bool wallet_rpc_server::on_search_for_transactions2(const wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::request& req, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::response& res, epee::json_rpc::error& er, connection_context& cntx) { WALLET_RPC_BEGIN_TRY_ENTRY(); bool tx_id_specified = req.tx_id != currency::null_hash; @@ -753,6 +761,7 @@ namespace tools return true; WALLET_RPC_CATCH_TRY_ENTRY(); } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::on_get_mining_history(const wallet_public::COMMAND_RPC_GET_MINING_HISTORY::request& req, wallet_public::COMMAND_RPC_GET_MINING_HISTORY::response& res, epee::json_rpc::error& er, connection_context& cntx) { WALLET_RPC_BEGIN_TRY_ENTRY(); diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h index 989411eb..f95ae920 100644 --- a/src/wallet/wallet_rpc_server.h +++ b/src/wallet/wallet_rpc_server.h @@ -105,7 +105,8 @@ namespace tools MAP_JON_RPC_WE("sweep_below", on_sweep_below, wallet_public::COMMAND_SWEEP_BELOW) MAP_JON_RPC_WE("sign_transfer", on_sign_transfer, wallet_public::COMMAND_SIGN_TRANSFER) MAP_JON_RPC_WE("submit_transfer", on_submit_transfer, wallet_public::COMMAND_SUBMIT_TRANSFER) - MAP_JON_RPC_WE("search_for_transactions", on_search_for_transactions, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS) + MAP_JON_RPC_WE("search_for_transactions", on_search_for_transactions, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS_LEGACY) + MAP_JON_RPC_WE("search_for_transactions2", on_search_for_transactions2, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS) MAP_JON_RPC_WE("get_restore_info", on_getwallet_restore_info, wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO) MAP_JON_RPC_WE("get_seed_phrase_info", on_get_seed_phrase_info, wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO) MAP_JON_RPC_WE("get_mining_history", on_get_mining_history, wallet_public::COMMAND_RPC_GET_MINING_HISTORY) @@ -161,7 +162,8 @@ namespace tools bool on_sweep_below(const wallet_public::COMMAND_SWEEP_BELOW::request& req, wallet_public::COMMAND_SWEEP_BELOW::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_sign_transfer(const wallet_public::COMMAND_SIGN_TRANSFER::request& req, wallet_public::COMMAND_SIGN_TRANSFER::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_submit_transfer(const wallet_public::COMMAND_SUBMIT_TRANSFER::request& req, wallet_public::COMMAND_SUBMIT_TRANSFER::response& res, epee::json_rpc::error& er, connection_context& cntx); - bool on_search_for_transactions(const wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::request& req, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_search_for_transactions(const wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS_LEGACY::request& req, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS_LEGACY::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_search_for_transactions2(const wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::request& req, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_get_mining_history(const wallet_public::COMMAND_RPC_GET_MINING_HISTORY::request& req, wallet_public::COMMAND_RPC_GET_MINING_HISTORY::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_register_alias(const wallet_public::COMMAND_RPC_REGISTER_ALIAS::request& req, wallet_public::COMMAND_RPC_REGISTER_ALIAS::response& res, epee::json_rpc::error& er, connection_context& cntx); diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp index d9e72a18..98900f42 100644 --- a/tests/core_tests/chaingen_main.cpp +++ b/tests/core_tests/chaingen_main.cpp @@ -1085,7 +1085,7 @@ int main(int argc, char* argv[]) GENERATE_AND_PLAY(wallet_rpc_integrated_address); GENERATE_AND_PLAY(wallet_rpc_integrated_address_transfer); GENERATE_AND_PLAY(wallet_rpc_transfer); - GENERATE_AND_PLAY(wallet_rpc_exchange_suite); + GENERATE_AND_PLAY_HF(wallet_rpc_exchange_suite, "3,4"); GENERATE_AND_PLAY(wallet_chain_switch_with_spending_the_same_ki); GENERATE_AND_PLAY(wallet_sending_to_integrated_address); diff --git a/tests/core_tests/wallet_rpc_tests.cpp b/tests/core_tests/wallet_rpc_tests.cpp index 1f4af0c0..e704855f 100644 --- a/tests/core_tests/wallet_rpc_tests.cpp +++ b/tests/core_tests/wallet_rpc_tests.cpp @@ -314,6 +314,8 @@ bool wallet_rpc_exchange_suite::generate(std::vector& events) account_base& miner_acc = m_accounts[MINER_ACC_IDX]; miner_acc.generate(); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, test_core_time::get_time()); + DO_CALLBACK(events, "configure_core"); // default callback will initialize core runtime config with m_hardforks + DO_CALLBACK(events, "c1"); return true; @@ -379,7 +381,7 @@ std::string get_integr_addr(tools::wallet_rpc_server& custody_wlt_rpc, const std #define TRANSFER_COMMENT "SSDVSf" std::string transfer_(std::shared_ptr wlt, const std::string& address, uint64_t amount) { - tools::wallet_rpc_server custody_wlt_rpc(*wlt); + tools::wallet_rpc_server custody_wlt_rpc(wlt); pre_hf4_api::COMMAND_RPC_TRANSFER::request tr_req = AUTO_VAL_INIT(tr_req); tr_req.comment = TRANSFER_COMMENT; tr_req.destinations.resize(1); @@ -447,7 +449,7 @@ bool wallet_rpc_exchange_suite::c1(currency::core& c, size_t ev_index, const std // wallet RPC server - tools::wallet_rpc_server custody_wlt_rpc(*custody_wlt); + tools::wallet_rpc_server custody_wlt_rpc(custody_wlt); r = test_payment_ids_generation(custody_wlt_rpc); CHECK_AND_ASSERT_MES(r, false, "test_payment_ids_generation() failed ");