aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2013-08-08 13:09:07 +1000
committerGavin Andresen <gavinandresen@gmail.com>2013-08-22 11:05:44 +1000
commit57d80467f123741f228910dea8c1245134bbfbfe (patch)
treeabdc71a4ec2d9ccb3f31e3027abe768b3db330c0 /src
parentb986663ccdd3dfd8a93aad660839a315ca5c5bdd (diff)
downloadbitcoin-57d80467f123741f228910dea8c1245134bbfbfe.tar.xz
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')
-rw-r--r--src/qt/guiutil.cpp8
-rw-r--r--src/qt/guiutil.h3
-rw-r--r--src/qt/sendcoinsentry.cpp21
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;
}