diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2013-08-08 13:09:07 +1000 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2013-08-22 11:05:44 +1000 |
commit | 57d80467f123741f228910dea8c1245134bbfbfe (patch) | |
tree | abdc71a4ec2d9ccb3f31e3027abe768b3db330c0 /src/qt | |
parent | b986663ccdd3dfd8a93aad660839a315ca5c5bdd (diff) |
Reject dust amounts during validation
Replaces the validation check for "amount == 0" with an isDust check,
so very small output amounts are caught before the wallet
is unlocked, a transaction is created, etc.
Diffstat (limited to 'src/qt')
-rw-r--r-- | src/qt/guiutil.cpp | 8 | ||||
-rw-r--r-- | src/qt/guiutil.h | 3 | ||||
-rw-r--r-- | src/qt/sendcoinsentry.cpp | 21 |
3 files changed, 20 insertions, 12 deletions
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 32131bc39d..c951b21b80 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -148,6 +148,14 @@ bool parseBitcoinURI(QString uri, SendCoinsRecipient *out) return parseBitcoinURI(uriInstance, out); } +bool isDust(const QString& address, qint64 amount) +{ + CTxDestination dest = CBitcoinAddress(address.toStdString()).Get(); + CScript script; script.SetDestination(dest); + CTxOut txOut(amount, script); + return txOut.IsDust(CTransaction::nMinRelayTxFee); +} + QString HtmlEscape(const QString& str, bool fMultiLine) { #if QT_VERSION < 0x050000 diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index ca3e7fe91d..8472700f48 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -36,6 +36,9 @@ namespace GUIUtil bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out); bool parseBitcoinURI(QString uri, SendCoinsRecipient *out); + // Returns true if given address+amount meets "dust" definition + bool isDust(const QString& address, qint64 amount); + // HTML escaping for rich text controls QString HtmlEscape(const QString& str, bool fMultiLine=false); QString HtmlEscape(const std::string& str, bool fMultiLine=false); diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index 876b7f808b..1c54850a03 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -101,24 +101,21 @@ bool SendCoinsEntry::validate() // Check input validity bool retval = true; - if(!ui->payAmount->validate()) + if(!ui->payTo->hasAcceptableInput() || + (model && !model->validateAddress(ui->payTo->text()))) { + ui->payTo->setValid(false); retval = false; } - else + + if(!ui->payAmount->validate()) { - if(ui->payAmount->value() <= 0) - { - // Cannot send 0 coins or less - ui->payAmount->setValid(false); - retval = false; - } + retval = false; } - if(!ui->payTo->hasAcceptableInput() || - (model && !model->validateAddress(ui->payTo->text()))) - { - ui->payTo->setValid(false); + // Reject dust outputs: + if (retval && GUIUtil::isDust(ui->payTo->text(), ui->payAmount->value())) { + ui->payAmount->setValid(false); retval = false; } |