mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 18:53:23 -03:00
GUI: 'getAvailableBalance', use cached balance if the user did not select UTXO manually
No need to walk through the entire wallet's tx map. Used for 'walletModel::prepareTransaction' and 'useAvailable' flow in sendcoinsdialog.
This commit is contained in:
parent
96e3264a82
commit
050e8b1391
3 changed files with 13 additions and 2 deletions
|
@ -795,7 +795,7 @@ void SendCoinsDialog::useAvailableBalance(SendCoinsEntry* entry)
|
||||||
m_coin_control->fAllowWatchOnly = model->wallet().privateKeysDisabled() && !model->wallet().hasExternalSigner();
|
m_coin_control->fAllowWatchOnly = model->wallet().privateKeysDisabled() && !model->wallet().hasExternalSigner();
|
||||||
|
|
||||||
// Calculate available amount to send.
|
// Calculate available amount to send.
|
||||||
CAmount amount = model->wallet().getAvailableBalance(*m_coin_control);
|
CAmount amount = model->getAvailableBalance(m_coin_control.get());
|
||||||
for (int i = 0; i < ui->entries->count(); ++i) {
|
for (int i = 0; i < ui->entries->count(); ++i) {
|
||||||
SendCoinsEntry* e = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
|
SendCoinsEntry* e = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
|
||||||
if (e && !e->isHidden() && e != entry) {
|
if (e && !e->isHidden() && e != entry) {
|
||||||
|
|
|
@ -203,7 +203,9 @@ WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransact
|
||||||
return DuplicateAddress;
|
return DuplicateAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAmount nBalance = m_wallet->getAvailableBalance(coinControl);
|
// If no coin was manually selected, use the cached balance
|
||||||
|
// Future: can merge this call with 'createTransaction'.
|
||||||
|
CAmount nBalance = getAvailableBalance(&coinControl);
|
||||||
|
|
||||||
if(total > nBalance)
|
if(total > nBalance)
|
||||||
{
|
{
|
||||||
|
@ -608,3 +610,8 @@ uint256 WalletModel::getLastBlockProcessed() const
|
||||||
{
|
{
|
||||||
return m_client_model ? m_client_model->getBestBlockHash() : uint256{};
|
return m_client_model ? m_client_model->getBestBlockHash() : uint256{};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAmount WalletModel::getAvailableBalance(const CCoinControl* control)
|
||||||
|
{
|
||||||
|
return control && control->HasSelected() ? wallet().getAvailableBalance(*control) : getCachedBalance().balance;
|
||||||
|
}
|
||||||
|
|
|
@ -160,6 +160,10 @@ public:
|
||||||
// Retrieve the cached wallet balance
|
// Retrieve the cached wallet balance
|
||||||
interfaces::WalletBalances getCachedBalance() const;
|
interfaces::WalletBalances getCachedBalance() const;
|
||||||
|
|
||||||
|
// If coin control has selected outputs, searches the total amount inside the wallet.
|
||||||
|
// Otherwise, uses the wallet's cached available balance.
|
||||||
|
CAmount getAvailableBalance(const wallet::CCoinControl* control);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<interfaces::Wallet> m_wallet;
|
std::unique_ptr<interfaces::Wallet> m_wallet;
|
||||||
std::unique_ptr<interfaces::Handler> m_handler_unload;
|
std::unique_ptr<interfaces::Handler> m_handler_unload;
|
||||||
|
|
Loading…
Add table
Reference in a new issue