@@ -40,7 +40,7 @@ class SparkNameTests : public SparkTestingSetup
4040 void Initialize () {
4141 std::vector<CMutableTransaction> mintTxs;
4242 GenerateBlocks (2000 -1 );
43- GenerateMints ({50 * COIN, 60 * COIN, 10 *COIN, 10 *COIN, 10 *COIN}, mintTxs);
43+ GenerateMints ({50 * COIN, 60 * COIN, 10 *COIN, 10 *COIN, 10 *COIN, 10 *COIN, 10 *COIN, 10 *COIN, 10 *COIN, 10 *COIN, 10 *COIN }, mintTxs);
4444 GenerateBlock (mintTxs);
4545 pwalletMain->SetBroadcastTransactions (true );
4646 }
@@ -99,6 +99,23 @@ class SparkNameTests : public SparkTestingSetup
9999 InvalidateBlock (state, chainparams, pindex);
100100 }
101101
102+ void ModifySparkNameTx (CMutableTransaction &tx, std::function<void (CSparkNameTxData &)> modify) {
103+ const spark::Params *params = spark::Params::get_default ();
104+ spark::SpendTransaction sparkTx (params);
105+
106+ CSparkNameTxData sparkNameData;
107+ size_t sparkNameDataPos;
108+ BOOST_CHECK (sparkNameManager->ParseSparkNameTxData (tx, sparkTx, sparkNameData, sparkNameDataPos));
109+
110+ modify (sparkNameData);
111+
112+ CDataStream serializedSpark (SER_NETWORK, PROTOCOL_VERSION);
113+ serializedSpark << sparkNameData;
114+
115+ tx.vExtraPayload .erase (tx.vExtraPayload .begin () + sparkNameDataPos, tx.vExtraPayload .end ());
116+ tx.vExtraPayload .insert (tx.vExtraPayload .end (), serializedSpark.begin (), serializedSpark.end ());
117+ }
118+
102119 CSparkState *sparkState;
103120 Consensus::Params const &consensus;
104121
@@ -199,6 +216,41 @@ BOOST_AUTO_TEST_CASE(general)
199216 // tx3 should go ahead now
200217 GenerateBlock ({tx3});
201218 BOOST_CHECK_EQUAL (chainActive.Height (), oldHeight+1 );
219+
220+ // check insufficient fee
221+ CMutableTransaction tx4 = CreateSparkNameTx (" tt" , GenerateSparkAddress (), 3 , " x" , true , 1 *COIN);
222+ BOOST_CHECK (!lastState.IsValid ());
223+ // check the block is not generated as well
224+ oldHeight = chainActive.Height ();
225+ GenerateBlock ({tx4});
226+ BOOST_CHECK_EQUAL (chainActive.Height (), oldHeight);
227+
228+ // now check the number of years is calculated correctly and yearly fee is checked
229+ CMutableTransaction tx5 = CreateSparkNameTx (" testname5" , GenerateSparkAddress (), 24 *24 *365 *2 , " x" , true , 2 *COIN);
230+ BOOST_CHECK (lastState.IsValid ());
231+
232+ CMutableTransaction tx6 = CreateSparkNameTx (" testname6" , GenerateSparkAddress (), 24 *24 *365 *2 , " x" , true , 1 *COIN);
233+ BOOST_CHECK (!lastState.IsValid ());
234+
235+ // check that address ownership proof is checked
236+ CMutableTransaction tx7 = CreateSparkNameTx (" testname7" , GenerateSparkAddress (), 3 , " x" , false );
237+ ModifySparkNameTx (tx7, [](CSparkNameTxData &sparkNameData) {
238+ sparkNameData.addressOwnershipProof [50 ] ^= 0x01 ;
239+ });
240+
241+ oldHeight = chainActive.Height ();
242+ GenerateBlock ({tx7});
243+ BOOST_CHECK_EQUAL (chainActive.Height (), oldHeight);
244+
245+ // change back the ownership proof but modify the name, the ownership proof should fail again
246+ ModifySparkNameTx (tx7, [](CSparkNameTxData &sparkNameData) {
247+ sparkNameData.addressOwnershipProof [50 ] ^= 0x01 ;
248+ sparkNameData.name = " testname8" ;
249+ });
250+
251+ oldHeight = chainActive.Height ();
252+ GenerateBlock ({tx7});
253+ BOOST_CHECK_EQUAL (chainActive.Height (), oldHeight);
202254}
203255
204256BOOST_AUTO_TEST_SUITE_END ()
0 commit comments