From 38dabfa27f28215e8b1de81e5cd917390235a20b Mon Sep 17 00:00:00 2001 From: viraladmin <00purple@gmail.com> Date: Thu, 11 Jun 2026 15:43:48 -0600 Subject: [PATCH] bug fixes --- src/records/memory/network_mapping/add.rs | 36 +++++++++++++---------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/records/memory/network_mapping/add.rs b/src/records/memory/network_mapping/add.rs index a929fe8..f79b4b6 100644 --- a/src/records/memory/network_mapping/add.rs +++ b/src/records/memory/network_mapping/add.rs @@ -167,6 +167,12 @@ impl NodeInfo { match streams { streams if !streams.is_empty() => { for (peer_key, unlocked_stream) in streams { + let Some((peer_ip, _)) = peer_key.rsplit_once(':') else { + continue; + }; + if !remote_ip.is_empty() && peer_ip == remote_ip { + continue; + } let hashmap_key = reserve_transient_entry_with_context( map.clone(), Some(message_type), @@ -185,12 +191,6 @@ impl NodeInfo { for monitor in monitor_bytes.iter().take(monitor_count as usize) { message.extend_from_slice(monitor); } - let Some((peer_ip, _)) = peer_key.rsplit_once(':') else { - continue; - }; - if !remote_ip.is_empty() && peer_ip == remote_ip { - continue; - } RpcResponse::send_raw(&unlocked_stream, Some(&peer_key), &message).await; } } @@ -255,7 +255,7 @@ impl NodeInfo { } let mut penalize_duplicate_ip = false; - let mut accepted_existing_node = false; + let mut state_changed = false; { let mut address_map = ADDRESS_MAP.lock().await; @@ -309,16 +309,18 @@ impl NodeInfo { existing_node.monitoring = monitors.clone(); if existing_node.deleted_timestamp > 0 { if existing_node.ip == edit.ip { + existing_node.added_by = edit.modified_by.clone(); + existing_node.added_timestamp = edit.modified_timestamp; + existing_node.added_signature = edit.modified_signature.clone(); + existing_node.blocks_mined = blocks_mined; existing_node.deleted_timestamp = 0_u64; existing_node.deleted_block = 0_u32; - drop(address_map); - Self::persist_recovery_snapshot("node revive").await; - return RpcResponse::Binary(b"Success".to_vec()); + state_changed = true; } else { address_map.remove(&edit.address); } } else { - if edit.modified_timestamp < existing_node.added_timestamp { + if edit.modified_timestamp > existing_node.added_timestamp { *existing_node = NodeInfo::new( edit.ip.clone(), blocks_mined, @@ -326,12 +328,13 @@ impl NodeInfo { edit.modified_timestamp, edit.modified_signature.clone(), ); + existing_node.monitoring = monitors.clone(); + state_changed = true; } - accepted_existing_node = true; } } - if !accepted_existing_node { + if !address_map.contains_key(&edit.address) { if let Some(existing_node) = address_map.values_mut().find(|node| node.ip == edit.ip) { if existing_node.deleted_timestamp == 0 && edit.ip != GENESIS_IP { penalize_duplicate_ip = true; @@ -355,6 +358,7 @@ impl NodeInfo { node }, ); + state_changed = true; } } } @@ -373,9 +377,11 @@ impl NodeInfo { return RpcResponse::Binary(b"Error: Ip Already exists.".to_vec()); } - Self::persist_recovery_snapshot("node add").await; + if state_changed { + Self::persist_recovery_snapshot("node add").await; + } - if !remote_ip.is_empty() { + if state_changed && !remote_ip.is_empty() { let broadcast_map = map.clone(); let broadcast_edit = edit.clone(); let broadcast_remote_ip = remote_ip.clone();