Changeset View
Changeset View
Standalone View
Standalone View
src/test/transaction_tests.cpp
Show First 20 Lines • Show All 642 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(test_IsStandard) { | ||||
dustRelayFee = CFeeRate(DUST_RELAY_TX_FEE); | dustRelayFee = CFeeRate(DUST_RELAY_TX_FEE); | ||||
t.vout[0].scriptPubKey = CScript() << OP_1; | t.vout[0].scriptPubKey = CScript() << OP_1; | ||||
BOOST_CHECK(!IsStandardTx(CTransaction(t), reason)); | BOOST_CHECK(!IsStandardTx(CTransaction(t), reason)); | ||||
// MAX_OP_RETURN_RELAY-byte TX_NULL_DATA (standard) | // MAX_OP_RETURN_RELAY-byte TX_NULL_DATA (standard) | ||||
t.vout[0].scriptPubKey = | t.vout[0].scriptPubKey = | ||||
CScript() << OP_RETURN | CScript() << OP_RETURN | ||||
<< ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909" | |||||
"a67962e0ea1f61deb649f6bc3f4cef3804678afdb0fe5548" | |||||
"271967f1a67130b7105cd6a828e03909a67962e0ea1f61de" | |||||
"b649f6bc3f4cef38"); | |||||
BOOST_CHECK_EQUAL(MAX_OP_RETURN_RELAY, t.vout[0].scriptPubKey.size()); | |||||
BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | |||||
// MAX_OP_RETURN_RELAY+1-byte TX_NULL_DATA (non-standard) | |||||
t.vout[0].scriptPubKey = | |||||
CScript() << OP_RETURN | |||||
<< ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909" | |||||
"a67962e0ea1f61deb649f6bc3f4cef3804678afdb0fe5548" | |||||
"271967f1a67130b7105cd6a828e03909a67962e0ea1f61de" | |||||
"b649f6bc3f4cef3800"); | |||||
BOOST_CHECK_EQUAL(MAX_OP_RETURN_RELAY + 1, t.vout[0].scriptPubKey.size()); | |||||
BOOST_CHECK(!IsStandardTx(CTransaction(t), reason)); | |||||
/** | |||||
* Check acceptance of larger op_return when asked to. | |||||
*/ | |||||
// New default size of 223 byte is standard | |||||
t.vout[0].scriptPubKey = | |||||
CScript() << OP_RETURN | |||||
<< ParseHex("646578784062697477617463682e636f2092c558ed52c56d" | << ParseHex("646578784062697477617463682e636f2092c558ed52c56d" | ||||
"8dd14ca76226bc936a84820d898443873eb03d8854b21fa3" | "8dd14ca76226bc936a84820d898443873eb03d8854b21fa3" | ||||
"952b99a2981873e74509281730d78a21786d34a38bd1ebab" | "952b99a2981873e74509281730d78a21786d34a38bd1ebab" | ||||
"822fad42278f7f4420db6ab1fd2b6826148d4f73bb41ec2d" | "822fad42278f7f4420db6ab1fd2b6826148d4f73bb41ec2d" | ||||
"40a6d5793d66e17074a0c56a8a7df21062308f483dd6e38d" | "40a6d5793d66e17074a0c56a8a7df21062308f483dd6e38d" | ||||
"53609d350038df0a1b2a9ac8332016e0b904f66880dd0108" | "53609d350038df0a1b2a9ac8332016e0b904f66880dd0108" | ||||
"81c4e8074cce8e4ad6c77cb3460e01bf0e7e811b5f945f83" | "81c4e8074cce8e4ad6c77cb3460e01bf0e7e811b5f945f83" | ||||
"732ba6677520a893d75d9a966cb8f85dc301656b1635c631" | "732ba6677520a893d75d9a966cb8f85dc301656b1635c631" | ||||
"f5d00d4adf73f2dd112ca75cf19754651909becfbe65aed1" | "f5d00d4adf73f2dd112ca75cf19754651909becfbe65aed1" | ||||
"3afb2ab8"); | "3afb2ab8"); | ||||
BOOST_CHECK_EQUAL(MAX_OP_RETURN_RELAY_LARGE, t.vout[0].scriptPubKey.size()); | BOOST_CHECK_EQUAL(MAX_OP_RETURN_RELAY, t.vout[0].scriptPubKey.size()); | ||||
BOOST_CHECK(IsStandardTx(CTransaction(t), reason, true)); | BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | ||||
// Larger than default size of 223 byte is non-standard | // MAX_OP_RETURN_RELAY+1-byte TX_NULL_DATA (non-standard) | ||||
t.vout[0].scriptPubKey = | t.vout[0].scriptPubKey = | ||||
CScript() << OP_RETURN | CScript() << OP_RETURN | ||||
<< ParseHex("646578784062697477617463682e636f2092c558ed52c56d" | << ParseHex("646578784062697477617463682e636f2092c558ed52c56d" | ||||
"8dd14ca76226bc936a84820d898443873eb03d8854b21fa3" | "8dd14ca76226bc936a84820d898443873eb03d8854b21fa3" | ||||
"952b99a2981873e74509281730d78a21786d34a38bd1ebab" | "952b99a2981873e74509281730d78a21786d34a38bd1ebab" | ||||
"822fad42278f7f4420db6ab1fd2b6826148d4f73bb41ec2d" | "822fad42278f7f4420db6ab1fd2b6826148d4f73bb41ec2d" | ||||
"40a6d5793d66e17074a0c56a8a7df21062308f483dd6e38d" | "40a6d5793d66e17074a0c56a8a7df21062308f483dd6e38d" | ||||
"53609d350038df0a1b2a9ac8332016e0b904f66880dd0108" | "53609d350038df0a1b2a9ac8332016e0b904f66880dd0108" | ||||
"81c4e8074cce8e4ad6c77cb3460e01bf0e7e811b5f945f83" | "81c4e8074cce8e4ad6c77cb3460e01bf0e7e811b5f945f83" | ||||
"732ba6677520a893d75d9a966cb8f85dc301656b1635c631" | "732ba6677520a893d75d9a966cb8f85dc301656b1635c631" | ||||
"f5d00d4adf73f2dd112ca75cf19754651909becfbe65aed1" | "f5d00d4adf73f2dd112ca75cf19754651909becfbe65aed1" | ||||
"3afb2ab800"); | "3afb2ab800"); | ||||
BOOST_CHECK_EQUAL(MAX_OP_RETURN_RELAY_LARGE + 1, | BOOST_CHECK_EQUAL(MAX_OP_RETURN_RELAY + 1, t.vout[0].scriptPubKey.size()); | ||||
t.vout[0].scriptPubKey.size()); | BOOST_CHECK(!IsStandardTx(CTransaction(t), reason)); | ||||
BOOST_CHECK(!IsStandardTx(CTransaction(t), reason, true)); | |||||
/** | /** | ||||
* Check when a custom value is used for -datacarriersize . | * Check when a custom value is used for -datacarriersize . | ||||
*/ | */ | ||||
unsigned newMaxSize = MAX_OP_RETURN_RELAY + 7; | unsigned newMaxSize = 90; | ||||
gArgs.ForceSetArg("-datacarriersize", std::to_string(newMaxSize)); | gArgs.ForceSetArg("-datacarriersize", std::to_string(newMaxSize)); | ||||
// Max user provided payload size is standard | // Max user provided payload size is standard | ||||
t.vout[0].scriptPubKey = | t.vout[0].scriptPubKey = | ||||
CScript() << OP_RETURN | CScript() << OP_RETURN | ||||
<< ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909" | << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909" | ||||
"a67962e0ea1f61deb649f6bc3f4cef3804678afdb0fe5548" | "a67962e0ea1f61deb649f6bc3f4cef3804678afdb0fe5548" | ||||
"271967f1a67130b7105cd6a828e03909a67962e0ea1f61de" | "271967f1a67130b7105cd6a828e03909a67962e0ea1f61de" | ||||
"b649f6bc3f4cef3877696e64657878"); | "b649f6bc3f4cef3877696e64657878"); | ||||
BOOST_CHECK_EQUAL(t.vout[0].scriptPubKey.size(), newMaxSize); | BOOST_CHECK_EQUAL(t.vout[0].scriptPubKey.size(), newMaxSize); | ||||
BOOST_CHECK(IsStandardTx(CTransaction(t), reason, false)); | BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | ||||
BOOST_CHECK(IsStandardTx(CTransaction(t), reason, true)); | |||||
// Max user provided payload size + 1 is non-standard | // Max user provided payload size + 1 is non-standard | ||||
t.vout[0].scriptPubKey = | t.vout[0].scriptPubKey = | ||||
CScript() << OP_RETURN | CScript() << OP_RETURN | ||||
<< ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909" | << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909" | ||||
"a67962e0ea1f61deb649f6bc3f4cef3804678afdb0fe5548" | "a67962e0ea1f61deb649f6bc3f4cef3804678afdb0fe5548" | ||||
"271967f1a67130b7105cd6a828e03909a67962e0ea1f61de" | "271967f1a67130b7105cd6a828e03909a67962e0ea1f61de" | ||||
"b649f6bc3f4cef3877696e6465787800"); | "b649f6bc3f4cef3877696e6465787800"); | ||||
BOOST_CHECK_EQUAL(t.vout[0].scriptPubKey.size(), newMaxSize + 1); | BOOST_CHECK_EQUAL(t.vout[0].scriptPubKey.size(), newMaxSize + 1); | ||||
BOOST_CHECK(!IsStandardTx(CTransaction(t), reason, false)); | BOOST_CHECK(!IsStandardTx(CTransaction(t), reason)); | ||||
BOOST_CHECK(!IsStandardTx(CTransaction(t), reason, true)); | |||||
// Clear custom confirguration. | // Clear custom confirguration. | ||||
gArgs.ClearArg("-datacarriersize"); | gArgs.ClearArg("-datacarriersize"); | ||||
// Data payload can be encoded in any way... | // Data payload can be encoded in any way... | ||||
t.vout[0].scriptPubKey = CScript() << OP_RETURN << ParseHex(""); | t.vout[0].scriptPubKey = CScript() << OP_RETURN << ParseHex(""); | ||||
BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | ||||
t.vout[0].scriptPubKey = CScript() | t.vout[0].scriptPubKey = CScript() | ||||
▲ Show 20 Lines • Show All 48 Lines • Show Last 20 Lines |