Changes necessary now that zero values accepted in AmountFromValue
- Add an accept test for zero amounts, and a reject test for negative amounts - Remove ugly hack in `settxfee` that is no longer necessary - Do explicit zero checks in wallet RPC functions - Don't add a check for zero amounts in `createrawtransaction` - this could be seen as a feature
This commit is contained in:
parent
a04bdefbeb
commit
7d8ffac186
2 changed files with 13 additions and 4 deletions
|
@ -131,6 +131,9 @@ static UniValue ValueFromString(const std::string &str)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values)
|
BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values)
|
||||||
{
|
{
|
||||||
|
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("-0.00000001")), UniValue);
|
||||||
|
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0")), 0LL);
|
||||||
|
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000000")), 0LL);
|
||||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001")), 1LL);
|
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001")), 1LL);
|
||||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.17622195")), 17622195LL);
|
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.17622195")), 17622195LL);
|
||||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), 50000000LL);
|
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), 50000000LL);
|
||||||
|
|
|
@ -414,6 +414,8 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
// Amount
|
// Amount
|
||||||
CAmount nAmount = AmountFromValue(params[1]);
|
CAmount nAmount = AmountFromValue(params[1]);
|
||||||
|
if (nAmount <= 0)
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount for send");
|
||||||
|
|
||||||
// Wallet comments
|
// Wallet comments
|
||||||
CWalletTx wtx;
|
CWalletTx wtx;
|
||||||
|
@ -809,6 +811,8 @@ UniValue movecmd(const UniValue& params, bool fHelp)
|
||||||
string strFrom = AccountFromValue(params[0]);
|
string strFrom = AccountFromValue(params[0]);
|
||||||
string strTo = AccountFromValue(params[1]);
|
string strTo = AccountFromValue(params[1]);
|
||||||
CAmount nAmount = AmountFromValue(params[2]);
|
CAmount nAmount = AmountFromValue(params[2]);
|
||||||
|
if (nAmount <= 0)
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount for send");
|
||||||
if (params.size() > 3)
|
if (params.size() > 3)
|
||||||
// unused parameter, used to be nMinDepth, keep type-checking it though
|
// unused parameter, used to be nMinDepth, keep type-checking it though
|
||||||
(void)params[3].get_int();
|
(void)params[3].get_int();
|
||||||
|
@ -888,6 +892,8 @@ UniValue sendfrom(const UniValue& params, bool fHelp)
|
||||||
if (!address.IsValid())
|
if (!address.IsValid())
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address");
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address");
|
||||||
CAmount nAmount = AmountFromValue(params[2]);
|
CAmount nAmount = AmountFromValue(params[2]);
|
||||||
|
if (nAmount <= 0)
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount for send");
|
||||||
int nMinDepth = 1;
|
int nMinDepth = 1;
|
||||||
if (params.size() > 3)
|
if (params.size() > 3)
|
||||||
nMinDepth = params[3].get_int();
|
nMinDepth = params[3].get_int();
|
||||||
|
@ -987,6 +993,8 @@ UniValue sendmany(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
CScript scriptPubKey = GetScriptForDestination(address.Get());
|
CScript scriptPubKey = GetScriptForDestination(address.Get());
|
||||||
CAmount nAmount = AmountFromValue(sendTo[name_]);
|
CAmount nAmount = AmountFromValue(sendTo[name_]);
|
||||||
|
if (nAmount <= 0)
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount for send");
|
||||||
totalAmount += nAmount;
|
totalAmount += nAmount;
|
||||||
|
|
||||||
bool fSubtractFeeFromAmount = false;
|
bool fSubtractFeeFromAmount = false;
|
||||||
|
@ -2168,9 +2176,7 @@ UniValue settxfee(const UniValue& params, bool fHelp)
|
||||||
LOCK2(cs_main, pwalletMain->cs_wallet);
|
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||||||
|
|
||||||
// Amount
|
// Amount
|
||||||
CAmount nAmount = 0;
|
CAmount nAmount = AmountFromValue(params[0]);
|
||||||
if (params[0].get_real() != 0.0)
|
|
||||||
nAmount = AmountFromValue(params[0]); // rejects 0.0 amounts
|
|
||||||
|
|
||||||
payTxFee = CFeeRate(nAmount, 1000);
|
payTxFee = CFeeRate(nAmount, 1000);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue