From dc81264fbcc8703d1b86320688fa16a01f554b08 Mon Sep 17 00:00:00 2001 From: rustaceanrob Date: Mon, 1 Sep 2025 13:06:12 +0100 Subject: [PATCH] traffic: Remove the use of `bip324::serde` To prepare for removing `bitcoin` as a dependency, we can get a jump by removing the use of `bip324::serde` in the test suite. Understandable if it is too weird to depend on specific commits in the test suite, but throwing it up because it is not a horribly complicated change. --- traffic/Cargo.toml | 3 +- traffic/tests/bitcoin_integration.rs | 59 +++++++++++++++------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/traffic/Cargo.toml b/traffic/Cargo.toml index 443e8c9..d6727ed 100644 --- a/traffic/Cargo.toml +++ b/traffic/Cargo.toml @@ -19,5 +19,6 @@ tokio = { version = "1", features = ["sync", "time", "rt", "macros"], optional = [dev-dependencies] bitcoind = { package = "corepc-node", version = "0.7.1", default-features = false, features = ["26_0","download"] } -bitcoin = { version = "0.32.4" } +bitcoin = { git = "https://github.com/rust-bitcoin/rust-bitcoin", rev = "16cc257c3695dea0e7301a5fa9cab44b8ed60598" } +p2p = { package = "bitcoin-p2p-messages", git = "https://github.com/rust-bitcoin/rust-bitcoin", rev = "16cc257c3695dea0e7301a5fa9cab44b8ed60598" } tokio = { version = "1", features = ["sync", "time", "rt", "macros", "net", "io-util"] } diff --git a/traffic/tests/bitcoin_integration.rs b/traffic/tests/bitcoin_integration.rs index 2c03c91..0e4c6f9 100644 --- a/traffic/tests/bitcoin_integration.rs +++ b/traffic/tests/bitcoin_integration.rs @@ -6,18 +6,19 @@ const PORT: u16 = 18444; #[test] fn sync_protocol_with_traffic_shaping() { + use bip324::io::Payload; + use bip324_traffic::{io::ShapedProtocol, DecoyStrategy, PaddingStrategy, TrafficConfig}; + use bitcoin::consensus::{deserialize, serialize}; + use p2p::{ + message::{NetworkMessage, V2NetworkMessage}, + message_network::{UserAgent, VersionMessage}, + Address, ProtocolVersion, ServiceFlags, + }; use std::{ net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream}, time::{SystemTime, UNIX_EPOCH}, }; - use bip324::{ - io::Payload, - serde::{deserialize, serialize, NetworkMessage}, - }; - use bip324_traffic::{io::ShapedProtocol, DecoyStrategy, PaddingStrategy, TrafficConfig}; - use bitcoin::p2p::{message_network::VersionMessage, Address, ServiceFlags}; - let bitcoind = regtest_process(); let stream = TcpStream::connect(bitcoind.params.p2p_socket.unwrap()).unwrap(); @@ -50,13 +51,13 @@ fn sync_protocol_with_traffic_shaping() { let ip = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), PORT); let from_and_recv = Address::new(&ip, ServiceFlags::NONE); let msg = VersionMessage { - version: 70015, + version: ProtocolVersion::INVALID_CB_NO_BAN_VERSION, services: ServiceFlags::NONE, timestamp: now as i64, receiver: from_and_recv.clone(), sender: from_and_recv, nonce: 1, - user_agent: "BIP-324 Traffic Shaping Test".to_string(), + user_agent: UserAgent::from_nonstandard("BIP-324 Traffic Shaping Test"), start_height: 0, relay: false, }; @@ -65,26 +66,26 @@ fn sync_protocol_with_traffic_shaping() { let version_message = NetworkMessage::Version(msg); println!("Sending version message with traffic shaping"); protocol - .write(&Payload::genuine(serialize(version_message))) + .write(&Payload::genuine(serialize(&version_message))) .unwrap(); // Read version response println!("Reading version response"); let response = protocol.read().unwrap(); - let response_message: NetworkMessage = deserialize(response.contents()).unwrap(); + let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap(); assert_eq!(response_message.cmd(), "version"); // Send verack let verack_message = NetworkMessage::Verack; println!("Sending verack with traffic shaping"); protocol - .write(&Payload::genuine(serialize(verack_message))) + .write(&Payload::genuine(serialize(&verack_message))) .unwrap(); // Read verack response println!("Reading verack response"); let response = protocol.read().unwrap(); - let response_message: NetworkMessage = deserialize(response.contents()).unwrap(); + let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap(); assert_eq!(response_message.cmd(), "verack"); // Exchange a few ping/pong messages to verify the connection remains stable @@ -92,13 +93,13 @@ fn sync_protocol_with_traffic_shaping() { let ping_message = NetworkMessage::Ping(i); println!("Sending ping {i} with traffic shaping"); protocol - .write(&Payload::genuine(serialize(ping_message))) + .write(&Payload::genuine(serialize(&ping_message))) .unwrap(); // Read until we get a pong (might get other messages) loop { let response = protocol.read().unwrap(); - let response_message: NetworkMessage = deserialize(response.contents()).unwrap(); + let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap(); if response_message.cmd() == "pong" { println!("Received pong {i}"); break; @@ -122,12 +123,14 @@ async fn async_protocol_with_traffic_shaping() { time::{SystemTime, UNIX_EPOCH}, }; - use bip324::{ - io::Payload, - serde::{deserialize, serialize, NetworkMessage}, - }; + use bip324::io::Payload; use bip324_traffic::{futures::ShapedProtocol, DecoyStrategy, PaddingStrategy, TrafficConfig}; - use bitcoin::p2p::{message_network::VersionMessage, Address, ServiceFlags}; + use bitcoin::consensus::{deserialize, serialize}; + use p2p::{ + message::{NetworkMessage, V2NetworkMessage}, + message_network::{UserAgent, VersionMessage}, + Address, ProtocolVersion, ServiceFlags, + }; use tokio::net::TcpStream; let bitcoind = regtest_process(); @@ -165,13 +168,13 @@ async fn async_protocol_with_traffic_shaping() { let ip = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), PORT); let from_and_recv = Address::new(&ip, ServiceFlags::NONE); let msg = VersionMessage { - version: 70015, + version: ProtocolVersion::INVALID_CB_NO_BAN_VERSION, services: ServiceFlags::NONE, timestamp: now as i64, receiver: from_and_recv.clone(), sender: from_and_recv, nonce: 1, - user_agent: "BIP-324 Async Traffic Shaping Test".to_string(), + user_agent: UserAgent::from_nonstandard("BIP-324 Async Traffic Shaping Test"), start_height: 0, relay: false, }; @@ -180,28 +183,28 @@ async fn async_protocol_with_traffic_shaping() { let version_message = NetworkMessage::Version(msg); println!("Sending version message with async traffic shaping"); protocol - .write(&Payload::genuine(serialize(version_message))) + .write(&Payload::genuine(serialize(&version_message))) .await .unwrap(); // Read version response println!("Reading version response"); let response = protocol.read().await.unwrap(); - let response_message: NetworkMessage = deserialize(response.contents()).unwrap(); + let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap(); assert_eq!(response_message.cmd(), "version"); // Send verack let verack_message = NetworkMessage::Verack; println!("Sending verack with async traffic shaping"); protocol - .write(&Payload::genuine(serialize(verack_message))) + .write(&Payload::genuine(serialize(&verack_message))) .await .unwrap(); // Read verack response println!("Reading verack response"); let response = protocol.read().await.unwrap(); - let response_message: NetworkMessage = deserialize(response.contents()).unwrap(); + let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap(); assert_eq!(response_message.cmd(), "verack"); // Exchange a few ping/pong messages to verify the connection remains stable @@ -209,14 +212,14 @@ async fn async_protocol_with_traffic_shaping() { let ping_message = NetworkMessage::Ping(i); println!("Sending async ping {i} with traffic shaping"); protocol - .write(&Payload::genuine(serialize(ping_message))) + .write(&Payload::genuine(serialize(&ping_message))) .await .unwrap(); // Read until we get a pong (might get other messages) loop { let response = protocol.read().await.unwrap(); - let response_message: NetworkMessage = deserialize(response.contents()).unwrap(); + let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap(); if response_message.cmd() == "pong" { println!("Received async pong {i}"); break;