/* * This file is part of the Monero P2Pool * Copyright (c) 2021 SChernykh * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "common.h" #include "pool_block.h" #include "pow_hash.h" #include "side_chain.h" #include "gtest/gtest.h" #include namespace p2pool { TEST(pool_block, deserialize) { PoolBlock b; SideChain sidechain(nullptr, NetworkType::Mainnet, "mainnet test 2"); constexpr uint64_t expeted_consensus_id[HASH_SIZE / sizeof(uint64_t)] = { 0x92680bb5e77eaf22ull, 0x27446c2c6bda99e3ull, 0x008e04a9d40451b2ull, 0x18f90744f09d6eb1ull }; const std::vector& consensus_id = sidechain.consensus_id(); ASSERT_EQ(consensus_id.size(), HASH_SIZE); ASSERT_EQ(memcmp(consensus_id.data(), expeted_consensus_id, HASH_SIZE), 0); std::ifstream f("mainnet_test2_block.dat", std::ios::binary | std::ios::ate); ASSERT_EQ(f.good() && f.is_open(), true); std::vector buf(f.tellg()); f.seekg(0); f.read(reinterpret_cast(buf.data()), buf.size()); ASSERT_EQ(f.good(), true); ASSERT_EQ(b.deserialize(buf.data(), buf.size(), sidechain), 0); ASSERT_EQ(b.m_mainChainData.size(), 5607); ASSERT_EQ(b.m_mainChainHeaderSize, 43); ASSERT_EQ(b.m_mainChainMinerTxSize, 506); ASSERT_EQ(b.m_mainChainOutputsOffset, 54); ASSERT_EQ(b.m_mainChainOutputsBlobSize, 420); ASSERT_EQ(b.m_majorVersion, 14); ASSERT_EQ(b.m_minorVersion, 14); ASSERT_EQ(b.m_timestamp, 1630934403); ASSERT_EQ(b.m_nonce, 2432795907); ASSERT_EQ(b.m_txinGenHeight, 2443466); ASSERT_EQ(b.m_outputs.size(), 11); ASSERT_EQ(b.m_extraNonceSize, 4); ASSERT_EQ(b.m_extraNonce, 28); ASSERT_EQ(b.m_transactions.size(), 159); ASSERT_EQ(b.m_sideChainData.size(), 146); ASSERT_EQ(b.m_uncles.size(), 0); ASSERT_EQ(b.m_sidechainHeight, 53450); ASSERT_EQ(b.m_difficulty.lo, 319296691); ASSERT_EQ(b.m_difficulty.hi, 0); ASSERT_EQ(b.m_cumulativeDifficulty.lo, 12544665764606ull); ASSERT_EQ(b.m_cumulativeDifficulty.hi, 0); ASSERT_EQ(b.m_tmpTxExtra.size(), 0); ASSERT_EQ(b.m_tmpInts.size(), 0); ASSERT_EQ(b.m_depth, 0); ASSERT_EQ(b.m_verified, false); ASSERT_EQ(b.m_invalid, false); ASSERT_EQ(b.m_broadcasted, false); ASSERT_EQ(b.m_wantBroadcast, false); RandomX_Hasher hasher(nullptr); hash seed; { std::stringstream s; s << "c293f04b0f97cf76008c6ce8b0dbd2ba5be6b734de0aec9d1b758a12d7ec6451"; s >> seed; } hasher.set_seed(seed); hash pow_hash; ASSERT_EQ(b.get_pow_hash(&hasher, seed, pow_hash), true); ASSERT_EQ(b.m_difficulty.check_pow(pow_hash), true); std::stringstream s; s << pow_hash; ASSERT_EQ(s.str(), "f76d731c61c9c9b6c3f46be2e60c9478930b49b4455feecd41ecb9420d000000"); } }