SweepUnmixableTransaction test added

pull/85/head
moneroexamples 6 years ago
parent 02ce1359d3
commit a4bc64f691

@ -3,7 +3,7 @@ var config = {
mainnetExplorerUrl: "https://xmrchain.com/",
testnetExplorerUrl: "https://testnet.xmrchain.com/",
stagenetExplorerUrl: "http://162.210.173.150:8083/",
nettype: 0, /* 0 - MAINNET, 1 - TESTNET, 2 - STAGENET */
nettype: 2, /* 0 - MAINNET, 1 - TESTNET, 2 - STAGENET */
coinUnitPlaces: 12,
txMinConfirms: 10, // corresponds to CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE in Monero
txCoinbaseMinConfirms: 60, // corresponds to CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW in Monero

@ -1446,7 +1446,7 @@ output_data_from_hex(
vector<cryptonote::output_data_t>>&
outputs_data_map)
{
// key: vector of absolute_offsets,
// key: vector of absolute_offsets and associated amount (last value),
// value: vector of output_info_of_mixins as string
std::map<vector<uint64_t>, vector<string>> outputs_data_map_str;
@ -1477,6 +1477,11 @@ output_data_from_hex(
return false;
}
//cout << "\n absolute_offsets (last value is amount): ";
//for (auto& v: absolute_offsets)
// cout << v << ", ";
//cout << '\n';
outputs_data_map[absolute_offsets].push_back(out_data);
}
}

@ -192,7 +192,7 @@ public:
struct MockGettingOutputs
{
// key: vector of absolute_offsets,
// key: vector of absolute_offsets and associated amount (last value),
// value: vector of output_info_of_mixins
using ring_members_mock_map_t
= std::map<vector<uint64_t>,
@ -210,11 +210,15 @@ struct MockGettingOutputs
virtual bool
get_output_keys(
const uint64_t& amount,
const vector<uint64_t>& absolute_offsets,
vector<uint64_t> absolute_offsets,
vector<cryptonote::output_data_t>& outputs)
{
(void) amount;
// need to add amount to absolute_offsets
// as this is how our ring_member_data map will differentiate
// between the same offsets, but for different amounts.
absolute_offsets.push_back(amount);
outputs = ring_member_data[absolute_offsets];
@ -223,6 +227,13 @@ struct MockGettingOutputs
};
bool
check_and_adjust_path(string& in_path)
{
if (!boost::filesystem::exists(in_path))
in_path = "./tests/" + in_path;
return boost::filesystem::exists(in_path);
}
}

@ -142,7 +142,7 @@ TEST_F(OUTPUTIDENT_TEST, OutgingPreRingctTransaction)
// with corresponding ring members output_data_t info structure
// we do this so that we just mack all the calls, instead of
// accessing real blockchain for this data.
string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a6172636869766500000000010200000001070001d102650102890102c10102e10102ff01027702000001070001a03730613039333763663136313063306466363332333864373363323235346163363039623031343565663335333436653034373331656534633166343336643830653031303030303030303030303030643230303030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03262306634636561663332353534613665386637306433383662613630343166613664316635346134326430363937663832663436393936396531346336303161313031303030303030303030303030363530313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a06137623538633963396133333837653637336464646232306433336632626566336131393239636261653434353338346336656361346361313934646237653263353031303030303030303030303030383930313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03538336531303131363633313133326666383361633364636135393831656335393634626634386434663439366331333537343137653361366539646333333866643031303030303030303030303030633130313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03866363363633930346637643033626131343565366638323039333334353064633332313661306365393537666135613234373139336463323434653063623630303030303030303030303030303030646630313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03832653363626164653363333963323636386534666439303861383662663237376533366637316563326631663465386432636363306666646236363236393133393032303030303030303030303030666430313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a035366261663166393130653861316366326264396235313464386333313030633531393731303565383033643462306230636137616664383863643462353764623130323030303030303030303030303735303230303030303030303030303031363364643638326563393737636464613539353331646133666661373239393861366638383337616261646336333661616564633862653139623264376337010700023901021d02022502024002026c02027c0202bd0201070001a06236616662313139646231396538616266656636303062326431383135653332636238626236366130663566363532396434303931313534653163313330623037363031303030303030303030303030336130313030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03439346533303462643861376261626131343331633065633563383431623162346236333137626232353131663561636531393461343066653534323366646635613032303030303030303030303030316530323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03732353739376634623939636163373736396362343264646532313434303731346138363362303036363739306431343937386634336138643261653431353436323032303030303030303030303030323630323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03439383766656363333237663463646266323461343564386162366334323535623930303535623263633730323364386161656538626461633133303466343637643032303030303030303030303030343130323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03565663938366461323138346133353333636531396163653365613735333138353363393631323765336534663336613638613139393562333162663037363561393032303030303030303030303030366430323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a06462343733353534326330626539376161653635613464646534353162613761396164653666613438393133303765313336393261633361336632373163356462393032303030303030303030303030376430323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a034313366633266643236663931333732333233323137366233393031376638643537636234396331643733666530616163303934666139633662343238613930666130323030303030303030303030306265303230303030303030303030303035396130336133313533613939346437323332376534643932343231643365333239316231666131623234306465343462393264376636326563303132386631"};
string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a6172636869766500000000010200000001080001d102650102890102c10102e10102ff010277020600a0724e1809000001070001a03730613039333763663136313063306466363332333864373363323235346163363039623031343565663335333436653034373331656534633166343336643830653031303030303030303030303030643230303030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03262306634636561663332353534613665386637306433383662613630343166613664316635346134326430363937663832663436393936396531346336303161313031303030303030303030303030363530313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a06137623538633963396133333837653637336464646232306433336632626566336131393239636261653434353338346336656361346361313934646237653263353031303030303030303030303030383930313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03538336531303131363633313133326666383361633364636135393831656335393634626634386434663439366331333537343137653361366539646333333866643031303030303030303030303030633130313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03866363363633930346637643033626131343565366638323039333334353064633332313661306365393537666135613234373139336463323434653063623630303030303030303030303030303030646630313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03832653363626164653363333963323636386534666439303861383662663237376533366637316563326631663465386432636363306666646236363236393133393032303030303030303030303030666430313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a035366261663166393130653861316366326264396235313464386333313030633531393731303565383033643462306230636137616664383863643462353764623130323030303030303030303030303735303230303030303030303030303031363364643638326563393737636464613539353331646133666661373239393861366638383337616261646336333661616564633862653139623264376337010800023901021d02022502024002026c02027c0202bd0206007083d05d0601070001a06236616662313139646231396538616266656636303062326431383135653332636238626236366130663566363532396434303931313534653163313330623037363031303030303030303030303030336130313030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03439346533303462643861376261626131343331633065633563383431623162346236333137626232353131663561636531393461343066653534323366646635613032303030303030303030303030316530323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03732353739376634623939636163373736396362343264646532313434303731346138363362303036363739306431343937386634336138643261653431353436323032303030303030303030303030323630323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03439383766656363333237663463646266323461343564386162366334323535623930303535623263633730323364386161656538626461633133303466343637643032303030303030303030303030343130323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03565663938366461323138346133353333636531396163653365613735333138353363393631323765336534663336613638613139393562333162663037363561393032303030303030303030303030366430323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a06462343733353534326330626539376161653635613464646534353162613761396164653666613438393133303765313336393261633361336632373163356462393032303030303030303030303030376430323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a034313366633266643236663931333732333233323137366233393031376638643537636234396331643733666530616163303934666139633662343238613930666130323030303030303030303030306265303230303030303030303030303035396130336133313533613939346437323332376534643932343231643365333239316231666131623234306465343462393264376636326563303132386631"};
MockGettingOutputs::ring_members_mock_map_t mock_ring_members_data;
@ -153,7 +153,8 @@ TEST_F(OUTPUTIDENT_TEST, OutgingPreRingctTransaction)
EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
.WillRepeatedly(Invoke(&get_outputs,
&MockGettingOutputs::get_output_keys));
&MockGettingOutputs
::get_output_keys));
xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
tx_hash, is_tx_coinbase,
@ -161,8 +162,7 @@ TEST_F(OUTPUTIDENT_TEST, OutgingPreRingctTransaction)
xmreg::TxSearch::known_outputs_t known_outputs;
if (!boost::filesystem::exists(known_outputs_csv_9wq792k))
known_outputs_csv_9wq792k = "./tests/" + known_outputs_csv_9wq792k;
ASSERT_TRUE(check_and_adjust_path(known_outputs_csv_9wq792k));
ASSERT_TRUE(xmreg::populate_known_outputs_from_csv(
known_outputs_csv_9wq792k, known_outputs));
@ -180,6 +180,91 @@ TEST_F(OUTPUTIDENT_TEST, OutgingPreRingctTransaction)
EXPECT_EQ(found_input_amounts, 17000000000000ull);
}
// stagenet private wallet 56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6
// viewkey f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
// spendkey 509a9761fde8856fc38e79ca705d85f979143524f178f8e2e0eb539fc050e905
// seed: deftly large tirade gumball android leech sidekick opened iguana voice gels focus poaching itches network espionage much jailed vaults winter oatmeal eleven science siren winter
string addr_56Vbjcz {"56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6"};
string viewkey_56Vbjcz {"f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06"};
// ./xmr2csv --stagenet -b /home/mwo/stagenet/node_01/stagenet/lmdb/ -a 56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6 -v f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
string known_outputs_csv_56bCoE {"./res/outputs_stagenet_56Vbjcz.csv"};
TEST_F(OUTPUTIDENT_TEST, SweepUnmixableTransaction)
{
// sweep_unmixable transaction made on v5
// private stagenet tx_hash af696f9a30fd0d436dfce3d57c6e37647752272769dcc0d194aa20b8a6ae74a6
string tx_hex {"01000302808095e789c6040100ec2245d2315165ca3a91da51fa002b5507f69b8ee1e555b6f6eaac0ad20fff2202c096b1020100a437de705e6fbfdb6bec4398cdba4dff6bb0c8c6df63c4beb4ae02aac615fe7b0280a094a58d1d01001d503f5cb31e451ebf4ef9b63b8c63cc500acab66d1a9f77518c485ded98f50209808c8d9e02020b448a5786be20d9a00a6755b58731198d7a6c0ed7b95cc34746d7a494a4b106f0a20402cea836e49a83bfe8a49c3bd56abe798fa237f35e8461dd1ce7dcfb8bd5b845dca0c21e024ed38b1a948b8ce0f97a8a678e92c24cec543794c4d3f8802670c2b661cb77f480a0d9e61d02bc39ce2271070ebef256e392e5aaab3c7feb3104dcad5ff882942c1a926da90c808095e789c60402b4b86255abb6c6f8c5c7e30dc08ba0ba7eca238b3444b54c757de554ec8b649580b489130261d5e374d2b305266d7edbb28acf536d78dee151e0e727436cbfdaa9bb8e55398088aca3cf020233aabe91db1381b46c8389dd675188ba9f11da292b5341d324b1b97bc7bffa0280a4e803023bc9a0c13f6f4d36f06bdfcd08194fdd1c08f7e9a4838530780b03678524599b80d0b8e1981a02ac89c9e71c93e6c292bc22185f3de25fc925f37119a4ec8d9980082072f408892101d9b33806437cf186d61b6ff0bd8abdc30b96cfa7999e3d244bc6d0f202a9ee280859aab9dca3fbf3ce304fdcbaedb1e1df2319e9b807c492837579d029f54a0ab551d3aaf6ddbc811d13e4c1abf441c29d2dad28c6b7e14d5bf1345d27a8e40c0c0bf7d21149b9cd1f669985ba99055350eac0233ab0365ef72ed9eca65ec2044d7590c40f7ee365bc70d4f10445219df80cf9066894fa955050b913dc22ff0d5fa6aed1e24b0b3cad8e158d128c102c33df277c1af00cade9b1843de9d01000bd7d3e4221476226f84b54694a895fec3fff83ff567147991303de6bfb2f6301"};
TX_FROM_HEX(tx_hex);
ADDR_VIEWKEY_FROM_STRING(addr_56Vbjcz, viewkey_56Vbjcz,
network_type::STAGENET);
// the ring members data from the above tx
//
// this hex is obtained using onion explorer runnign with --enbale-as-hex flag
// it is hex, serializied representation of of map of key_images
// with corresponding ring members output_data_t info structure
// we do this so that we just mack all the calls, instead of
// accessing real blockchain for this data.
string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a617263686976650000000001030000000102000003404b4c000001010001a06538343030376337306637623738643732643934326531383734663063393862383261323731656164656437383734353862616334363138643464396366303330303030303030303030303030303030313930633030303030303030303030306330626534666238373762396365353038373731333233626366316662393438343731306565323330323030303663336538636161633665346630326661626601020000050010a5d4e801010001a06636383534363563653565616239663862393163316566656465353961343161306134346161313538343634623630373339383935616633366236346233653230303030303030303030303030303030316331653030303030303030303030306262366637303632636133303664363732613733306532613266323139626462653430633966623366653464363031333639326166393363646232653063643101020000060040e59c301201010001a064316539643262333336303132633736306462316262666236633933326437633338326132663738666566333535303163313463393965653861613835366538303030303030303030303030303030306630303930303030303030303030303030326661333533616138346561386334346338303233303635643739343136303662316661356332363464636366343664633634393465626539363036663230"};
MockGettingOutputs::ring_members_mock_map_t mock_ring_members_data;
ASSERT_TRUE(xmreg::output_data_from_hex(ring_member_data_hex,
mock_ring_members_data));
MockGettingOutputs get_outputs(mock_ring_members_data);
EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
.WillRepeatedly(Invoke(&get_outputs,
&MockGettingOutputs
::get_output_keys));
xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
tx_hash, is_tx_coinbase,
cbs_mock};
xmreg::TxSearch::known_outputs_t known_outputs;
ASSERT_TRUE(check_and_adjust_path(known_outputs_csv_56bCoE));
ASSERT_TRUE(xmreg::populate_known_outputs_from_csv(
known_outputs_csv_56bCoE, known_outputs));
oi.identify_outputs();
EXPECT_EQ(oi.identified_outputs.size(), 9);
EXPECT_EQ(oi.get_mixin_no(), 1);
EXPECT_EQ(oi.total_received, 20998648570000ull);
EXPECT_FALSE(oi.is_rct);
EXPECT_EQ(pod_to_hex(oi.identified_outputs[0].pub_key),
"0b448a5786be20d9a00a6755b58731198d7a6c0ed7b95cc34746d7a494a4b106");
EXPECT_EQ(pod_to_hex(oi.identified_outputs.back().pub_key),
"ac89c9e71c93e6c292bc22185f3de25fc925f37119a4ec8d9980082072f40889");
oi.identify_inputs(known_outputs);
EXPECT_EQ(oi.identified_inputs.size(), 3);
uint64_t found_input_amounts {0};
for (auto& in_info: oi.identified_inputs)
found_input_amounts += in_info.amount;
EXPECT_EQ(found_input_amounts, 21000005000000ull);
}
TEST_F(OUTPUTIDENT_TEST, IncomingPreRingctCoinbaseTransaction)
{
// private testnet tx_hash af9652cb7682d0b73d4ec588d3d17b5ebfe4773dbb69228fa716242a223fdec0

Loading…
Cancel
Save