transaction_tests: Be more strict checking dust
* Don't allow off-by-one or more * Make clear dust is coupled with minRelayTxFee * Check rounding for odd values
This commit is contained in:
parent
503ff6e1ae
commit
5f46a7d068
2 changed files with 20 additions and 5 deletions
|
@ -143,8 +143,8 @@ public:
|
||||||
// to spend something, then we consider it dust.
|
// to spend something, then we consider it dust.
|
||||||
// A typical spendable txout is 34 bytes big, and will
|
// A typical spendable txout is 34 bytes big, and will
|
||||||
// need a CTxIn of at least 148 bytes to spend:
|
// need a CTxIn of at least 148 bytes to spend:
|
||||||
// so dust is a spendable txout less than 546 satoshis
|
// so dust is a spendable txout less than
|
||||||
// with default minRelayTxFee.
|
// 546*minRelayTxFee/1000 (in satoshis)
|
||||||
if (scriptPubKey.IsUnspendable())
|
if (scriptPubKey.IsUnspendable())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -342,12 +342,27 @@ BOOST_AUTO_TEST_CASE(test_IsStandard)
|
||||||
string reason;
|
string reason;
|
||||||
BOOST_CHECK(IsStandardTx(t, reason));
|
BOOST_CHECK(IsStandardTx(t, reason));
|
||||||
|
|
||||||
t.vout[0].nValue = 501; // dust
|
// Check dust with default relay fee:
|
||||||
|
CAmount nDustThreshold = 182 * minRelayTxFee.GetFeePerK()/1000 * 3;
|
||||||
|
BOOST_CHECK_EQUAL(nDustThreshold, 546);
|
||||||
|
// dust:
|
||||||
|
t.vout[0].nValue = nDustThreshold - 1;
|
||||||
BOOST_CHECK(!IsStandardTx(t, reason));
|
BOOST_CHECK(!IsStandardTx(t, reason));
|
||||||
|
// not dust:
|
||||||
t.vout[0].nValue = 2730; // not dust
|
t.vout[0].nValue = nDustThreshold;
|
||||||
BOOST_CHECK(IsStandardTx(t, reason));
|
BOOST_CHECK(IsStandardTx(t, reason));
|
||||||
|
|
||||||
|
// Check dust with odd relay fee to verify rounding:
|
||||||
|
// nDustThreshold = 182 * 1234 / 1000 * 3
|
||||||
|
minRelayTxFee = CFeeRate(1234);
|
||||||
|
// dust:
|
||||||
|
t.vout[0].nValue = 672 - 1;
|
||||||
|
BOOST_CHECK(!IsStandardTx(t, reason));
|
||||||
|
// not dust:
|
||||||
|
t.vout[0].nValue = 672;
|
||||||
|
BOOST_CHECK(IsStandardTx(t, reason));
|
||||||
|
minRelayTxFee = CFeeRate(1000);
|
||||||
|
|
||||||
t.vout[0].scriptPubKey = CScript() << OP_1;
|
t.vout[0].scriptPubKey = CScript() << OP_1;
|
||||||
BOOST_CHECK(!IsStandardTx(t, reason));
|
BOOST_CHECK(!IsStandardTx(t, reason));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue