From d8aa609fc158b2e79ffaa541a7292eade5f13438 Mon Sep 17 00:00:00 2001 From: Paul Shapiro Date: Mon, 15 Oct 2018 17:31:28 -0500 Subject: [PATCH] updated test_all with ringsize 11 test data for create_transaction, and removed partially redundant create_transaction test so only one dataset has to be maintained (and since coverage is basically the same) --- test/test_all.cpp | 665 ++++++++++++++++++++++++++++++---------------- 1 file changed, 436 insertions(+), 229 deletions(-) diff --git a/test/test_all.cpp b/test/test_all.cpp index 33ab365..48eebe4 100644 --- a/test/test_all.cpp +++ b/test/test_all.cpp @@ -108,203 +108,6 @@ BOOST_AUTO_TEST_CASE(transfers__fee) std::cout << "transfers__fee: est_fee with fee_per_kb " << fee_per_kb << ": " << est_fee << std::endl; BOOST_REQUIRE(est_fee > 0); } -BOOST_AUTO_TEST_CASE(transfers__create) -{ - using namespace monero_transfer_utils; - using namespace monero_fork_rules; - - TransactionConstruction_RetVals retVals; - monero_fork_rules::use_fork_rules_fn_type use_fork_rules_fn = [] (uint8_t version, int64_t early_blocks) -> bool - { - return monero_fork_rules::lightwallet_hardcoded__use_fork_rules(version, early_blocks); - }; - - cryptonote::network_type nettype = cryptonote::MAINNET; - - string from_addressString = "43zxvpcj5Xv9SEkNXbMCG7LPQStHMpFCQCmkmR4u5nzjWwq5Xkv5VmGgYEsHXg4ja2FGRD5wMWbBVMijDTqmmVqm93wHGkg"; - string sec_viewKey_string = "7bea1907940afdd480eff7c4bcadb478a0fbb626df9e3ed74ae801e18f53e104"; - string sec_spendKey_string = "4e6d43cd03812b803c6f3206689f5fcc910005fc7e91d50d79b0776dbefcd803"; - - cryptonote::address_parse_info from_addr_info; - BOOST_REQUIRE(cryptonote::get_account_address_from_str(from_addr_info, nettype, from_addressString)); - cryptonote::account_keys account_keys; - { - account_keys.m_account_address = from_addr_info.address; - // - crypto::secret_key sec_viewKey; - BOOST_REQUIRE(string_tools::hex_to_pod(sec_viewKey_string, sec_viewKey)); - account_keys.m_view_secret_key = sec_viewKey; - // - crypto::secret_key sec_spendKey; - BOOST_REQUIRE(string_tools::hex_to_pod(sec_spendKey_string, sec_spendKey)); - account_keys.m_spend_secret_key = sec_spendKey; - } - cout << "transfers__create: spend sec key: " << string_tools::pod_to_hex(account_keys.m_spend_secret_key) << endl; - cout << "transfers__create: spend pub key: " << string_tools::pod_to_hex(from_addr_info.address.m_spend_public_key) << endl; - // - optional payment_id_string = string("b79f8efc81f58f67"); - uint64_t sending_amount = 10000000000; - uint64_t fee_amount = 2167750000; - string to_address_string("43zxvpcj5Xv9SEkNXbMCG7LPQStHMpFCQCmkmR4u5nzjWwq5Xkv5VmGgYEsHXg4ja2FGRD5wMWbBVMijDTqmmVqm93wHGkg"); - cryptonote::address_parse_info to_addr_info; - BOOST_REQUIRE(cryptonote::get_account_address_from_str(to_addr_info, nettype, to_address_string)); - // - std::vector extra; - bool payment_id_seen = false; - { // Detect hash8 or hash32 char hex string as pid and configure 'extra' accordingly - bool r = false; - if (payment_id_string != none) { - crypto::hash payment_id; - r = monero_paymentID_utils::parse_long_payment_id(*payment_id_string, payment_id); - if (r) { - std::string extra_nonce; - cryptonote::set_payment_id_to_tx_extra_nonce(extra_nonce, payment_id); - r = cryptonote::add_extra_nonce_to_tx_extra(extra, extra_nonce); - } else { - crypto::hash8 payment_id8; - r = monero_paymentID_utils::parse_short_payment_id(*payment_id_string, payment_id8); - if (r) { - std::string extra_nonce; - cryptonote::set_encrypted_payment_id_to_tx_extra_nonce(extra_nonce, payment_id8); - r = cryptonote::add_extra_nonce_to_tx_extra(extra, extra_nonce); - } - } - payment_id_seen = true; - } - } - // - { // payment id - if (to_addr_info.is_subaddress && payment_id_seen) { - BOOST_REQUIRE_MESSAGE(false, "Illegal: Never supply a pid with a subaddress."); // TODO: is this true? - return; - } - if (to_addr_info.has_payment_id) { - if (payment_id_seen) { - BOOST_REQUIRE(false); // can't use int addr at same time as supplying manual pid - return; - } - if (to_addr_info.is_subaddress) { - BOOST_REQUIRE(false); // should never happen .. logic err? - return; - } - std::string extra_nonce; - cryptonote::set_encrypted_payment_id_to_tx_extra_nonce(extra_nonce, to_addr_info.payment_id); - bool r = cryptonote::add_extra_nonce_to_tx_extra(extra, extra_nonce); - if (!r) { - BOOST_REQUIRE(false); - return; - } - payment_id_seen = true; - } - } - // - vector outputs; - { // required info from output - auto out = SpendableOutput{}; - out.amount = 125000000000; - out.public_key = "596fa47b6b3905269503435099a05e3ede54564026c93cbe5285e2df074c7118"; - out.rct = "920ee8d99299f304d17fdb104720d1f62be0b03383c7bb466ff39c6a264d80d616ce1eccd6c4de1cc0fba87e463f2e0c373146c475e8a1517f36e7a37351d50034688cc8cb528c14188cae45d89b313d444e583c9d68a32cb80938a5e2aa200b"; - out.global_index = 6451664; - out.index = 0; - out.tx_pub_key = "0a86e588dc67ca11993737e003a9e60c57174a663a47495e3b1d764f486fc88f"; - outputs.push_back(out); - } - // - vector mix_outs; - { - auto amountAndOuts = RandomAmountOutputs{}; - amountAndOuts.amount = 0; - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 5260585; // this is, I believe, presently supplied as a string by the API, probably to avoid overflow - amountOutput.public_key = "da77082624fce921891c4fb80a1e7076a6714ca8c9fc547311737926a0b85a46"; - amountOutput.rct = "bb227b27e36b7f3e695dffb641c29bb60bfd991accdb5ef4b580c9acd48c16b6"; - amountAndOuts.outputs.push_back(amountOutput); - } - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 1929918; - amountOutput.public_key = "8c983e7053d7a1dc9de8ac00468bcf11836a787d712dc0c02bd54a3ee00a55e8"; - amountOutput.rct = "8dec45867644d1a76aafe4487292d7cf401302e6bbbb99a61c2f3b6cef4f4f34"; - amountAndOuts.outputs.push_back(amountOutput); - } - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 3921094; - amountOutput.public_key = "0133219bd5e247eef51003921ec792784c41fc34289c703e9326d46f78d9b10a"; - amountOutput.rct = "75082f4ce31904acba4af37699c28d8d4f0f74fdf63b1e4a8069ebed50df3220"; - amountAndOuts.outputs.push_back(amountOutput); - } - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 6627106; - amountOutput.public_key = "daef1663dd1084bd7fe585c3d493480ee1c4cefb93254eac5855afdf38f662b1"; - amountOutput.rct = "1d96763c5bc3300090c286705b7d544f02c185d9be8c32baac6bbfb8e0d0d283"; - amountAndOuts.outputs.push_back(amountOutput); - } - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 3308654; - amountOutput.public_key = "ae135f58762b1133667002538f8c353a1869db815aa686e2544b5243c2d2212f"; - amountOutput.rct = "15046b93bb181189f2917eed38173202fbbb9cdbfcf3d1bc3e432df999ae1b1c"; - amountAndOuts.outputs.push_back(amountOutput); - } - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 1972531; - amountOutput.public_key = "39e44fa88d684d71762c40eb64ac80ddc694b74a99ac445667bf433536c09c8f"; - amountOutput.rct = "66a42d0e8123768b392ad4a230759258d9156fab1aea00a19b041832326aca0a"; - amountAndOuts.outputs.push_back(amountOutput); - } - { - auto amountOutput = RandomAmountOutput{}; - amountOutput.global_index = 3274424; - amountOutput.public_key = "a89b91648645ba6f32e214ba5720f5387376e5a144e698d5d5d1ebac971de349"; - amountOutput.rct = "815a6b1da6fc6a3bd791c4342782381cf948ee822ac9da7149f1b3717e0266d2"; - amountAndOuts.outputs.push_back(amountOutput); - } - mix_outs.push_back(amountAndOuts); - } - // - uint32_t subaddr_account_idx = 0; - std::unordered_map subaddresses; - subaddresses[account_keys.m_account_address.m_spend_public_key] = {0,0}; - cout << "transfers__create: account_keys.m_account_address.m_spend_public_key: " << string_tools::pod_to_hex(account_keys.m_account_address.m_spend_public_key) << endl; - // - monero_transfer_utils::create_transaction( - retVals, - account_keys, - subaddr_account_idx, - subaddresses, - to_addr_info.address, - sending_amount, - 112832250000, // change amount - fee_amount, - outputs, - mix_outs, - extra, - use_fork_rules_fn, - 0, // unlock_time - true, // rct - nettype - ); - if (retVals.errCode != noError) { - BOOST_REQUIRE_MESSAGE(false, "create_transaction failed"); - return; - } - auto txBlob = t_serializable_object_to_blob(*retVals.tx); - size_t txBlob_byteLength = txBlob.size(); -// cout << "txBlob: " << txBlob << endl; - cout << "transfers__create: txBlob_byteLength: " << txBlob_byteLength << endl; - BOOST_REQUIRE(txBlob_byteLength > 0); - - // tx hash - auto tx_hash_string = epee::string_tools::pod_to_hex(cryptonote::get_transaction_hash(*retVals.tx)); - auto signed_serialized_tx_string = epee::string_tools::buff_to_hex_nodelimer(cryptonote::tx_to_blob(*retVals.tx)); - - cout << "transfers__create: tx_hash_string: " << tx_hash_string << endl; - cout << "transfers__create: signed_serialized_tx_string: " << signed_serialized_tx_string << endl; -} // // // Serialization bridge @@ -326,8 +129,8 @@ BOOST_AUTO_TEST_CASE(bridged__transfers__create) using namespace monero_transfer_utils; // string from_address_string = "43zxvpcj5Xv9SEkNXbMCG7LPQStHMpFCQCmkmR4u5nzjWwq5Xkv5VmGgYEsHXg4ja2FGRD5wMWbBVMijDTqmmVqm93wHGkg"; - string to_address_string = "43zxvpcj5Xv9SEkNXbMCG7LPQStHMpFCQCmkmR4u5nzjWwq5Xkv5VmGgYEsHXg4ja2FGRD5wMWbBVMijDTqmmVqm93wHGkg"; - string amount_string = "10000000000"; + string to_address_string = "4L6Gcy9TAHqPVPMnqa5cPtJK25tr7maE7LrJe67vzumiCtWwjDBvYnHZr18wFexJpih71Mxsjv8b7EpQftpB9NjPaRYYBm62jmF59EWcj6"; + string amount_string = "1026830000"; // boost::property_tree::ptree root; root.put("nettype_string", string_from_nettype(MAINNET)); @@ -335,21 +138,61 @@ BOOST_AUTO_TEST_CASE(bridged__transfers__create) root.put("sec_viewKey_string", "7bea1907940afdd480eff7c4bcadb478a0fbb626df9e3ed74ae801e18f53e104"); root.put("sec_spendKey_string", "4e6d43cd03812b803c6f3206689f5fcc910005fc7e91d50d79b0776dbefcd803"); root.put("to_address_string", to_address_string); - root.put("payment_id_string", "b79f8efc81f58f67"); + root.put("payment_id_string", "d2f602b240fbe624"); root.put("sending_amount", amount_string); - root.put("change_amount", "112832250000"); - root.put("fee_amount", "2167750000"); + root.put("change_amount", "0"); + root.put("fee_amount", "2550170000"); root.put("unlock_time", "0"); // boost::property_tree::ptree outputs; { boost::property_tree::ptree out; - out.put("amount", "125000000000"); - out.put("public_key", "596fa47b6b3905269503435099a05e3ede54564026c93cbe5285e2df074c7118"); - out.put("rct", "920ee8d99299f304d17fdb104720d1f62be0b03383c7bb466ff39c6a264d80d616ce1eccd6c4de1cc0fba87e463f2e0c373146c475e8a1517f36e7a37351d50034688cc8cb528c14188cae45d89b313d444e583c9d68a32cb80938a5e2aa200b"); - out.put("global_index", "6451664"); + out.put("amount", "330000000"); + out.put("public_key", "f628f516cce1408ebfca9bb3a144ca044dd3f2de19711cc42fa4bf296b6761ca"); + out.put("rct", "66fafd6d2a1d6e92e30ee7fae132bd24116c325fca4594225fdf6f40cebd39b386ec21d9bd200c6212027e79237ad5fc076caf5c35e625eb2eb10b82debf5900cd9b8805d566e1ae29f69672876921c8a0ce0c7c4d87cf52dbd483403f435c0c"); + out.put("global_index", "7440388"); + out.put("index", "1"); + out.put("tx_pub_key", "d067e192807d4374aa7e8f832a0702b2c6f35fa30a5fae43a9ecddc3fde755d6"); + outputs.push_back(std::make_pair("", out)); + } + { + boost::property_tree::ptree out; + out.put("amount", "200000000"); + out.put("public_key", "e92465cd124e98b3741b93d00346374eaf1cf37d3670eb21a595047d0b12accb"); + out.put("rct", "9b59ae166065aef95ab4380e0827035ff5ad579a5b11e5bef305af5369e61d4a9b91bfb770cbb9ada6b704d118417724e2b5d8d208c13e4bb3af9a355f00500e48c770addbbc0fd595d0b1edf36b591dd58102b100140146e7d93371b01cce0e"); + out.put("global_index", "7460517"); + out.put("index", "0"); + out.put("tx_pub_key", "e6bea5eaaff6beedc54dc5d4d24883fc18537af58425d584dad6d21fa6e1f27f"); + outputs.push_back(std::make_pair("", out)); + } + { + boost::property_tree::ptree out; + out.put("amount", "1000000000"); + out.put("public_key", "14db00825a260f432c9cf1bc52cc65965e76b5519b228bfbfed2ce2c3119e73b"); + out.put("rct", "f18df9fc7363f6d92c25716bb18e2428e4712732e2a67f24ae799406e5d1e90f739658d1831a13fd92d30db16a615624897513c795a62d29166756f5d8a4ca0ff3842a5578d04ab559f2440e4f5c9fc2dae4033d49fac5b57048d14a054fcc02"); + out.put("global_index", "7348866"); + out.put("index", "0"); + out.put("tx_pub_key", "e0d953678f4ddbb39fac96a739d3a1e7ffaebf5f2e5f69b6a064567eb3c053f5"); + outputs.push_back(std::make_pair("", out)); + } + { + boost::property_tree::ptree out; + out.put("amount", "1337000000"); + out.put("public_key", "5f871fe678a9dcba8ef682e8f7362cea200f42696c7dbe03f902ca19173eb147"); + out.put("rct", "50b0100d12c4c8824b3f3a56b97feefa2b0829a3fdeefe19b7d6ebcf7b768450eb4112e86debb0d859da4c0c556c7720c5388eead19863229a3fc610c23093024d8bd6f881687518019c8cd7d61a40f3a7486546df4d318011eacd34f4b17b0f"); + out.put("global_index", "7499194"); + out.put("index", "1"); + out.put("tx_pub_key", "1009aecc5f53f75b0731e0ccb3fd37ba2808a5c645a2a1f56861f121c926e4b5"); + outputs.push_back(std::make_pair("", out)); + } + { + boost::property_tree::ptree out; + out.put("amount", "710000000"); + out.put("public_key", "4b4c3fcc8ab73628f298dc75fa5976e1812cd21bc77f30bfa6bb2eb6e713d2f7"); + out.put("rct", "6b560a85f4b5ec7b4ccd4401717b84307e2b03c646340708028a6d97f41790e39f13da5d8ccd642d5693952a3c67b78ff297c8d718051c782b3f37ac6010cc069938fef32ffbe626e18685b7c13c17b53d3077f5bae52742daac2f29b6c9e708"); + out.put("global_index", "7440663"); out.put("index", "0"); - out.put("tx_pub_key", "0a86e588dc67ca11993737e003a9e60c57174a663a47495e3b1d764f486fc88f"); + out.put("tx_pub_key", "976feee1972bbd05d6ac7d52ccb30614143c31021b3941e28de2cbb1f48a8ddf"); outputs.push_back(std::make_pair("", out)); } root.add_child("outputs", outputs); @@ -361,53 +204,417 @@ BOOST_AUTO_TEST_CASE(bridged__transfers__create) boost::property_tree::ptree mix_out_outputs; { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "5260585"); - mix_out_output.put("public_key", "da77082624fce921891c4fb80a1e7076a6714ca8c9fc547311737926a0b85a46"); - mix_out_output.put("rct", "bb227b27e36b7f3e695dffb641c29bb60bfd991accdb5ef4b580c9acd48c16b6"); + mix_out_output.put("global_index", "6022297"); + mix_out_output.put("public_key", "c0961a16132c2af839abc41d6b9f53fd828997d7deb0fbeb64fa203bcce35c29"); + mix_out_output.put("rct", "e8d57915f3b1d9440199e5bda9bcc6b214eee76a498ed983214f6187880062a4"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); } { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "1929918"); - mix_out_output.put("public_key", "8c983e7053d7a1dc9de8ac00468bcf11836a787d712dc0c02bd54a3ee00a55e8"); - mix_out_output.put("rct", "8dec45867644d1a76aafe4487292d7cf401302e6bbbb99a61c2f3b6cef4f4f34"); + mix_out_output.put("global_index", "5844452"); + mix_out_output.put("public_key", "2b9d22d274dc47783b820778cf5baa65a4f444dada4d0b5797923eefeb265bf6"); + mix_out_output.put("rct", "72a9f57e82a884dd6494e8c816db5323bfeb18c1342f5712b7634afc9a4fa392"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); } { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "3921094"); - mix_out_output.put("public_key", "0133219bd5e247eef51003921ec792784c41fc34289c703e9326d46f78d9b10a"); - mix_out_output.put("rct", "75082f4ce31904acba4af37699c28d8d4f0f74fdf63b1e4a8069ebed50df3220"); + mix_out_output.put("global_index", "4517893"); + mix_out_output.put("public_key", "66048decc2ee6fb747fe81855caee828bd164e8c99aa69fe66e936bbd53f877c"); + mix_out_output.put("rct", "dcde26b254956195072da36c4defd7f2666014fea6a96db3498a29e28b26ad6d"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); } { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "6627106"); - mix_out_output.put("public_key", "daef1663dd1084bd7fe585c3d493480ee1c4cefb93254eac5855afdf38f662b1"); - mix_out_output.put("rct", "1d96763c5bc3300090c286705b7d544f02c185d9be8c32baac6bbfb8e0d0d283"); + mix_out_output.put("global_index", "6680101"); + mix_out_output.put("public_key", "f319620061c4edb40976d32eab1e5dce7d12ad40bb2bea09e8ff4dde873bceaf"); + mix_out_output.put("rct", "419b1d691a32f7425eee817eae8fac314db1d01c4793b5e18523b34cbe666fcf"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); } { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "3308654"); - mix_out_output.put("public_key", "ae135f58762b1133667002538f8c353a1869db815aa686e2544b5243c2d2212f"); - mix_out_output.put("rct", "15046b93bb181189f2917eed38173202fbbb9cdbfcf3d1bc3e432df999ae1b1c"); + mix_out_output.put("global_index", "6367881"); + mix_out_output.put("public_key", "cce4ab9a29a5c199da114a2ba6a1136e0e977024babc4b755651aea36e3bca56"); + mix_out_output.put("rct", "c701a4d8f1b46c0f852ee4806f097a732a1f6250fe1c972e7a797a1a76c13f91"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); } { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "1972531"); - mix_out_output.put("public_key", "39e44fa88d684d71762c40eb64ac80ddc694b74a99ac445667bf433536c09c8f"); - mix_out_output.put("rct", "66a42d0e8123768b392ad4a230759258d9156fab1aea00a19b041832326aca0a"); + mix_out_output.put("global_index", "4012934"); + mix_out_output.put("public_key", "593be9a93d96a7ffa35b71cf8ff86fa4742bef30e97240edcbeb8dbd692c6744"); + mix_out_output.put("rct", "9b7f8c556e7ef5055c69fc8130d8a06ae06893d7430bcd0ce6cbbbb3fda743ca"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); } { boost::property_tree::ptree mix_out_output; - mix_out_output.put("global_index", "3274424"); - mix_out_output.put("public_key", "a89b91648645ba6f32e214ba5720f5387376e5a144e698d5d5d1ebac971de349"); - mix_out_output.put("rct", "815a6b1da6fc6a3bd791c4342782381cf948ee822ac9da7149f1b3717e0266d2"); + mix_out_output.put("global_index", "3658900"); + mix_out_output.put("public_key", "52d33ef82fe443eca4451debe75d02277e735c9755e1eecda7b8ec314d98207a"); + mix_out_output.put("rct", "25b2f9e08f25defa09d9b4184cfd9f052920939b335942b7a21b5b937e712c86"); mix_out_outputs.push_back(std::make_pair("", mix_out_output)); - } + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6271270"); + mix_out_output.put("public_key", "676978466ebeeb3e37f361b97e47531219b24c796cd7a336fa760358f57dd8b9"); + mix_out_output.put("rct", "2fd25fa0a5499132c0e84957e71c0ac968292cdcc2fbd14decc81c64423cba54"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6737337"); + mix_out_output.put("public_key", "bff30dd5754ab7c6c5ff5beac28deb9ce8e3a52806b9534732ef2d463cb19042"); + mix_out_output.put("rct", "a55b847032bbbe23ef54e73a7d0cae37533c260fb308ea7a735d49e5ee24eb11"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "2853615"); + mix_out_output.put("public_key", "d122c1bf187a0bba720c2662e9bf3801f7d9e833de4c0b0fd93c2c10cb8e8274"); + mix_out_output.put("rct", "aacc7e6c7032370ca4d738ae0b4b4082f10c0e8f0f4c84490793ad90f6e261ba"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6988828"); + mix_out_output.put("public_key", "f14eb3ea0127908704e8b4437644106ad567172cf04ba415d93c473d163aacd4"); + mix_out_output.put("rct", "950b40e077358482e2baa20d814998a26d9ff05c27af4b4d3ca6da1aa1b0687f"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + mix_out.add_child("outputs", mix_out_outputs); + mix_outs.push_back(std::make_pair("", mix_out)); + } + { + boost::property_tree::ptree mix_out; + mix_out.put("amount", "0"); + boost::property_tree::ptree mix_out_outputs; + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5593429"); + mix_out_output.put("public_key", "65dcd81a05df5f6638f144aefd87805c10418b1a6a66e4b86f0d7cf624ee524b"); + mix_out_output.put("rct", "18b3d2851580a9466104c6e3345b252a58af0565d32e0973084abd49d5b995d6"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "2694114"); + mix_out_output.put("public_key", "945e10059f5096368a5b59df0501199053be2701d59d17d1c417f185b911db50"); + mix_out_output.put("rct", "93ca380debeb12079a4a75df2f155c5b22b91a994739e6794c3e883ca735439f"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "3588742"); + mix_out_output.put("public_key", "227f77475495bbffb2233516eb3330d4c3abc8a47c4935cd6fd2618b6df655de"); + mix_out_output.put("rct", "9c2d958dd948403a5dcb54db8db9ec958f07409e20c6389cb481975097bb4e3f"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6599417"); + mix_out_output.put("public_key", "ed819b935266f190a38bc7d14359f852c084b3fc683faca6cca9bc52f7ad57a9"); + mix_out_output.put("rct", "e112009aca4ee5d002e7a70a73da6093b05eb64569b1db0f13725b475c0e6100"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "2836715"); + mix_out_output.put("public_key", "60c37b65a6948241168db496f175df6efe12693eb7f854922093d5f4aa6822b6"); + mix_out_output.put("rct", "221a566f64faec25a6c1b7748353c12f84ed766e3346be60c84985a52fc1a9af"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "293661"); + mix_out_output.put("public_key", "26a971d54288152a77822e3041b2b6637b8a3b421683baa34de9d28910e473b1"); + mix_out_output.put("rct", "ac32d38b0fe3797ee8cb0b1a1e613469ec099723304b683d9c4038bcdfe1d9b3"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "3772025"); + mix_out_output.put("public_key", "de0a55a60cf58eaa39131bd98e60170abad6de0f6d605d8645db655462da17f0"); + mix_out_output.put("rct", "1dfdf954ee0239adc4a57daf75cfa7f3ff601efc4a16c4af70036f33e663789b"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5685659"); + mix_out_output.put("public_key", "bb669c043cdfb9827dc96e8f0016c33ca1099eefa6a065b6cc062eac539df492"); + mix_out_output.put("rct", "fff3e0762ff14ac9281e7c5ae9de42a2d7b83848331fc0a07315a42412482f5c"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "4436753"); + mix_out_output.put("public_key", "d2f349d469c62323f73501357a09219031e19b5580b7375a5ff303ead3b7bdda"); + mix_out_output.put("rct", "f531214063a18eed0dafa7497da165c67d7af11bb2fe225ed05b215c29bfb468"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5725205"); + mix_out_output.put("public_key", "6dc84dfdf3227f619b3017171beed53da8ea463bca1f270c929575addee0e428"); + mix_out_output.put("rct", "47179835b5bf8ab50cfe36b2aec373b91b8119c56fbe73ba142dba5282abb6a9"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6328492"); + mix_out_output.put("public_key", "d373bc1a510934ab1d1cab891f5ddb3490d6a3f4fa8f71cf90ca0b5f9583625c"); + mix_out_output.put("rct", "d08b9958636dacd9cc470e19c40e34855623168053fd6f03d0f05a51a2e2b616"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + mix_out.add_child("outputs", mix_out_outputs); + mix_outs.push_back(std::make_pair("", mix_out)); + } + { + boost::property_tree::ptree mix_out; + mix_out.put("amount", "0"); + boost::property_tree::ptree mix_out_outputs; + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "1472497"); + mix_out_output.put("public_key", "f52425f85472b0b733f1926ed505d12136bf144763265ac3fe1729746d1819b1"); + mix_out_output.put("rct", "82080aed958e8501c4205753f1b0410a5cdb357afbd00fc5db0457b2b6f04829"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "4114941"); + mix_out_output.put("public_key", "b736816eed46887c1f2fbde7b7be061b1b05cef9b700e9b9d81e48a922de7ff7"); + mix_out_output.put("rct", "e626ecae8d0c05ce7b27250d769d8588734f11b0abde348778b53bea5c9c6136"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6467586"); + mix_out_output.put("public_key", "56cdce2f6fe0472eb41beb8952ad3e1d0a850f8d9a000c19eafff8fdb99a5ffc"); + mix_out_output.put("rct", "a0cb89d5071b4470add8b1e1d9fd8b580a566371cfff68b3c581c10273067e59"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "2092106"); + mix_out_output.put("public_key", "3b727da9cede03d84c67efddd732ff0ff0df00f9b30dc0ef9edb398a2a1aa485"); + mix_out_output.put("rct", "eab9cf089147ea5eb2ce72b0412af6e37dc2457c154b98bfc4872d0eb89025b8"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5311080"); + mix_out_output.put("public_key", "61653c30bc414e61b63802c7b8d03eed7deeec46a43cb551b0758c4aabfc737d"); + mix_out_output.put("rct", "ff6f6268694861466c853b4ced591ff29e83f37a058d0e0fc5977e213c431d29"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "4213697"); + mix_out_output.put("public_key", "9e3dae8a108c9f72ec250e2de1f0820ff1903c5d65e19fb96fb1b53a7908bf18"); + mix_out_output.put("rct", "1209e3c83e761660956db24def7573825bc70890163e921aabf1b32cabf5e66c"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5038411"); + mix_out_output.put("public_key", "669d3298f64b9c511e39a77b23d802f8f415de0a383c215a25a5973c35529606"); + mix_out_output.put("rct", "0d7f4ed0d50e4e45d838dc76fac13e6377f8e37f8054fdd9a7ebdae9e31f88e0"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5416381"); + mix_out_output.put("public_key", "fbcf98f4d25b7aca7c92c554d51a1270dd3794a5de32297acee7a41ba753a71f"); + mix_out_output.put("rct", "c3f666fc7b99983d906db6f50f0bb4043abf64faaa94ee89c196125327bdbb15"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "3124362"); + mix_out_output.put("public_key", "0a062df5f30bf16384c4c840df9cb76bd25d37baaf2250c0a51593c69bbf332a"); + mix_out_output.put("rct", "addb3000d7da14d2dcba39459ccba013c26c0c558a3b9abff80e3d33bb4e7057"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "7424088"); + mix_out_output.put("public_key", "094130eef4b50f62510631fdc1cbdf3608a76267eafa3488c5d748b410a1aced"); + mix_out_output.put("rct", "db70b06b7f24a85cc330d0376d0d6be7ffef7994f8f61e9a67f516cdcb6c6045"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5878908"); + mix_out_output.put("public_key", "3a51d8cd4a985504e7cc5165923f24be258d3155b5fdb7a83241eda2b89dd593"); + mix_out_output.put("rct", "06324483a8212c1f4ab771be9c763dd9eb1a7233c08a9fbbd6abd08e691aac57"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + mix_out.add_child("outputs", mix_out_outputs); + mix_outs.push_back(std::make_pair("", mix_out)); + } + { + boost::property_tree::ptree mix_out; + mix_out.put("amount", "0"); + boost::property_tree::ptree mix_out_outputs; + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6479541"); + mix_out_output.put("public_key", "b8e9d322417663c0245ae172cadc58f249d61169f6ae0ae7b831cb6f62cdfb85"); + mix_out_output.put("rct", "f2a4ac6c5ff9670158486c03418a5f312bdbe84222f5e89385a51363bab7bdaa"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6104091"); + mix_out_output.put("public_key", "9fc9e838438ababa62835fda758ae9c55ea43c8da1fa94213b4c77b2622b6df5"); + mix_out_output.put("rct", "9341b536f88275932cd44b06373434d39707ab3ba5f1fbdddc02544c2f8bcde7"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "7216082"); + mix_out_output.put("public_key", "387c093f78ac0d734b7af04d05055e11f6c9dc7536a1dfa2ccadd60c79693960"); + mix_out_output.put("rct", "4244f9aec800e371c7c2c7a663108bf2d0b8eb6d59ba08c32040fba2eca80be8"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "4364145"); + mix_out_output.put("public_key", "d99460fd75c8414f565db04ff11b0d3cf6898efef35c528c624a9662f3d49996"); + mix_out_output.put("rct", "98bc320bb539668969eec42a944c429b36ec7e61b8935e4e9c41192b3d39c32f"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "3591861"); + mix_out_output.put("public_key", "543b3eafd209344a02ad8a60035322be2e796a4d718926330faa9adcac2697df"); + mix_out_output.put("rct", "edae851e4e4faeef79f32e582cccb72c89af6636b56cf966f8e670c4e97a50cb"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "2010861"); + mix_out_output.put("public_key", "c748b1f34c16a23943884672b155a0224faab8c9779bd2a244b1480da226637f"); + mix_out_output.put("rct", "c01f86c86759a2e4feb80cef76f16a5fffd61b78d612c04388a1cf36ee71de78"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "2120332"); + mix_out_output.put("public_key", "1d57d35f0b87441599b9c48d292098fb199e962566dfc51a0a3ca6061757ec84"); + mix_out_output.put("rct", "40ff33c909f1216e30dfa723c5518def95da6b8db566cd099a8b6e4e19c1e022"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6647347"); + mix_out_output.put("public_key", "934f700ab34a84e6e72ed30f7f7d54b9b346f4bb6e6d3a74ea21977f293e7167"); + mix_out_output.put("rct", "9734fe3e0face374bcf73a4ad9d25306106af490a9790343718e2c7ad20c1c60"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "7216401"); + mix_out_output.put("public_key", "855707ad257220dcc3bfeeee2dc8efc4ab9e62c07a3f38b4a4ed535db86497cc"); + mix_out_output.put("rct", "9f9d585c34594b4a3e268eb4cbfa45f1e542d233f1655e432ff03055667189d1"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5170016"); + mix_out_output.put("public_key", "56f6c97015849075c8a4831feba5dcc7989f735edde9e6181613e62b3b4bfa1c"); + mix_out_output.put("rct", "37d189c9576596ab3a525901eb0065fffbe3cecccc35337ef1f441d61ed187d5"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6993012"); + mix_out_output.put("public_key", "dfba264e3a2f43c4b6597eccfaafa768dc3903c0aae0b19d55e42f9ffd1089f0"); + mix_out_output.put("rct", "f37edf74d0252af96d73d2ff3881f11352dbd585dc9f7fb80e95b39a33059057"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + mix_out.add_child("outputs", mix_out_outputs); + mix_outs.push_back(std::make_pair("", mix_out)); + } + { + boost::property_tree::ptree mix_out; + mix_out.put("amount", "0"); + boost::property_tree::ptree mix_out_outputs; + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5657940"); + mix_out_output.put("public_key", "b20f3aefea422d4abb5630a4f0b0edd890b1c1c3a6a206ece616932df0f4a38a"); + mix_out_output.put("rct", "cda43d468ae84656b1a5fa05bde97fe48cf9ab360c73c2194882b525d4cdd49d"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "7439656"); + mix_out_output.put("public_key", "2765f455e2453084e922946a3959c1972317cf72003aebee9f1e2a0f9602f10f"); + mix_out_output.put("rct", "51373d766c61a16a0aa87da436b907392b8fcbcd89fe62a2f512f3a5dddf3180"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5931827"); + mix_out_output.put("public_key", "54a71ff9b44ccfeaaa06ef7a8876bacd77cfb2d33083444f44c3621c6b0e9273"); + mix_out_output.put("rct", "116b1f52b0c1837118f91c20b3c67fc12bff591b0261a192fe80213642ce4c80"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6976496"); + mix_out_output.put("public_key", "2ea7c464e6f725fb3f1bec5e771cea42d6407c9613bb5a0858c0ffce9c3fc587"); + mix_out_output.put("rct", "c11e79051291fb33dbd2e7126a79cbdaf76840075243520e25dd4ce7bf23c079"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6801722"); + mix_out_output.put("public_key", "0352533ce5bc4bfaff6a406374921163d353035b24d9fdb26878537508430461"); + mix_out_output.put("rct", "94bcab060f1fe54f2e96daceb982fc542a3579fdf4508c0cb03de49e59e34ffc"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "7008591"); + mix_out_output.put("public_key", "62ef63653d5e195ee635ff41738fd6c7c98120199c7ebdb7748718e8da013114"); + mix_out_output.put("rct", "41632747629f85f497d59df18d93c53ffed0900033e351fa033e2384c07b256b"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5901945"); + mix_out_output.put("public_key", "de8852684cf5fcc95874544f74c454941da0abb8573cb1ce869c7fe2a3011845"); + mix_out_output.put("rct", "46680c09305e48b4d97df127274fbb03481065080921f5f9c6efa260d8bf1973"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6137605"); + mix_out_output.put("public_key", "70e57222f46ea5ed95a840f66872e42c651fec12eb7bf9ccfa15043152eec1a9"); + mix_out_output.put("rct", "66d2aa8e721a8c4114a68f93193e85930970ce501cde42523905755c1bc46d0b"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "4489250"); + mix_out_output.put("public_key", "4f7cdd2b88421f3869e5539ea492e3f43bb552f6a8c877f1626ec2fe10659cbc"); + mix_out_output.put("rct", "2c1281cd0018325498d7a72778bfe840309b34ba743418b251d4181a0e7c9825"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "5900487"); + mix_out_output.put("public_key", "9c9937b31202ed6d6b030ecd4f923ecad0ef132ad5a808b5c61008b88ccb9dad"); + mix_out_output.put("rct", "ad11ddcc44a83d3acdd02c7db7313d939ba71437ce91dfcdf4e3107618d5e58b"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } + { + boost::property_tree::ptree mix_out_output; + mix_out_output.put("global_index", "6117071"); + mix_out_output.put("public_key", "8517e656a1e53d4d0a6265cefd71cc48cbab59303695bb5f5007bef635c522fc"); + mix_out_output.put("rct", "fc53cdb49f07621b85bfd0997cd54ab2f83fa70ca73c7962f2b42e05361b832e"); + mix_out_outputs.push_back(std::make_pair("", mix_out_output)); + } mix_out.add_child("outputs", mix_out_outputs); mix_outs.push_back(std::make_pair("", mix_out)); }