From b20b956e15184d39925ac415020ea886c7d47e87 Mon Sep 17 00:00:00 2001 From: xiphon Date: Thu, 4 Feb 2021 11:32:30 +0000 Subject: [PATCH] Wallet: estimateTransactionFeeAsync - multi dest support --- pages/Transfer.qml | 4 ++-- src/libwalletqt/Wallet.cpp | 35 +++++++++++++++++++++++++---------- src/libwalletqt/Wallet.h | 9 +++++---- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/pages/Transfer.qml b/pages/Transfer.qml index 828d7b5d..9a4d8b18 100644 --- a/pages/Transfer.qml +++ b/pages/Transfer.qml @@ -361,8 +361,8 @@ Rectangle { return; } currentWallet.estimateTransactionFeeAsync( - addressLine.text, - walletManager.amountFromString(amountLine.text), + [addressLine.text], + [walletManager.amountFromString(amountLine.text)], priorityModelV5.get(priorityDropdown.currentIndex).priority, function (amount) { estimatedFee = Utils.removeTrailingZeros(amount); diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 010bb487..66df9077 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -626,17 +626,32 @@ void Wallet::disposeTransaction(UnsignedTransaction *t) delete t; } -void Wallet::estimateTransactionFeeAsync(const QString &destination, - quint64 amount, - PendingTransaction::Priority priority, - const QJSValue &callback) +void Wallet::estimateTransactionFeeAsync( + const QVector &destinationAddresses, + const QVector &amounts, + PendingTransaction::Priority priority, + const QJSValue &callback) { - m_scheduler.run([this, destination, amount, priority] { - const uint64_t fee = m_walletImpl->estimateTransactionFee( - {std::make_pair(destination.toStdString(), amount)}, - static_cast(priority)); - return QJSValueList({QString::fromStdString(Monero::Wallet::displayAmount(fee))}); - }, callback); + m_scheduler.run( + [this, destinationAddresses, amounts, priority] { + if (destinationAddresses.size() != amounts.size()) + { + return QJSValueList({""}); + } + + std::vector> destinations; + destinations.reserve(destinationAddresses.size()); + for (size_t index = 0; index < destinationAddresses.size(); ++index) + { + destinations.emplace_back(std::make_pair(destinationAddresses[index].toStdString(), amounts[index])); + } + + const uint64_t fee = m_walletImpl->estimateTransactionFee( + destinations, + static_cast(priority)); + return QJSValueList({QString::fromStdString(Monero::Wallet::displayAmount(fee))}); + }, + callback); } TransactionHistory *Wallet::history() const diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index 0f6d1353..03c3fede 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -255,10 +255,11 @@ public: //! deletes unsigned transaction and frees memory Q_INVOKABLE void disposeTransaction(UnsignedTransaction * t); - Q_INVOKABLE void estimateTransactionFeeAsync(const QString &destination, - quint64 amount, - PendingTransaction::Priority priority, - const QJSValue &callback); + Q_INVOKABLE void estimateTransactionFeeAsync( + const QVector &destinationAddresses, + const QVector &amounts, + PendingTransaction::Priority priority, + const QJSValue &callback); //! returns transaction history TransactionHistory * history() const;