diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index 9967a13c..0b4b1970 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -274,6 +274,21 @@ namespace wallet_public }; + struct wallet_transfer_info_old : public wallet_transfer_info + { + uint64_t amount = 0; + bool is_income = false; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(is_income) + KV_SERIALIZE(amount) + KV_CHAIN_BASE(wallet_transfer_info) + END_KV_SERIALIZE_MAP() + + }; + + + struct asset_balance_entry_base { uint64_t total = 0; @@ -486,25 +501,25 @@ namespace wallet_public #define ORDER_FROM_BEGIN_TO_END "FROM_BEGIN_TO_END" #define ORDER_FROM_FROM_END_TO_BEGIN "FROM_END_TO_BEGIN" - struct COMMAND_RPC_GET_RECENT_TXS_AND_INFO + struct COMMAND_RPC_GET_RECENT_TXS_AND_INFO2 { struct request { /* - if offset is 0, then GET_RECENT_TXS_AND_INFO return - unconfirmed transactions as the first first items of "transfers", + if offset is 0, then GET_RECENT_TXS_AND_INFO return + unconfirmed transactions as the first first items of "transfers", this unconfirmed transactions is not counted regarding "count" parameter */ uint64_t offset; uint64_t count; - /* - need_to_get_info - should backend re-calculate balance(could be relatively heavy, - and not needed when getting long tx history with multiple calls + /* + need_to_get_info - should backend re-calculate balance(could be relatively heavy, + and not needed when getting long tx history with multiple calls of GET_RECENT_TXS_AND_INFO with offsets) */ - bool update_provision_info; + bool update_provision_info; bool exclude_mining_txs; bool exclude_unconfirmed; std::string order; // "FROM_BEGIN_TO_END" or "FROM_END_TO_BEGIN" @@ -535,6 +550,30 @@ namespace wallet_public }; }; + + struct COMMAND_RPC_GET_RECENT_TXS_AND_INFO + { + typedef COMMAND_RPC_GET_RECENT_TXS_AND_INFO2::request request; + + struct response + { + wallet_provision_info pi; + std::vector transfers; + uint64_t total_transfers; + uint64_t last_item_index; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(pi) + KV_SERIALIZE(transfers) + KV_SERIALIZE(total_transfers) + KV_SERIALIZE(last_item_index) + END_KV_SERIALIZE_MAP() + }; + }; + + + + struct COMMAND_RPC_REGISTER_ALIAS { struct request @@ -561,9 +600,9 @@ namespace wallet_public struct transfer_destination { - uint64_t amount; + uint64_t amount = 0; std::string address; - crypto::public_key asset_id; + crypto::public_key asset_id = currency::native_coin_asset_id; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount) KV_SERIALIZE(address) diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 84b5cb94..90fc492d 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -240,6 +240,7 @@ namespace tools WALLET_RPC_CATCH_TRY_ENTRY(); return true; } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::on_getwallet_info(const wallet_public::COMMAND_RPC_GET_WALLET_INFO::request& req, wallet_public::COMMAND_RPC_GET_WALLET_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) { WALLET_RPC_BEGIN_TRY_ENTRY(); @@ -258,6 +259,7 @@ namespace tools return true; WALLET_RPC_CATCH_TRY_ENTRY(); } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::on_getwallet_restore_info(const wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::request& req, wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) { WALLET_RPC_BEGIN_TRY_ENTRY(); @@ -265,6 +267,7 @@ namespace tools return true; WALLET_RPC_CATCH_TRY_ENTRY(); } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::on_get_seed_phrase_info(const wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::request& req, wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) { WALLET_RPC_BEGIN_TRY_ENTRY(); @@ -272,7 +275,36 @@ namespace tools return true; WALLET_RPC_CATCH_TRY_ENTRY(); } + //------------------------------------------------------------------------------------------------------------------------------ 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 + wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO2::response rsp2 = AUTO_VAL_INIT(rsp2); + WALLET_RPC_BEGIN_TRY_ENTRY(); + + on_get_recent_txs_and_info2(req, rsp2, er, cntx); + 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; + } + } + } + + return true; + WALLET_RPC_CATCH_TRY_ENTRY(); + } + //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_get_recent_txs_and_info2(const wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO2::request& req, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO2::response& res, epee::json_rpc::error& er, connection_context& cntx) { WALLET_RPC_BEGIN_TRY_ENTRY(); if (req.update_provision_info) diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h index 42d4cdb4..989411eb 100644 --- a/src/wallet/wallet_rpc_server.h +++ b/src/wallet/wallet_rpc_server.h @@ -94,7 +94,8 @@ namespace tools MAP_JON_RPC_WE("getbalance", on_getbalance, wallet_public::COMMAND_RPC_GET_BALANCE) MAP_JON_RPC_WE("getaddress", on_getaddress, wallet_public::COMMAND_RPC_GET_ADDRESS) MAP_JON_RPC_WE("get_wallet_info", on_getwallet_info, wallet_public::COMMAND_RPC_GET_WALLET_INFO) - MAP_JON_RPC_WE("get_recent_txs_and_info", on_get_recent_txs_and_info, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO) + MAP_JON_RPC_WE("get_recent_txs_and_info", on_get_recent_txs_and_info, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO) //LEGACY + MAP_JON_RPC_WE("get_recent_txs_and_info2", on_get_recent_txs_and_info2, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO2) MAP_JON_RPC_WE("transfer", on_transfer, wallet_public::COMMAND_RPC_TRANSFER) MAP_JON_RPC_WE("store", on_store, wallet_public::COMMAND_RPC_STORE) MAP_JON_RPC_WE("get_payments", on_get_payments, wallet_public::COMMAND_RPC_GET_PAYMENTS) @@ -150,6 +151,7 @@ namespace tools bool on_getwallet_restore_info(const wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::request& req, wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_get_seed_phrase_info(const wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::request& req, wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx); bool 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); + bool on_get_recent_txs_and_info2(const wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO2::request& req, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO2::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_transfer(const wallet_public::COMMAND_RPC_TRANSFER::request& req, wallet_public::COMMAND_RPC_TRANSFER::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_store(const wallet_public::COMMAND_RPC_STORE::request& req, wallet_public::COMMAND_RPC_STORE::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_get_payments(const wallet_public::COMMAND_RPC_GET_PAYMENTS::request& req, wallet_public::COMMAND_RPC_GET_PAYMENTS::response& res, epee::json_rpc::error& er, connection_context& cntx);