From d4e8f49fc30d038520b46e08646c8a1f4cee9e1b Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Fri, 9 Jun 2023 16:18:39 +1000 Subject: [PATCH] Move p2p::constants::Network to crate root The `Network` type is not a p2p construct, it is more general, used throughout the codebase to define _which_ Bitcoin network we are operating on. --- bitcoin/examples/handshake.rs | 6 ++--- bitcoin/src/address.rs | 4 ++-- bitcoin/src/bip32.rs | 4 ++-- bitcoin/src/blockdata/constants.rs | 4 ++-- bitcoin/src/blockdata/transaction.rs | 4 ++-- bitcoin/src/consensus/params.rs | 2 +- bitcoin/src/crypto/key.rs | 4 ++-- bitcoin/src/crypto/sighash.rs | 2 +- bitcoin/src/lib.rs | 3 ++- bitcoin/src/{p2p/constants.rs => network.rs} | 23 +++++++------------ bitcoin/src/p2p/message.rs | 2 +- bitcoin/src/p2p/mod.rs | 5 +--- bitcoin/src/psbt/mod.rs | 2 +- .../bitcoin/deserialize_script.rs | 2 +- 14 files changed, 29 insertions(+), 38 deletions(-) rename bitcoin/src/{p2p/constants.rs => network.rs} (94%) diff --git a/bitcoin/examples/handshake.rs b/bitcoin/examples/handshake.rs index d62d1699..9a3bb462 100644 --- a/bitcoin/examples/handshake.rs +++ b/bitcoin/examples/handshake.rs @@ -6,7 +6,7 @@ use std::time::{SystemTime, UNIX_EPOCH}; use std::{env, process}; use bitcoin::consensus::{encode, Decodable}; -use bitcoin::p2p::{self, address, constants, message, message_network}; +use bitcoin::p2p::{self, address, message, message_network}; use bitcoin::secp256k1; use bitcoin::secp256k1::rand::Rng; @@ -29,7 +29,7 @@ fn main() { let version_message = build_version_message(address); let first_message = - message::RawNetworkMessage::new(constants::Network::Bitcoin.magic(), version_message); + message::RawNetworkMessage::new(bitcoin::Network::Bitcoin.magic(), version_message); if let Ok(mut stream) = TcpStream::connect(address) { // Send the message @@ -47,7 +47,7 @@ fn main() { println!("Received version message: {:?}", reply.payload()); let second_message = message::RawNetworkMessage::new( - constants::Network::Bitcoin.magic(), + bitcoin::Network::Bitcoin.magic(), message::NetworkMessage::Verack, ); diff --git a/bitcoin/src/address.rs b/bitcoin/src/address.rs index 41345867..ced80341 100644 --- a/bitcoin/src/address.rs +++ b/bitcoin/src/address.rs @@ -46,7 +46,7 @@ use crate::blockdata::script::witness_version::{self, WitnessVersion}; use crate::blockdata::script::{self, Script, ScriptBuf}; use crate::crypto::key::{PublicKey, TapTweak, TweakedPublicKey, UntweakedPublicKey}; use crate::hash_types::{PubkeyHash, ScriptHash}; -use crate::p2p::constants::Network; +use crate::network::Network; use crate::prelude::*; use crate::taproot::TapNodeHash; @@ -996,7 +996,7 @@ mod tests { use super::*; use crate::crypto::key::PublicKey; - use crate::p2p::constants::Network::{Bitcoin, Testnet}; + use crate::network::Network::{Bitcoin, Testnet}; fn roundtrips(addr: &Address) { assert_eq!( diff --git a/bitcoin/src/bip32.rs b/bitcoin/src/bip32.rs index 79cdc6b8..78be0174 100644 --- a/bitcoin/src/bip32.rs +++ b/bitcoin/src/bip32.rs @@ -23,7 +23,7 @@ use crate::crypto::key::{self, KeyPair, PrivateKey, PublicKey}; use crate::hash_types::XpubIdentifier; use crate::internal_macros::impl_bytes_newtype; use crate::io::Write; -use crate::p2p::constants::Network; +use crate::network::Network; use crate::prelude::*; /// A chain code @@ -866,7 +866,7 @@ mod tests { use super::ChildNumber::{Hardened, Normal}; use super::*; use crate::internal_macros::hex; - use crate::p2p::constants::Network::{self, Bitcoin}; + use crate::network::Network::{self, Bitcoin}; #[test] fn test_parse_derivation_path() { diff --git a/bitcoin/src/blockdata/constants.rs b/bitcoin/src/blockdata/constants.rs index 07a424e6..c97a5692 100644 --- a/bitcoin/src/blockdata/constants.rs +++ b/bitcoin/src/blockdata/constants.rs @@ -20,7 +20,7 @@ use crate::blockdata::script; use crate::blockdata::transaction::{OutPoint, Sequence, Transaction, TxIn, TxOut}; use crate::blockdata::witness::Witness; use crate::internal_macros::impl_bytes_newtype; -use crate::p2p::constants::Network; +use crate::network::Network; use crate::pow::CompactTarget; use crate::Amount; @@ -198,7 +198,7 @@ mod test { use crate::blockdata::locktime::absolute; use crate::consensus::encode::serialize; use crate::internal_macros::hex; - use crate::p2p::constants::Network; + use crate::network::Network; #[test] fn bitcoin_genesis_first_transaction() { diff --git a/bitcoin/src/blockdata/transaction.rs b/bitcoin/src/blockdata/transaction.rs index d3327fc7..ce782d14 100644 --- a/bitcoin/src/blockdata/transaction.rs +++ b/bitcoin/src/blockdata/transaction.rs @@ -68,7 +68,7 @@ impl OutPoint { /// /// ```rust /// use bitcoin::constants::genesis_block; - /// use bitcoin::p2p::constants::Network; + /// use bitcoin::Network; /// /// let block = genesis_block(Network::Bitcoin); /// let tx = &block.txdata[0]; @@ -1508,7 +1508,7 @@ mod tests { #[test] fn test_is_coinbase() { use crate::blockdata::constants; - use crate::p2p::constants::Network; + use crate::network::Network; let genesis = constants::genesis_block(Network::Bitcoin); assert!(genesis.txdata[0].is_coinbase()); diff --git a/bitcoin/src/consensus/params.rs b/bitcoin/src/consensus/params.rs index 36861564..12eb1f5e 100644 --- a/bitcoin/src/consensus/params.rs +++ b/bitcoin/src/consensus/params.rs @@ -6,7 +6,7 @@ //! chains (such as mainnet, testnet). //! -use crate::p2p::constants::Network; +use crate::network::Network; use crate::pow::Work; /// Parameters that influence chain consensus. diff --git a/bitcoin/src/crypto/key.rs b/bitcoin/src/crypto/key.rs index 5e08c7e5..fcfe14e7 100644 --- a/bitcoin/src/crypto/key.rs +++ b/bitcoin/src/crypto/key.rs @@ -18,7 +18,7 @@ pub use secp256k1::{self, constants, KeyPair, Parity, Secp256k1, Verification, X use crate::crypto::ecdsa; use crate::hash_types::{PubkeyHash, WPubkeyHash}; -use crate::p2p::constants::Network; +use crate::network::Network; use crate::prelude::*; use crate::taproot::{TapNodeHash, TapTweakHash}; use crate::{base58, io}; @@ -741,7 +741,7 @@ mod tests { use super::*; use crate::address::Address; use crate::io; - use crate::p2p::constants::Network::{Bitcoin, Testnet}; + use crate::network::Network::{Bitcoin, Testnet}; #[test] fn test_key_derivation() { diff --git a/bitcoin/src/crypto/sighash.rs b/bitcoin/src/crypto/sighash.rs index eb537479..fcefe767 100644 --- a/bitcoin/src/crypto/sighash.rs +++ b/bitcoin/src/crypto/sighash.rs @@ -1120,7 +1120,7 @@ mod tests { use crate::crypto::key::PublicKey; use crate::crypto::sighash::{LegacySighash, TapSighash}; use crate::internal_macros::hex; - use crate::p2p::constants::Network; + use crate::network::Network; use crate::taproot::TapLeafHash; extern crate serde_json; diff --git a/bitcoin/src/lib.rs b/bitcoin/src/lib.rs index 4bcc0783..0665662a 100644 --- a/bitcoin/src/lib.rs +++ b/bitcoin/src/lib.rs @@ -106,6 +106,7 @@ pub(crate) mod crypto; pub mod error; pub mod hash_types; pub mod merkle_tree; +pub mod network; pub mod policy; pub mod pow; pub mod psbt; @@ -146,7 +147,7 @@ pub use crate::hash_types::{ BlockHash, PubkeyHash, ScriptHash, Txid, WPubkeyHash, WScriptHash, Wtxid, }; pub use crate::merkle_tree::MerkleBlock; -pub use crate::p2p::constants::Network; +pub use crate::network::Network; pub use crate::pow::{CompactTarget, Target, Work}; pub use crate::psbt::Psbt; diff --git a/bitcoin/src/p2p/constants.rs b/bitcoin/src/network.rs similarity index 94% rename from bitcoin/src/p2p/constants.rs rename to bitcoin/src/network.rs index 33cd8ab0..9e128d4e 100644 --- a/bitcoin/src/p2p/constants.rs +++ b/bitcoin/src/network.rs @@ -1,22 +1,15 @@ // SPDX-License-Identifier: CC0-1.0 -//! Bitcoin network constants. +//! Bitcoin network. //! -//! This module provides various constants relating to the Bitcoin network -//! protocol, such as protocol versioning and magic header bytes. -//! -//! The [`Network`][1] type implements the [`Decodable`][2] and -//! [`Encodable`][3] traits and encodes the magic bytes of the given -//! network. -//! -//! [1]: enum.Network.html -//! [2]: ../../consensus/encode/trait.Decodable.html -//! [3]: ../../consensus/encode/trait.Encodable.html +//! The term "network" is overloaded, here [`Network`] refers to the specific +//! Bitcoin network we are operating on e.g., signet, regtest. The terms +//! "network" and "chain" are often used interchangeably for this concept. //! //! # Example: encoding a network's magic bytes //! //! ```rust -//! use bitcoin::p2p::constants::Network; +//! use bitcoin::Network; //! use bitcoin::consensus::encode::serialize; //! //! let network = Network::Bitcoin; @@ -130,7 +123,7 @@ impl Network { /// # Examples /// /// ```rust - /// use bitcoin::p2p::constants::Network; + /// use bitcoin::Network; /// use bitcoin::blockdata::constants::ChainHash; /// /// let network = Network::Bitcoin; @@ -143,7 +136,7 @@ impl Network { /// # Examples /// /// ```rust - /// use bitcoin::p2p::constants::Network; + /// use bitcoin::Network; /// use bitcoin::blockdata::constants::ChainHash; /// use std::convert::TryFrom; /// @@ -387,7 +380,7 @@ mod tests { #[derive(Serialize, Deserialize, PartialEq, Debug)] #[serde(crate = "actual_serde")] struct T { - #[serde(with = "crate::p2p::constants::as_core_arg")] + #[serde(with = "crate::network::as_core_arg")] pub network: Network, } diff --git a/bitcoin/src/p2p/message.rs b/bitcoin/src/p2p/message.rs index 3bd5aed4..8b048af2 100644 --- a/bitcoin/src/p2p/message.rs +++ b/bitcoin/src/p2p/message.rs @@ -549,8 +549,8 @@ mod test { use crate::blockdata::transaction::Transaction; use crate::consensus::encode::{deserialize, deserialize_partial, serialize}; use crate::internal_macros::hex; + use crate::network::Network; use crate::p2p::address::{AddrV2, AddrV2Message, Address}; - use crate::p2p::constants::Network; use crate::p2p::message_blockdata::{GetBlocksMessage, GetHeadersMessage, Inventory}; use crate::p2p::message_bloom::{BloomFlags, FilterAdd, FilterLoad}; use crate::p2p::message_compact_blocks::{GetBlockTxn, SendCmpct}; diff --git a/bitcoin/src/p2p/mod.rs b/bitcoin/src/p2p/mod.rs index df6f89ed..f4b7698c 100644 --- a/bitcoin/src/p2p/mod.rs +++ b/bitcoin/src/p2p/mod.rs @@ -5,8 +5,6 @@ //! This module defines support for (de)serialization and network transport //! of Bitcoin data and Bitcoin p2p network messages. -pub mod constants; - #[cfg(feature = "std")] pub mod address; #[cfg(feature = "std")] @@ -33,9 +31,8 @@ use internals::{debug_from_display, write_err}; use crate::consensus::encode::{self, Decodable, Encodable}; use crate::error::impl_std_error; -use crate::io; -use crate::p2p::constants::Network; use crate::prelude::{Borrow, BorrowMut, String, ToOwned}; +use crate::{io, Network}; /// Version of the protocol as appearing in network message headers. /// diff --git a/bitcoin/src/psbt/mod.rs b/bitcoin/src/psbt/mod.rs index 1caa20c6..df9f6c90 100644 --- a/bitcoin/src/psbt/mod.rs +++ b/bitcoin/src/psbt/mod.rs @@ -823,7 +823,7 @@ mod tests { use crate::blockdata::transaction::{OutPoint, Sequence, Transaction, TxIn, TxOut}; use crate::blockdata::witness::Witness; use crate::internal_macros::hex; - use crate::p2p::constants::Network::Bitcoin; + use crate::network::Network::Bitcoin; use crate::psbt::map::{Input, Output}; use crate::psbt::raw; use crate::psbt::serialize::{Deserialize, Serialize}; diff --git a/fuzz/fuzz_targets/bitcoin/deserialize_script.rs b/fuzz/fuzz_targets/bitcoin/deserialize_script.rs index 1cc035d2..a32f01f0 100644 --- a/fuzz/fuzz_targets/bitcoin/deserialize_script.rs +++ b/fuzz/fuzz_targets/bitcoin/deserialize_script.rs @@ -1,7 +1,7 @@ use bitcoin::address::Address; use bitcoin::blockdata::script; use bitcoin::consensus::encode; -use bitcoin::p2p::constants::Network; +use bitcoin::Network; use honggfuzz::fuzz; fn do_test(data: &[u8]) {