@@ -329,11 +329,12 @@ static void MaybePushAddress(UniValue & entry, const CTxDestination &dest)
329329 * @param wtx The wallet transaction.
330330 * @param nMinDepth The minimum confirmation depth.
331331 * @param fLong Whether to include the JSON version of the transaction.
332- * @param ret The UniValue into which the result is stored.
332+ * @param ret The vector into which the result is stored.
333333 * @param filter_ismine The "is mine" filter flags.
334334 * @param filter_label Optional label string to filter incoming transactions.
335335 */
336- static void ListTransactions (const CWallet& wallet, const CWalletTx& wtx, int nMinDepth, bool fLong , UniValue& ret, const isminefilter& filter_ismine, const std::string* filter_label) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet)
336+ template <class Vec >
337+ static void ListTransactions (const CWallet& wallet, const CWalletTx& wtx, int nMinDepth, bool fLong , Vec& ret, const isminefilter& filter_ismine, const std::string* filter_label) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet)
337338{
338339 CAmount nFee;
339340 std::list<COutputEntry> listReceived;
@@ -520,8 +521,7 @@ RPCHelpMan listtransactions()
520521 if (nFrom < 0 )
521522 throw JSONRPCError (RPC_INVALID_PARAMETER, " Negative from" );
522523
523- UniValue ret (UniValue::VARR);
524-
524+ std::vector<UniValue> ret;
525525 {
526526 LOCK (pwallet->cs_wallet );
527527
@@ -543,9 +543,9 @@ RPCHelpMan listtransactions()
543543 if ((nFrom + nCount) > (int )ret.size ())
544544 nCount = ret.size () - nFrom;
545545
546- const std::vector<UniValue>& txs = ret.getValues () ;
546+ auto txs_rev_it{ std::make_move_iterator ( ret.rend ())} ;
547547 UniValue result{UniValue::VARR};
548- result.push_backV ({ txs. rend () - nFrom - nCount, txs. rend () - nFrom } ); // Return oldest to newest
548+ result.push_backV (txs_rev_it - nFrom - nCount, txs_rev_it - nFrom); // Return oldest to newest
549549 return result;
550550},
551551 };
0 commit comments