Skip to content

Commit a419fc9

Browse files
committed
Merge rust-bitcoin#4565: Remove all p2p dependency from network
cbe04b0 Remove all `p2p` dependency from `network` (rustaceanrob) Pull request description: Motivated by moving the `p2p` module to its own crate. `TryFrom` and `From` are already implement for converting to and from `Network`/`Magic`. The methods related to `Magic` are removed from `Network`, as well as any reference to `p2p` in the documentation, as `bitcoin` would no longer depend on `p2p`. The deser roundtrip test are relocated to `p2p/mod.rs` ACKs for top commit: tcharding: ACK cbe04b0 apoelstra: ACK cbe04b0; successfully ran local tests Tree-SHA512: ac3aa2eef4d78efd719ccc032a4266827faff8c87997111fa0050765b732462e5e5811c8aa923aedba335cbaad9a374fd54dbbe0f4978a1111d0839a5942af7d
2 parents 7ff1823 + cbe04b0 commit a419fc9

File tree

4 files changed

+37
-79
lines changed

4 files changed

+37
-79
lines changed

bitcoin/examples/handshake.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::time::{SystemTime, UNIX_EPOCH};
44
use std::{env, process};
55

66
use bitcoin::consensus::{encode, Decodable};
7-
use bitcoin::p2p::{self, address, message, message_network};
7+
use bitcoin::p2p::{self, address, message, message_network, Magic};
88
use bitcoin::secp256k1::rand::Rng;
99

1010
fn main() {
@@ -26,7 +26,7 @@ fn main() {
2626
let version_message = build_version_message(address);
2727

2828
let first_message =
29-
message::RawNetworkMessage::new(bitcoin::Network::Bitcoin.magic(), version_message);
29+
message::RawNetworkMessage::new(Magic::BITCOIN, version_message);
3030

3131
if let Ok(mut stream) = TcpStream::connect(address) {
3232
// Send the message
@@ -44,7 +44,7 @@ fn main() {
4444
println!("Received version message: {:?}", reply.payload());
4545

4646
let second_message = message::RawNetworkMessage::new(
47-
bitcoin::Network::Bitcoin.magic(),
47+
Magic::BITCOIN,
4848
message::NetworkMessage::Verack,
4949
);
5050

bitcoin/src/network/mod.rs

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,6 @@
55
//! The term "network" is overloaded, here [`Network`] refers to the specific
66
//! Bitcoin network we are operating on e.g., signet, regtest. The terms
77
//! "network" and "chain" are often used interchangeably for this concept.
8-
//!
9-
//! # Example: encoding a network's magic bytes
10-
//!
11-
//! ```rust
12-
//! use bitcoin::Network;
13-
//! use bitcoin::consensus::encode::serialize;
14-
//!
15-
//! let network = Network::Bitcoin;
16-
//! let bytes = serialize(&network.magic());
17-
//!
18-
//! assert_eq!(&bytes[..], &[0xF9, 0xBE, 0xB4, 0xD9]);
19-
//! ```
208
219
pub mod params;
2210

@@ -28,7 +16,6 @@ use internals::write_err;
2816
use serde::{de::Visitor, Deserialize, Deserializer, Serialize, Serializer};
2917

3018
use crate::constants::ChainHash;
31-
use crate::p2p::Magic;
3219
use crate::prelude::{String, ToOwned};
3320

3421
#[rustfmt::skip] // Keep public re-exports separate.
@@ -124,33 +111,6 @@ impl<'de> Deserialize<'de> for Network {
124111
}
125112

126113
impl Network {
127-
/// Constructs a new `Network` from the magic bytes.
128-
///
129-
/// # Examples
130-
///
131-
/// ```rust
132-
/// use bitcoin::p2p::Magic;
133-
/// use bitcoin::Network;
134-
///
135-
/// assert_eq!(Ok(Network::Bitcoin), Network::try_from(Magic::from_bytes([0xF9, 0xBE, 0xB4, 0xD9])));
136-
/// assert_eq!(None, Network::from_magic(Magic::from_bytes([0xFF, 0xFF, 0xFF, 0xFF])));
137-
/// ```
138-
pub fn from_magic(magic: Magic) -> Option<Network> { Network::try_from(magic).ok() }
139-
140-
/// Return the network magic bytes, which should be encoded little-endian
141-
/// at the start of every message
142-
///
143-
/// # Examples
144-
///
145-
/// ```rust
146-
/// use bitcoin::p2p::Magic;
147-
/// use bitcoin::Network;
148-
///
149-
/// let network = Network::Bitcoin;
150-
/// assert_eq!(network.magic(), Magic::from_bytes([0xF9, 0xBE, 0xB4, 0xD9]));
151-
/// ```
152-
pub fn magic(self) -> Magic { Magic::from(self) }
153-
154114
/// Converts a `Network` to its equivalent `bitcoind -chain` argument name.
155115
///
156116
/// ```bash
@@ -363,34 +323,6 @@ impl TryFrom<ChainHash> for Network {
363323
#[cfg(test)]
364324
mod tests {
365325
use super::{Network, TestnetVersion};
366-
use crate::consensus::encode::{deserialize, serialize};
367-
368-
#[test]
369-
fn serialize_deserialize() {
370-
assert_eq!(serialize(&Network::Bitcoin.magic()), &[0xf9, 0xbe, 0xb4, 0xd9]);
371-
assert_eq!(
372-
serialize(&Network::Testnet(TestnetVersion::V3).magic()),
373-
&[0x0b, 0x11, 0x09, 0x07]
374-
);
375-
assert_eq!(
376-
serialize(&Network::Testnet(TestnetVersion::V4).magic()),
377-
&[0x1c, 0x16, 0x3f, 0x28]
378-
);
379-
assert_eq!(serialize(&Network::Signet.magic()), &[0x0a, 0x03, 0xcf, 0x40]);
380-
assert_eq!(serialize(&Network::Regtest.magic()), &[0xfa, 0xbf, 0xb5, 0xda]);
381-
382-
assert_eq!(deserialize(&[0xf9, 0xbe, 0xb4, 0xd9]).ok(), Some(Network::Bitcoin.magic()));
383-
assert_eq!(
384-
deserialize(&[0x0b, 0x11, 0x09, 0x07]).ok(),
385-
Some(Network::Testnet(TestnetVersion::V3).magic())
386-
);
387-
assert_eq!(
388-
deserialize(&[0x1c, 0x16, 0x3f, 0x28]).ok(),
389-
Some(Network::Testnet(TestnetVersion::V4).magic())
390-
);
391-
assert_eq!(deserialize(&[0x0a, 0x03, 0xcf, 0x40]).ok(), Some(Network::Signet.magic()));
392-
assert_eq!(deserialize(&[0xfa, 0xbf, 0xb5, 0xda]).ok(), Some(Network::Regtest.magic()));
393-
}
394326

395327
#[test]
396328
fn string() {

bitcoin/src/network/params.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@
1212
//!
1313
//! ```
1414
//! use bitcoin::network::Params;
15-
//! use bitcoin::{p2p, Script, ScriptBuf, Network, Target};
15+
//! use bitcoin::{Script, ScriptBuf, Network, Target};
1616
//!
1717
//! const POW_TARGET_SPACING: u64 = 120; // Two minutes.
18-
//! const MAGIC: [u8; 4] = [1, 2, 3, 4];
1918
//!
2019
//! pub struct CustomParams {
2120
//! params: Params,
22-
//! magic: [u8; 4],
2321
//! challenge_script: ScriptBuf,
2422
//! }
2523
//!
@@ -34,14 +32,10 @@
3432
//!
3533
//! Self {
3634
//! params,
37-
//! magic: MAGIC,
3835
//! challenge_script,
3936
//! }
4037
//! }
4138
//!
42-
//! /// Returns the custom magic bytes.
43-
//! pub fn magic(&self) -> p2p::Magic { p2p::Magic::from_bytes(self.magic) }
44-
//!
4539
//! /// Returns the custom signet challenge script.
4640
//! pub fn challenge_script(&self) -> &Script { &self.challenge_script }
4741
//! }
@@ -61,7 +55,6 @@
6155
//! # let _ = target.difficulty(signet);
6256
//! #
6357
//! # let custom = CustomParams::new();
64-
//! # let _ = custom.magic();
6558
//! # let _ = custom.challenge_script();
6659
//! # let _ = target.difficulty(custom);
6760
//! # }

bitcoin/src/p2p/mod.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,39 @@ impl std::error::Error for UnknownMagicError {
397397
#[cfg(test)]
398398
mod tests {
399399
use super::*;
400+
use crate::consensus::encode::{deserialize, serialize};
401+
402+
#[test]
403+
fn serialize_deserialize() {
404+
assert_eq!(serialize(&Magic::BITCOIN), &[0xf9, 0xbe, 0xb4, 0xd9]);
405+
let magic: Magic = Network::Bitcoin.into();
406+
assert_eq!(serialize(&magic), &[0xf9, 0xbe, 0xb4, 0xd9]);
407+
assert_eq!(serialize(&Magic::TESTNET3), &[0x0b, 0x11, 0x09, 0x07]);
408+
let magic: Magic = Network::Testnet(TestnetVersion::V3).into();
409+
assert_eq!(serialize(&magic), &[0x0b, 0x11, 0x09, 0x07]);
410+
assert_eq!(serialize(&Magic::TESTNET4), &[0x1c, 0x16, 0x3f, 0x28]);
411+
let magic: Magic = Network::Testnet(TestnetVersion::V4).into();
412+
assert_eq!(serialize(&magic), &[0x1c, 0x16, 0x3f, 0x28]);
413+
assert_eq!(serialize(&Magic::SIGNET), &[0x0a, 0x03, 0xcf, 0x40]);
414+
let magic: Magic = Network::Signet.into();
415+
assert_eq!(serialize(&magic), &[0x0a, 0x03, 0xcf, 0x40]);
416+
assert_eq!(serialize(&Magic::REGTEST), &[0xfa, 0xbf, 0xb5, 0xda]);
417+
let magic: Magic = Network::Regtest.into();
418+
assert_eq!(serialize(&magic), &[0xfa, 0xbf, 0xb5, 0xda]);
419+
420+
assert_eq!(deserialize::<Magic>(&[0xf9, 0xbe, 0xb4, 0xd9]).ok(), Some(Network::Bitcoin.into()));
421+
assert_eq!(
422+
deserialize::<Magic>(&[0x0b, 0x11, 0x09, 0x07]).ok(),
423+
Some(Network::Testnet(TestnetVersion::V3).into())
424+
);
425+
assert_eq!(
426+
deserialize::<Magic>(&[0x1c, 0x16, 0x3f, 0x28]).ok(),
427+
Some(Network::Testnet(TestnetVersion::V4).into())
428+
);
429+
assert_eq!(deserialize::<Magic>(&[0x0a, 0x03, 0xcf, 0x40]).ok(), Some(Network::Signet.into()));
430+
assert_eq!(deserialize::<Magic>(&[0xfa, 0xbf, 0xb5, 0xda]).ok(), Some(Network::Regtest.into()));
431+
}
432+
400433

401434
#[test]
402435
fn service_flags_test() {

0 commit comments

Comments
 (0)