diff --git a/.github/workflows/test-sync.yml b/.github/workflows/test-sync.yml index 8b61915..10f39c3 100644 --- a/.github/workflows/test-sync.yml +++ b/.github/workflows/test-sync.yml @@ -288,7 +288,7 @@ jobs: sync-test-macos: - timeout-minutes: 60 + timeout-minutes: 120 runs-on: ${{ matrix.config.os }} strategy: diff --git a/src/block_template.cpp b/src/block_template.cpp index 5b7b711..b390d64 100644 --- a/src/block_template.cpp +++ b/src/block_template.cpp @@ -912,8 +912,6 @@ int BlockTemplate::create_miner_tx(const MinerData& data, const std::vectorm_outputs.clear(); m_poolBlockTemplate->m_outputs.reserve(num_outputs); - const uint8_t tx_type = m_poolBlockTemplate->get_tx_type(); - uint64_t reward_amounts_weight = 0; for (size_t i = 0; i < num_outputs; ++i) { writeVarint(m_rewards[i], [this, &reward_amounts_weight](uint8_t b) @@ -921,7 +919,7 @@ int BlockTemplate::create_miner_tx(const MinerData& data, const std::vectorm_outputs.emplace_back(m_rewards[i], eph_public_key, view_tag); } - if (tx_type == TXOUT_TO_TAGGED_KEY) { - m_minerTx.emplace_back(view_tag); - } + m_minerTx.emplace_back(view_tag); } if (dry_run) { diff --git a/src/common.h b/src/common.h index bade8bd..4e14c40 100644 --- a/src/common.h +++ b/src/common.h @@ -117,7 +117,6 @@ extern "C" void __nss_module_disable_loading(); namespace p2pool { constexpr size_t HASH_SIZE = 32; -constexpr uint8_t HARDFORK_VIEW_TAGS_VERSION = 15; constexpr uint8_t HARDFORK_SUPPORTED_VERSION = 16; constexpr uint8_t MINER_REWARD_UNLOCK_TIME = 60; constexpr uint8_t NONCE_SIZE = 4; @@ -125,7 +124,6 @@ constexpr uint8_t EXTRA_NONCE_SIZE = 4; constexpr uint8_t EXTRA_NONCE_MAX_SIZE = EXTRA_NONCE_SIZE + 10; constexpr uint8_t TX_VERSION = 2; constexpr uint8_t TXIN_GEN = 0xFF; -constexpr uint8_t TXOUT_TO_KEY = 2; constexpr uint8_t TXOUT_TO_TAGGED_KEY = 3; constexpr uint8_t TX_EXTRA_TAG_PUBKEY = 1; constexpr uint8_t TX_EXTRA_NONCE = 2; diff --git a/src/pool_block.cpp b/src/pool_block.cpp index 61a4a97..b8f38f8 100644 --- a/src/pool_block.cpp +++ b/src/pool_block.cpp @@ -171,16 +171,11 @@ std::vector PoolBlock::serialize_mainchain_data(size_t* header_size, si writeVarint(m_outputs.size(), data); - const uint8_t tx_type = get_tx_type(); - for (const TxOutput& output : m_outputs) { writeVarint(output.m_reward, data); - data.push_back(tx_type); + data.push_back(TXOUT_TO_TAGGED_KEY); data.insert(data.end(), output.m_ephPublicKey.h, output.m_ephPublicKey.h + HASH_SIZE); - - if (tx_type == TXOUT_TO_TAGGED_KEY) { - data.push_back(static_cast(output.m_viewTag)); - } + data.push_back(static_cast(output.m_viewTag)); } if (outputs_blob_size) { @@ -397,24 +392,14 @@ bool PoolBlock::get_pow_hash(RandomX_Hasher_Base* hasher, uint64_t height, const uint64_t PoolBlock::get_payout(const Wallet& w) const { - const uint8_t tx_type = get_tx_type(); - for (size_t i = 0, n = m_outputs.size(); i < n; ++i) { const TxOutput& out = m_outputs[i]; hash eph_public_key; - if (tx_type == TXOUT_TO_TAGGED_KEY) { - uint8_t view_tag; - const uint8_t expected_view_tag = out.m_viewTag; - if (w.get_eph_public_key(m_txkeySec, i, eph_public_key, view_tag, &expected_view_tag) && (eph_public_key == out.m_ephPublicKey)) { - return out.m_reward; - } - } - else { - uint8_t view_tag; - if (w.get_eph_public_key(m_txkeySec, i, eph_public_key, view_tag) && (eph_public_key == out.m_ephPublicKey)) { - return out.m_reward; - } + uint8_t view_tag; + const uint8_t expected_view_tag = out.m_viewTag; + if (w.get_eph_public_key(m_txkeySec, i, eph_public_key, view_tag, &expected_view_tag) && (eph_public_key == out.m_ephPublicKey)) { + return out.m_reward; } } diff --git a/src/pool_block.h b/src/pool_block.h index 483ee0d..f474648 100644 --- a/src/pool_block.h +++ b/src/pool_block.h @@ -194,10 +194,6 @@ struct PoolBlock uint64_t get_payout(const Wallet& w) const; - // Both tx types are allowed by Monero consensus during v15 because it needs to process pre-fork mempool transactions, - // but P2Pool can switch to using only TXOUT_TO_TAGGED_KEY for miner payouts starting from v15 - FORCEINLINE uint8_t get_tx_type() const { return (m_majorVersion < HARDFORK_VIEW_TAGS_VERSION) ? TXOUT_TO_KEY : TXOUT_TO_TAGGED_KEY; } - typedef std::array full_id; FORCEINLINE full_id get_full_id() const diff --git a/src/pool_block_parser.inl b/src/pool_block_parser.inl index 3b31f52..3c2e4cf 100644 --- a/src/pool_block_parser.inl +++ b/src/pool_block_parser.inl @@ -108,8 +108,6 @@ int PoolBlock::deserialize(const uint8_t* data, size_t size, const SideChain& si m_outputs.resize(num_outputs); m_outputs.shrink_to_fit(); - const uint8_t expected_tx_type = get_tx_type(); - for (uint64_t i = 0; i < num_outputs; ++i) { TxOutput& t = m_outputs[i]; @@ -124,15 +122,13 @@ int PoolBlock::deserialize(const uint8_t* data, size_t size, const SideChain& si t.m_reward = reward; total_reward += reward; - EXPECT_BYTE(expected_tx_type); + EXPECT_BYTE(TXOUT_TO_TAGGED_KEY); READ_BUF(t.m_ephPublicKey.h, HASH_SIZE); - if (expected_tx_type == TXOUT_TO_TAGGED_KEY) { - uint8_t view_tag; - READ_BYTE(view_tag); - t.m_viewTag = view_tag; - } + uint8_t view_tag; + READ_BYTE(view_tag); + t.m_viewTag = view_tag; } outputs_blob_size = static_cast(data - data_begin) - outputs_offset; diff --git a/src/side_chain.cpp b/src/side_chain.cpp index ba9ac3e..b14687f 100644 --- a/src/side_chain.cpp +++ b/src/side_chain.cpp @@ -835,16 +835,11 @@ bool SideChain::get_outputs_blob(PoolBlock* block, uint64_t total_reward, std::v blob.reserve(n * 39 + 64); writeVarint(n, blob); - const uint8_t tx_type = b->get_tx_type(); - for (const PoolBlock::TxOutput& output : b->m_outputs) { writeVarint(output.m_reward, blob); - blob.emplace_back(tx_type); + blob.emplace_back(TXOUT_TO_TAGGED_KEY); blob.insert(blob.end(), output.m_ephPublicKey.h, output.m_ephPublicKey.h + HASH_SIZE); - - if (tx_type == TXOUT_TO_TAGGED_KEY) { - blob.emplace_back(static_cast(output.m_viewTag)); - } + blob.emplace_back(static_cast(output.m_viewTag)); } block->m_outputs = b->m_outputs; @@ -895,8 +890,6 @@ bool SideChain::get_outputs_blob(PoolBlock* block, uint64_t total_reward, std::v block->m_outputs.clear(); block->m_outputs.reserve(n); - const uint8_t tx_type = block->get_tx_type(); - hash eph_public_key; for (size_t i = 0; i < n; ++i) { // stop helper jobs when they meet with current thread @@ -908,7 +901,7 @@ bool SideChain::get_outputs_blob(PoolBlock* block, uint64_t total_reward, std::v writeVarint(tmpRewards[i], blob); - blob.emplace_back(tx_type); + blob.emplace_back(TXOUT_TO_TAGGED_KEY); uint8_t view_tag; if (!data->tmpShares[i].m_wallet->get_eph_public_key(data->txkeySec, i, eph_public_key, view_tag)) { @@ -916,9 +909,7 @@ bool SideChain::get_outputs_blob(PoolBlock* block, uint64_t total_reward, std::v } blob.insert(blob.end(), eph_public_key.h, eph_public_key.h + HASH_SIZE); - if (tx_type == TXOUT_TO_TAGGED_KEY) { - blob.emplace_back(view_tag); - } + blob.emplace_back(view_tag); block->m_outputs.emplace_back(tmpRewards[i], eph_public_key, view_tag); } @@ -1090,23 +1081,14 @@ double SideChain::get_reward_share(const Wallet& w) const const PoolBlock* tip = m_chainTip; if (tip) { - const uint8_t tx_type = tip->get_tx_type(); hash eph_public_key; for (size_t i = 0, n = tip->m_outputs.size(); i < n; ++i) { const PoolBlock::TxOutput& out = tip->m_outputs[i]; if (!reward) { - if (tx_type == TXOUT_TO_TAGGED_KEY) { - uint8_t view_tag; - const uint8_t expected_view_tag = out.m_viewTag; - if (w.get_eph_public_key(tip->m_txkeySec, i, eph_public_key, view_tag, &expected_view_tag) && (out.m_ephPublicKey == eph_public_key)) { - reward = out.m_reward; - } - } - else { - uint8_t view_tag; - if (w.get_eph_public_key(tip->m_txkeySec, i, eph_public_key, view_tag) && (out.m_ephPublicKey == eph_public_key)) { - reward = out.m_reward; - } + uint8_t view_tag; + const uint8_t expected_view_tag = out.m_viewTag; + if (w.get_eph_public_key(tip->m_txkeySec, i, eph_public_key, view_tag, &expected_view_tag) && (out.m_ephPublicKey == eph_public_key)) { + reward = out.m_reward; } } total_reward += out.m_reward; @@ -1750,8 +1732,6 @@ void SideChain::verify(PoolBlock* block) return; } - const uint8_t tx_type = block->get_tx_type(); - for (size_t i = 0, n = rewards.size(); i < n; ++i) { const PoolBlock::TxOutput& out = block->m_outputs[i]; @@ -1775,7 +1755,7 @@ void SideChain::verify(PoolBlock* block) return; } - if ((tx_type == TXOUT_TO_TAGGED_KEY) && (out.m_viewTag != view_tag)) { + if (out.m_viewTag != view_tag) { LOGWARN(3, "block at height = " << block->m_sidechainHeight << ", id = " << block->m_sidechainId << ", mainchain height = " << block->m_txinGenHeight <<