Browse Source

Too many bitcoins allowed in amount. (#2401)

Using magic number doesn't seem right. Could we factor this out, together with https://github.com/bitcoin/bitcoin/blob/master/src/bitcoinrpc.cpp#L96 ?
And what about BitcoinUnits::parse() as well ?
miguelfreitas
vhf / victor felder 12 years ago committed by Victor Felder
parent
commit
a35e268da4
  1. 10
      src/qt/bitcoinamountfield.cpp
  2. 11
      src/qt/bitcoinunits.cpp
  3. 2
      src/qt/bitcoinunits.h

10
src/qt/bitcoinamountfield.cpp

@ -60,7 +60,9 @@ bool BitcoinAmountField::validate()
bool valid = true; bool valid = true;
if (amount->value() == 0.0) if (amount->value() == 0.0)
valid = false; valid = false;
if (valid && !BitcoinUnits::parse(currentUnit, text(), 0)) else if (!BitcoinUnits::parse(currentUnit, text(), 0))
valid = false;
else if (amount->value() > BitcoinUnits::maxAmount(currentUnit))
valid = false; valid = false;
setValid(valid); setValid(valid);
@ -115,7 +117,7 @@ qint64 BitcoinAmountField::value(bool *valid_out) const
{ {
qint64 val_out = 0; qint64 val_out = 0;
bool valid = BitcoinUnits::parse(currentUnit, text(), &val_out); bool valid = BitcoinUnits::parse(currentUnit, text(), &val_out);
if(valid_out) if (valid_out)
{ {
*valid_out = valid; *valid_out = valid;
} }
@ -145,12 +147,12 @@ void BitcoinAmountField::unitChanged(int idx)
amount->setDecimals(BitcoinUnits::decimals(currentUnit)); amount->setDecimals(BitcoinUnits::decimals(currentUnit));
amount->setMaximum(qPow(10, BitcoinUnits::amountDigits(currentUnit)) - qPow(10, -amount->decimals())); amount->setMaximum(qPow(10, BitcoinUnits::amountDigits(currentUnit)) - qPow(10, -amount->decimals()));
if(currentUnit == BitcoinUnits::uBTC) if (currentUnit == BitcoinUnits::uBTC)
amount->setSingleStep(0.01); amount->setSingleStep(0.01);
else else
amount->setSingleStep(0.001); amount->setSingleStep(0.001);
if(valid) if (valid)
{ {
// If value was valid, re-place it in the widget with the new unit // If value was valid, re-place it in the widget with the new unit
setValue(currentValue); setValue(currentValue);

11
src/qt/bitcoinunits.cpp

@ -63,6 +63,17 @@ qint64 BitcoinUnits::factor(int unit)
} }
} }
qint64 BitcoinUnits::maxAmount(int unit)
{
switch(unit)
{
case BTC: return Q_INT64_C(21000000);
case mBTC: return Q_INT64_C(21000000000);
case uBTC: return Q_INT64_C(21000000000000);
default: return 0;
}
}
int BitcoinUnits::amountDigits(int unit) int BitcoinUnits::amountDigits(int unit)
{ {
switch(unit) switch(unit)

2
src/qt/bitcoinunits.h

@ -38,6 +38,8 @@ public:
static QString description(int unit); static QString description(int unit);
//! Number of Satoshis (1e-8) per unit //! Number of Satoshis (1e-8) per unit
static qint64 factor(int unit); static qint64 factor(int unit);
//! Max amount per unit
static qint64 maxAmount(int unit);
//! Number of amount digits (to represent max number of coins) //! Number of amount digits (to represent max number of coins)
static int amountDigits(int unit); static int amountDigits(int unit);
//! Number of decimals left //! Number of decimals left

Loading…
Cancel
Save