diff options
Diffstat (limited to 'src/cryptonote_protocol/cryptonote_protocol_handler.inl')
-rw-r--r-- | src/cryptonote_protocol/cryptonote_protocol_handler.inl | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index 4652bf23e..3e3bb83d0 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -256,6 +256,14 @@ namespace cryptonote if(context.m_state == cryptonote_connection_context::state_synchronizing) return true; + // from v6, if the peer advertises a top block version, reject if it's not what it should be (will only work if no voting) + const uint8_t version = m_core.get_blockchain_storage().get_ideal_hard_fork_version(hshd.current_height - 1); + if (version >= 6 && version != hshd.top_version) + { + LOG_DEBUG_CC(context, "Ignoring due to wrong top version (" << hshd.top_version << ", expected " << version); + return false; + } + uint64_t target = m_core.get_target_blockchain_height(); if (target == 0) target = m_core.get_current_blockchain_height(); @@ -297,6 +305,7 @@ namespace cryptonote bool t_cryptonote_protocol_handler<t_core>::get_payload_sync_data(CORE_SYNC_DATA& hshd) { m_core.get_blockchain_top(hshd.current_height, hshd.top_id); + hshd.top_version = m_core.get_blockchain_storage().get_hard_fork_version(hshd.current_height); hshd.current_height +=1; return true; } @@ -348,6 +357,7 @@ namespace cryptonote { LOG_PRINT_CCONTEXT_L0("Block verification failed, dropping connection"); m_p2p->drop_connection(context); + m_p2p->add_host_fail(context.m_remote_address); m_block_queue.flush_spans(context.m_connection_id); return 1; } @@ -616,6 +626,7 @@ namespace cryptonote { LOG_PRINT_CCONTEXT_L0("Block verification failed, dropping connection"); m_p2p->drop_connection(context); + m_p2p->add_host_fail(context.m_remote_address); m_block_queue.flush_spans(context.m_connection_id); return 1; } |