mirror of
https://github.com/monero-project/monero.git
synced 2025-08-10 00:40:07 -04:00
wallet: kill support for deprecated ephemeral Boost messages
The commit kills support for deprecated ephemeral Boost messages: signed/unsigned transaction sets, pending transactions, reserve proofs, MMS messages, etc. It does NOT kill support for loading very old wallets in Boost format, that should be supported indefinitely. These messages were deprecated 5 years ago. Since then, we have had a hard fork to enable a new non-compatible transaction type (w/ view tags), and disable the old transaction type. This renders basically all of the aforementioned messages before that HF useless, with the possible exception of reserve proofs. This commit also cleans up dead inclusions of boost serialization headers. This commit is part of upstreaming Carrot/FCMP++. Killing support for Boost messages now means less boilerplate Boost serialization review for Carrot/FCMP++.
This commit is contained in:
parent
125622d5bd
commit
e9c89dc6ab
16 changed files with 6 additions and 700 deletions
|
@ -899,287 +899,6 @@ TEST(Serialization, portability_outputs)
|
|||
ASSERT_TRUE(td2.m_pk_index == 0);
|
||||
}
|
||||
|
||||
struct unsigned_tx_set
|
||||
{
|
||||
std::vector<tools::wallet2::tx_construction_data> txes;
|
||||
tools::wallet2::transfer_container transfers;
|
||||
};
|
||||
template <class Archive>
|
||||
inline void serialize(Archive &a, unsigned_tx_set &x, const boost::serialization::version_type ver)
|
||||
{
|
||||
a & x.txes;
|
||||
a & x.transfers;
|
||||
}
|
||||
#define UNSIGNED_TX_PREFIX "Monero unsigned tx set\003"
|
||||
TEST(Serialization, portability_unsigned_tx)
|
||||
{
|
||||
const boost::filesystem::path filename = unit_test::data_dir / "unsigned_monero_tx";
|
||||
std::string s;
|
||||
const cryptonote::network_type nettype = cryptonote::TESTNET;
|
||||
bool r = epee::file_io_utils::load_file_to_string(filename.string(), s);
|
||||
ASSERT_TRUE(r);
|
||||
const size_t magiclen = strlen(UNSIGNED_TX_PREFIX);
|
||||
ASSERT_FALSE(strncmp(s.c_str(), UNSIGNED_TX_PREFIX, magiclen));
|
||||
unsigned_tx_set exported_txs;
|
||||
s = s.substr(magiclen);
|
||||
r = false;
|
||||
try
|
||||
{
|
||||
std::istringstream iss(s);
|
||||
boost::archive::portable_binary_iarchive ar(iss);
|
||||
ar >> exported_txs;
|
||||
r = true;
|
||||
}
|
||||
catch (...)
|
||||
{}
|
||||
ASSERT_TRUE(r);
|
||||
/*
|
||||
fields of tools::wallet2::unsigned_tx_set to be checked:
|
||||
std::vector<tx_construction_data> txes
|
||||
std::vector<wallet2::transfer_details> m_transfers
|
||||
|
||||
fields of toolw::wallet2::tx_construction_data to be checked:
|
||||
std::vector<cryptonote::tx_source_entry> sources
|
||||
cryptonote::tx_destination_entry change_dts
|
||||
std::vector<cryptonote::tx_destination_entry> splitted_dsts
|
||||
std::list<size_t> selected_transfers
|
||||
std::vector<uint8_t> extra
|
||||
uint64_t unlock_time
|
||||
bool use_rct
|
||||
std::vector<cryptonote::tx_destination_entry> dests
|
||||
|
||||
fields of cryptonote::tx_source_entry to be checked:
|
||||
std::vector<std::pair<uint64_t, rct::ctkey>> outputs
|
||||
size_t real_output
|
||||
crypto::public_key real_out_tx_key
|
||||
size_t real_output_in_tx_index
|
||||
uint64_t amount
|
||||
bool rct
|
||||
rct::key mask
|
||||
|
||||
fields of cryptonote::tx_destination_entry to be checked:
|
||||
uint64_t amount
|
||||
account_public_address addr
|
||||
*/
|
||||
// txes
|
||||
ASSERT_TRUE(exported_txs.txes.size() == 1);
|
||||
auto& tcd = exported_txs.txes[0];
|
||||
// tcd.sources
|
||||
ASSERT_TRUE(tcd.sources.size() == 1);
|
||||
auto& tse = tcd.sources[0];
|
||||
// tcd.sources[0].outputs
|
||||
ASSERT_TRUE(tse.outputs.size() == 5);
|
||||
auto& out0 = tse.outputs[0];
|
||||
auto& out1 = tse.outputs[1];
|
||||
auto& out2 = tse.outputs[2];
|
||||
auto& out3 = tse.outputs[3];
|
||||
auto& out4 = tse.outputs[4];
|
||||
ASSERT_TRUE(out0.first == 6295);
|
||||
ASSERT_TRUE(out1.first == 14302);
|
||||
ASSERT_TRUE(out2.first == 17598);
|
||||
ASSERT_TRUE(out3.first == 18671);
|
||||
ASSERT_TRUE(out4.first == 19760);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out0.second) == "e7272cb589954ddeedd20de9411ed57265f154d41f33cec9ff69e5d642e09814096490b0ac85308342acf436cc0270d53abef9dc04c6202f2459e879bfd40ce6");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out1.second) == "c3a9f49d1fe75939cc3feb39871ce0a7366c2879a63faa1a5cf34e65723b120a272ff0c7d84ab8b6ee3528d196450b0e28b3fed276bc2597a2b5b17afb9354ab");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out2.second) == "176e239c8c39000c2275e2f63ed7d55c55e0843524091522bbd3d3b869044969021fad70fc1244115449d4754829ae7c47346342ee5d52a2cdd47dfc351d0ab0");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out3.second) == "ef12d7946302fb064f2ba9df1a73d72233ac74664ed3b370580fa3bdc377542ad93f64898bd95851d6efe0d7bf2dbbea9b7c6b3c57e2c807e7b17d55b4622259");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out4.second) == "0d8467e16e73d16510452b78823e082e05ee3a63788d40de577cf31eb555f0c8525096cbc88d00a841eed66f3cdb6f0a018e6ce9fb9433ed61afba15cbbebd04");
|
||||
// tcd.sources[0].{real_output, real_out_tx_key, real_output_in_tx_index, amount, rct, mask}
|
||||
ASSERT_TRUE(tse.real_output == 4);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.real_out_tx_key) == "4d86c7ba1c285fe4bc1cd7b54ba894fa89fa02fc6b0bbeea67d53251acd14a05");
|
||||
ASSERT_TRUE(tse.real_output_in_tx_index == 1);
|
||||
ASSERT_TRUE(tse.amount == 11066009260865);
|
||||
ASSERT_TRUE(tse.rct);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.mask) == "789bafff169ef206aa21219342c69ca52ce1d78d776c10b21d14bdd960fc7703");
|
||||
// tcd.change_dts
|
||||
ASSERT_TRUE(tcd.change_dts.amount == 9631208773403);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, tcd.change_dts.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk");
|
||||
// tcd.splitted_dsts
|
||||
ASSERT_TRUE(tcd.splitted_dsts.size() == 2);
|
||||
auto& splitted_dst0 = tcd.splitted_dsts[0];
|
||||
auto& splitted_dst1 = tcd.splitted_dsts[1];
|
||||
ASSERT_TRUE(splitted_dst0.amount == 1400000000000);
|
||||
ASSERT_TRUE(splitted_dst1.amount == 9631208773403);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst0.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA");
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst1.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk");
|
||||
// tcd.selected_transfers
|
||||
ASSERT_TRUE(tcd.selected_transfers.size() == 1);
|
||||
ASSERT_TRUE(tcd.selected_transfers.front() == 2);
|
||||
// tcd.extra
|
||||
ASSERT_TRUE(tcd.extra.size() == 68);
|
||||
// tcd.{unlock_time, use_rct}
|
||||
ASSERT_TRUE(tcd.unlock_time == 0);
|
||||
ASSERT_TRUE(tcd.use_rct);
|
||||
// tcd.dests
|
||||
ASSERT_TRUE(tcd.dests.size() == 1);
|
||||
auto& dest = tcd.dests[0];
|
||||
ASSERT_TRUE(dest.amount == 1400000000000);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, dest.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA");
|
||||
// transfers
|
||||
ASSERT_TRUE(exported_txs.transfers.size() == 3);
|
||||
auto& td0 = exported_txs.transfers[0];
|
||||
auto& td1 = exported_txs.transfers[1];
|
||||
auto& td2 = exported_txs.transfers[2];
|
||||
ASSERT_TRUE(td0.m_block_height == 818424);
|
||||
ASSERT_TRUE(td1.m_block_height == 818522);
|
||||
ASSERT_TRUE(td2.m_block_height == 818522);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td0.m_txid) == "15024343b38e77a1a9860dfed29921fa17e833fec837191a6b04fa7cb9605b8e");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td1.m_txid) == "ec34c9bb12b99af33d49691384eee5bed9171498ff04e59516505f35d1fc5efc");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td2.m_txid) == "6e7013684d35820f66c6679197ded9329bfe0e495effa47e7b25258799858dba");
|
||||
ASSERT_TRUE(td0.m_internal_output_index == 0);
|
||||
ASSERT_TRUE(td1.m_internal_output_index == 0);
|
||||
ASSERT_TRUE(td2.m_internal_output_index == 1);
|
||||
ASSERT_TRUE(td0.m_global_output_index == 19642);
|
||||
ASSERT_TRUE(td1.m_global_output_index == 19757);
|
||||
ASSERT_TRUE(td2.m_global_output_index == 19760);
|
||||
ASSERT_TRUE (td0.m_spent);
|
||||
ASSERT_FALSE(td1.m_spent);
|
||||
ASSERT_FALSE(td2.m_spent);
|
||||
ASSERT_TRUE(td0.m_spent_height == 0);
|
||||
ASSERT_TRUE(td1.m_spent_height == 0);
|
||||
ASSERT_TRUE(td2.m_spent_height == 0);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td0.m_key_image) == "c5680d3735b90871ca5e3d90cd82d6483eed1151b9ab75c2c8c3a7d89e00a5a8");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td1.m_key_image) == "d54cbd435a8d636ad9b01b8d4f3eb13bd0cf1ce98eddf53ab1617f9b763e66c0");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td2.m_key_image) == "6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td0.m_mask) == "0100000000000000000000000000000000000000000000000000000000000000");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td1.m_mask) == "d3997a7b27fa199a377643b88cbd3f20f447496746dabe92d288730ecaeda007");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(td2.m_mask) == "789bafff169ef206aa21219342c69ca52ce1d78d776c10b21d14bdd960fc7703");
|
||||
ASSERT_TRUE(td0.m_amount == 13400845012231);
|
||||
ASSERT_TRUE(td1.m_amount == 1200000000000);
|
||||
ASSERT_TRUE(td2.m_amount == 11066009260865);
|
||||
ASSERT_TRUE(td0.m_rct);
|
||||
ASSERT_TRUE(td1.m_rct);
|
||||
ASSERT_TRUE(td2.m_rct);
|
||||
ASSERT_TRUE(td0.m_key_image_known);
|
||||
ASSERT_TRUE(td1.m_key_image_known);
|
||||
ASSERT_TRUE(td2.m_key_image_known);
|
||||
ASSERT_TRUE(td0.m_pk_index == 0);
|
||||
ASSERT_TRUE(td1.m_pk_index == 0);
|
||||
ASSERT_TRUE(td2.m_pk_index == 0);
|
||||
}
|
||||
|
||||
#define SIGNED_TX_PREFIX "Monero signed tx set\003"
|
||||
TEST(Serialization, portability_signed_tx)
|
||||
{
|
||||
const boost::filesystem::path filename = unit_test::data_dir / "signed_monero_tx";
|
||||
const cryptonote::network_type nettype = cryptonote::TESTNET;
|
||||
std::string s;
|
||||
bool r = epee::file_io_utils::load_file_to_string(filename.string(), s);
|
||||
ASSERT_TRUE(r);
|
||||
const size_t magiclen = strlen(SIGNED_TX_PREFIX);
|
||||
ASSERT_FALSE(strncmp(s.c_str(), SIGNED_TX_PREFIX, magiclen));
|
||||
tools::wallet2::signed_tx_set exported_txs;
|
||||
s = s.substr(magiclen);
|
||||
r = false;
|
||||
try
|
||||
{
|
||||
std::istringstream iss(s);
|
||||
boost::archive::portable_binary_iarchive ar(iss);
|
||||
ar >> exported_txs;
|
||||
r = true;
|
||||
}
|
||||
catch (...)
|
||||
{}
|
||||
ASSERT_TRUE(r);
|
||||
/*
|
||||
fields of tools::wallet2::signed_tx_set to be checked:
|
||||
std::vector<pending_tx> ptx
|
||||
std::vector<crypto::key_image> key_images
|
||||
|
||||
fields of tools::walllet2::pending_tx to be checked:
|
||||
cryptonote::transaction tx // TODO
|
||||
uint64_t dust
|
||||
uint64_t fee
|
||||
bool dust_added_to_fee
|
||||
cryptonote::tx_destination_entry change_dts
|
||||
std::list<size_t> selected_transfers
|
||||
std::string key_images
|
||||
crypto::secret_key tx_key
|
||||
std::vector<cryptonote::tx_destination_entry> dests
|
||||
tx_construction_data construction_data
|
||||
*/
|
||||
// ptx
|
||||
ASSERT_TRUE(exported_txs.ptx.size() == 1);
|
||||
auto& ptx = exported_txs.ptx[0];
|
||||
// ptx.{dust, fee, dust_added_to_fee}
|
||||
ASSERT_TRUE (ptx.dust == 0);
|
||||
ASSERT_TRUE (ptx.fee == 34800487462);
|
||||
ASSERT_FALSE(ptx.dust_added_to_fee);
|
||||
// ptx.change.{amount, addr}
|
||||
ASSERT_TRUE(ptx.change_dts.amount == 9631208773403);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, ptx.change_dts.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk");
|
||||
// ptx.selected_transfers
|
||||
ASSERT_TRUE(ptx.selected_transfers.size() == 1);
|
||||
ASSERT_TRUE(ptx.selected_transfers.front() == 2);
|
||||
// ptx.{key_images, tx_key}
|
||||
ASSERT_TRUE(ptx.key_images == "<6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76> ");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(unwrap(unwrap(ptx.tx_key))) == "0100000000000000000000000000000000000000000000000000000000000000");
|
||||
// ptx.dests
|
||||
ASSERT_TRUE(ptx.dests.size() == 1);
|
||||
ASSERT_TRUE(ptx.dests[0].amount == 1400000000000);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, ptx.dests[0].addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA");
|
||||
// ptx.construction_data
|
||||
auto& tcd = ptx.construction_data;
|
||||
ASSERT_TRUE(tcd.sources.size() == 1);
|
||||
auto& tse = tcd.sources[0];
|
||||
// ptx.construction_data.sources[0].outputs
|
||||
ASSERT_TRUE(tse.outputs.size() == 5);
|
||||
auto& out0 = tse.outputs[0];
|
||||
auto& out1 = tse.outputs[1];
|
||||
auto& out2 = tse.outputs[2];
|
||||
auto& out3 = tse.outputs[3];
|
||||
auto& out4 = tse.outputs[4];
|
||||
ASSERT_TRUE(out0.first == 6295);
|
||||
ASSERT_TRUE(out1.first == 14302);
|
||||
ASSERT_TRUE(out2.first == 17598);
|
||||
ASSERT_TRUE(out3.first == 18671);
|
||||
ASSERT_TRUE(out4.first == 19760);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out0.second) == "e7272cb589954ddeedd20de9411ed57265f154d41f33cec9ff69e5d642e09814096490b0ac85308342acf436cc0270d53abef9dc04c6202f2459e879bfd40ce6");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out1.second) == "c3a9f49d1fe75939cc3feb39871ce0a7366c2879a63faa1a5cf34e65723b120a272ff0c7d84ab8b6ee3528d196450b0e28b3fed276bc2597a2b5b17afb9354ab");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out2.second) == "176e239c8c39000c2275e2f63ed7d55c55e0843524091522bbd3d3b869044969021fad70fc1244115449d4754829ae7c47346342ee5d52a2cdd47dfc351d0ab0");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out3.second) == "ef12d7946302fb064f2ba9df1a73d72233ac74664ed3b370580fa3bdc377542ad93f64898bd95851d6efe0d7bf2dbbea9b7c6b3c57e2c807e7b17d55b4622259");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(out4.second) == "0d8467e16e73d16510452b78823e082e05ee3a63788d40de577cf31eb555f0c8525096cbc88d00a841eed66f3cdb6f0a018e6ce9fb9433ed61afba15cbbebd04");
|
||||
// ptx.construction_data.sources[0].{real_output, real_out_tx_key, real_output_in_tx_index, amount, rct, mask}
|
||||
ASSERT_TRUE(tse.real_output == 4);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.real_out_tx_key) == "4d86c7ba1c285fe4bc1cd7b54ba894fa89fa02fc6b0bbeea67d53251acd14a05");
|
||||
ASSERT_TRUE(tse.real_output_in_tx_index == 1);
|
||||
ASSERT_TRUE(tse.amount == 11066009260865);
|
||||
ASSERT_TRUE(tse.rct);
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(tse.mask) == "789bafff169ef206aa21219342c69ca52ce1d78d776c10b21d14bdd960fc7703");
|
||||
// ptx.construction_data.change_dts
|
||||
ASSERT_TRUE(tcd.change_dts.amount == 9631208773403);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, tcd.change_dts.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk");
|
||||
// ptx.construction_data.splitted_dsts
|
||||
ASSERT_TRUE(tcd.splitted_dsts.size() == 2);
|
||||
auto& splitted_dst0 = tcd.splitted_dsts[0];
|
||||
auto& splitted_dst1 = tcd.splitted_dsts[1];
|
||||
ASSERT_TRUE(splitted_dst0.amount == 1400000000000);
|
||||
ASSERT_TRUE(splitted_dst1.amount == 9631208773403);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst0.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA");
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, splitted_dst1.addr) == "9svHk1wHPo3ULf2AZykghzcye6sitaRE4MaDjPC6uanTHCynHjJHZaiAb922PojE1GexhhRt1LVf5DC43feyrRZMLXQr3mk");
|
||||
// ptx.construction_data.selected_transfers
|
||||
ASSERT_TRUE(tcd.selected_transfers.size() == 1);
|
||||
ASSERT_TRUE(tcd.selected_transfers.front() == 2);
|
||||
// ptx.construction_data.extra
|
||||
ASSERT_TRUE(tcd.extra.size() == 68);
|
||||
// ptx.construction_data.{unlock_time, use_rct}
|
||||
ASSERT_TRUE(tcd.unlock_time == 0);
|
||||
ASSERT_TRUE(tcd.use_rct);
|
||||
// ptx.construction_data.dests
|
||||
ASSERT_TRUE(tcd.dests.size() == 1);
|
||||
auto& dest = tcd.dests[0];
|
||||
ASSERT_TRUE(dest.amount == 1400000000000);
|
||||
ASSERT_TRUE(cryptonote::get_account_address_as_str(nettype, false, dest.addr) == "9xnhrMczQkPeoGi6dyu6BgKAYX4tZsDs6KHCkyTStDBKL4M4pM1gfCR3utmTAcSaKHGa1R5o266FbdnubErmij3oMdLyYgA");
|
||||
// key_images
|
||||
ASSERT_TRUE(exported_txs.key_images.size() == 3);
|
||||
auto& ki0 = exported_txs.key_images[0];
|
||||
auto& ki1 = exported_txs.key_images[1];
|
||||
auto& ki2 = exported_txs.key_images[2];
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(ki0) == "c5680d3735b90871ca5e3d90cd82d6483eed1151b9ab75c2c8c3a7d89e00a5a8");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(ki1) == "d54cbd435a8d636ad9b01b8d4f3eb13bd0cf1ce98eddf53ab1617f9b763e66c0");
|
||||
ASSERT_TRUE(epee::string_tools::pod_to_hex(ki2) == "6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76");
|
||||
}
|
||||
|
||||
TEST(Serialization, difficulty_type)
|
||||
{
|
||||
std::vector<cryptonote::difficulty_type> v_original;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue