use crate::records::memory::network_mapping::structs::{DeleteAddressParams, SignedNodeEdit}; use crate::records::memory::network_mapping::NodeInfo; use crate::records::memory::response_channels::Command; use crate::rpc::read_bytes_from_stream; use crate::rpc::responses::RpcResponse; use crate::sled::Db; use crate::wallets::structures::Wallet; use crate::Arc; use crate::Mutex; use crate::TcpStream; pub async fn delete_network_node( connections_key: &str, stream_locked: Arc>, db: &Db, wallet_key: &str, map: Arc>, ) -> Result<(u32, RpcResponse), String> { // Command 29 uses the same signed node-edit shape as add, but the // payload represents a delete marker for an existing network node. let (uid, _) = read_bytes_from_stream::read_uid_from_stream(connections_key, stream_locked.clone()) .await?; let address_bytes = read_bytes_from_stream::read_short_address_from_stream( connections_key, stream_locked.clone(), ) .await?; let address = Wallet::bytes_to_short_address(&address_bytes) .ok_or_else(|| "error: Invalid short address bytes".to_string())?; let ip = read_bytes_from_stream::read_ip_from_stream(connections_key, stream_locked.clone()).await?; let deleted_by = read_bytes_from_stream::read_wallet_from_stream(connections_key, stream_locked.clone()) .await?; let deleted_timestamp = read_bytes_from_stream::read_u64_from_stream(connections_key, stream_locked.clone()) .await?; let deleted_signature = read_bytes_from_stream::read_signature_from_stream(connections_key, stream_locked.clone()) .await?; let remote_ip = read_bytes_from_stream::read_caller_ip(stream_locked).await?; // NodeInfo handles validating the signer and applying the delete // metadata to the network map. let result = NodeInfo::delete_address(DeleteAddressParams { map, edit: SignedNodeEdit { address, ip, modified_by: deleted_by, modified_timestamp: deleted_timestamp, modified_signature: deleted_signature, }, remote_ip, db: db.clone(), wallet_key: wallet_key.to_string(), connections_key: connections_key.to_string(), }) .await; Ok((uid, result)) }