From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Wed, 29 Apr 2020 18:49:39 +0000 (+0000) Subject: Merge pull request #590 from jkczyz/2020-04-feature-flags X-Git-Tag: v0.0.12~69 X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=rust-lightning;a=commitdiff_plain;h=9098240e341cf09578819cdf1d2950303478b137;hp=ee27e8432ac13cdff5bc2d2db3245691facc2083 Merge pull request #590 from jkczyz/2020-04-feature-flags Features module improvements --- diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 5e3197f8..115f3e8a 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -19,11 +19,9 @@ stdin_fuzz = [] [dependencies] afl = { version = "0.4", optional = true } lightning = { path = "../lightning", features = ["fuzztarget"] } -bitcoin = { version = "0.21", features = ["fuzztarget"] } -bitcoin_hashes = { version = "0.7", features = ["fuzztarget"] } +bitcoin = { version = "0.23", features = ["fuzztarget"] } hex = "0.3" honggfuzz = { version = "0.5", optional = true } -secp256k1 = { version = "0.15", features=["fuzztarget"] } libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git", optional = true } [build-dependencies] diff --git a/fuzz/src/chanmon_consistency.rs b/fuzz/src/chanmon_consistency.rs index 8603458e..135249f7 100644 --- a/fuzz/src/chanmon_consistency.rs +++ b/fuzz/src/chanmon_consistency.rs @@ -16,10 +16,9 @@ use bitcoin::blockdata::script::{Builder, Script}; use bitcoin::blockdata::opcodes; use bitcoin::network::constants::Network; -use bitcoin_hashes::Hash as TraitImport; -use bitcoin_hashes::hash160::Hash as Hash160; -use bitcoin_hashes::sha256::Hash as Sha256; -use bitcoin_hashes::sha256d::Hash as Sha256d; +use bitcoin::hashes::Hash as TraitImport; +use bitcoin::hashes::sha256::Hash as Sha256; +use bitcoin::hash_types::{BlockHash, WPubkeyHash}; use lightning::chain::chaininterface; use lightning::chain::transaction::OutPoint; @@ -40,8 +39,8 @@ use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer}; use utils::test_logger; -use secp256k1::key::{PublicKey,SecretKey}; -use secp256k1::Secp256k1; +use bitcoin::secp256k1::key::{PublicKey,SecretKey}; +use bitcoin::secp256k1::Secp256k1; use std::mem; use std::cmp::Ordering; @@ -114,7 +113,7 @@ impl channelmonitor::ManyChannelMonitor for TestChannelMon hash_map::Entry::Occupied(entry) => entry, hash_map::Entry::Vacant(_) => panic!("Didn't have monitor on update call"), }; - let mut deserialized_monitor = <(Sha256d, channelmonitor::ChannelMonitor)>:: + let mut deserialized_monitor = <(BlockHash, channelmonitor::ChannelMonitor)>:: read(&mut Cursor::new(&map_entry.get().1), Arc::clone(&self.logger)).unwrap().1; deserialized_monitor.update_monitor(update.clone(), &&TestBroadcaster {}).unwrap(); let mut ser = VecWriter(Vec::new()); @@ -144,7 +143,7 @@ impl KeysInterface for KeyProvider { fn get_destination_script(&self) -> Script { let secp_ctx = Secp256k1::signing_only(); let channel_monitor_claim_key = SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, self.node_id]).unwrap(); - let our_channel_monitor_claim_key_hash = Hash160::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize()); + let our_channel_monitor_claim_key_hash = WPubkeyHash::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize()); Builder::new().push_opcode(opcodes::all::OP_PUSHBYTES_0).push_slice(&our_channel_monitor_claim_key_hash[..]).into_script() } @@ -215,7 +214,7 @@ pub fn do_test(data: &[u8], out: Out) { let mut monitors = HashMap::new(); let mut old_monitors = $old_monitors.latest_monitors.lock().unwrap(); for (outpoint, (update_id, monitor_ser)) in old_monitors.drain() { - monitors.insert(outpoint, <(Sha256d, ChannelMonitor)>::read(&mut Cursor::new(&monitor_ser), Arc::clone(&logger)).expect("Failed to read monitor").1); + monitors.insert(outpoint, <(BlockHash, ChannelMonitor)>::read(&mut Cursor::new(&monitor_ser), Arc::clone(&logger)).expect("Failed to read monitor").1); monitor.latest_monitors.lock().unwrap().insert(outpoint, (update_id, monitor_ser)); } let mut monitor_refs = HashMap::new(); @@ -233,7 +232,7 @@ pub fn do_test(data: &[u8], out: Out) { channel_monitors: &mut monitor_refs, }; - (<(Sha256d, ChannelManager, Arc, Arc, Arc>)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, monitor) + (<(BlockHash, ChannelManager, Arc, Arc, Arc>)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, monitor) } } } diff --git a/fuzz/src/chanmon_deser.rs b/fuzz/src/chanmon_deser.rs index abff1319..52caf36e 100644 --- a/fuzz/src/chanmon_deser.rs +++ b/fuzz/src/chanmon_deser.rs @@ -1,7 +1,7 @@ // This file is auto-generated by gen_target.sh based on msg_target_template.txt // To modify it, modify msg_target_template.txt and run gen_target.sh instead. -use bitcoin_hashes::sha256d::Hash as Sha256dHash; +use bitcoin::hash_types::BlockHash; use lightning::util::enforcing_trait_impls::EnforcingChannelKeys; use lightning::ln::channelmonitor; @@ -26,10 +26,10 @@ impl Writer for VecWriter { #[inline] pub fn do_test(data: &[u8], out: Out) { let logger = Arc::new(test_logger::TestLogger::new("".to_owned(), out)); - if let Ok((latest_block_hash, monitor)) = <(Sha256dHash, channelmonitor::ChannelMonitor)>::read(&mut Cursor::new(data), logger.clone()) { + if let Ok((latest_block_hash, monitor)) = <(BlockHash, channelmonitor::ChannelMonitor)>::read(&mut Cursor::new(data), logger.clone()) { let mut w = VecWriter(Vec::new()); monitor.write_for_disk(&mut w).unwrap(); - let deserialized_copy = <(Sha256dHash, channelmonitor::ChannelMonitor)>::read(&mut Cursor::new(&w.0), logger.clone()).unwrap(); + let deserialized_copy = <(BlockHash, channelmonitor::ChannelMonitor)>::read(&mut Cursor::new(&w.0), logger.clone()).unwrap(); assert!(latest_block_hash == deserialized_copy.0); assert!(monitor == deserialized_copy.1); } diff --git a/fuzz/src/full_stack.rs b/fuzz/src/full_stack.rs index 76953548..d8d4abf9 100644 --- a/fuzz/src/full_stack.rs +++ b/fuzz/src/full_stack.rs @@ -12,11 +12,10 @@ use bitcoin::consensus::encode::deserialize; use bitcoin::network::constants::Network; use bitcoin::util::hash::BitcoinHash; -use bitcoin_hashes::Hash as TraitImport; -use bitcoin_hashes::HashEngine as TraitImportEngine; -use bitcoin_hashes::sha256::Hash as Sha256; -use bitcoin_hashes::hash160::Hash as Hash160; -use bitcoin_hashes::sha256d::Hash as Sha256dHash; +use bitcoin::hashes::Hash as TraitImport; +use bitcoin::hashes::HashEngine as TraitImportEngine; +use bitcoin::hashes::sha256::Hash as Sha256; +use bitcoin::hash_types::{Txid, BlockHash, WPubkeyHash}; use lightning::chain::chaininterface::{BroadcasterInterface,ConfirmationTarget,ChainListener,FeeEstimator,ChainWatchInterfaceUtil}; use lightning::chain::transaction::OutPoint; @@ -32,13 +31,12 @@ use lightning::util::config::UserConfig; use utils::test_logger; -use secp256k1::key::{PublicKey,SecretKey}; -use secp256k1::Secp256k1; +use bitcoin::secp256k1::key::{PublicKey,SecretKey}; +use bitcoin::secp256k1::Secp256k1; use std::cell::RefCell; use std::collections::{HashMap, hash_map}; use std::cmp; -use std::hash::Hash; use std::sync::Arc; use std::sync::atomic::{AtomicU64,AtomicUsize,Ordering}; @@ -129,7 +127,7 @@ impl<'a> PartialEq for Peer<'a> { } } impl<'a> Eq for Peer<'a> {} -impl<'a> Hash for Peer<'a> { +impl<'a> std::hash::Hash for Peer<'a> { fn hash(&self, h: &mut H) { self.id.hash(h) } @@ -142,8 +140,8 @@ struct MoneyLossDetector<'a> { peers: &'a RefCell<[bool; 256]>, funding_txn: Vec, - txids_confirmed: HashMap, - header_hashes: Vec, + txids_confirmed: HashMap, + header_hashes: Vec, height: usize, max_height: usize, blocks_connected: u32, @@ -241,7 +239,7 @@ impl KeysInterface for KeyProvider { fn get_destination_script(&self) -> Script { let secp_ctx = Secp256k1::signing_only(); let channel_monitor_claim_key = SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(); - let our_channel_monitor_claim_key_hash = ::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize()); + let our_channel_monitor_claim_key_hash = WPubkeyHash::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize()); Builder::new().push_opcode(opcodes::all::OP_PUSHBYTES_0).push_slice(&our_channel_monitor_claim_key_hash[..]).into_script() } diff --git a/fuzz/src/lib.rs b/fuzz/src/lib.rs index f87c7511..dbda28ac 100644 --- a/fuzz/src/lib.rs +++ b/fuzz/src/lib.rs @@ -1,7 +1,5 @@ extern crate bitcoin; -extern crate bitcoin_hashes; extern crate lightning; -extern crate secp256k1; extern crate hex; pub mod utils; diff --git a/fuzz/src/peer_crypt.rs b/fuzz/src/peer_crypt.rs index 176a7caa..0d200d83 100644 --- a/fuzz/src/peer_crypt.rs +++ b/fuzz/src/peer_crypt.rs @@ -1,6 +1,6 @@ use lightning::ln::peer_channel_encryptor::PeerChannelEncryptor; -use secp256k1::key::{PublicKey,SecretKey}; +use bitcoin::secp256k1::key::{PublicKey,SecretKey}; use utils::test_logger; diff --git a/fuzz/src/router.rs b/fuzz/src/router.rs index 7dcf1de7..2ff160e4 100644 --- a/fuzz/src/router.rs +++ b/fuzz/src/router.rs @@ -1,7 +1,7 @@ -use bitcoin_hashes::sha256d::Hash as Sha256dHash; use bitcoin::blockdata::script::{Script, Builder}; use bitcoin::blockdata::block::Block; use bitcoin::blockdata::transaction::Transaction; +use bitcoin::hash_types::{Txid, BlockHash}; use lightning::chain::chaininterface::{ChainError,ChainWatchInterface}; use lightning::ln::channelmanager::ChannelDetails; @@ -12,7 +12,7 @@ use lightning::ln::router::{Router, RouteHint}; use lightning::util::logger::Logger; use lightning::util::ser::Readable; -use secp256k1::key::PublicKey; +use bitcoin::secp256k1::key::PublicKey; use utils::test_logger; @@ -72,15 +72,15 @@ struct DummyChainWatcher { } impl ChainWatchInterface for DummyChainWatcher { - fn install_watch_tx(&self, _txid: &Sha256dHash, _script_pub_key: &Script) { } - fn install_watch_outpoint(&self, _outpoint: (Sha256dHash, u32), _out_script: &Script) { } + fn install_watch_tx(&self, _txid: &Txid, _script_pub_key: &Script) { } + fn install_watch_outpoint(&self, _outpoint: (Txid, u32), _out_script: &Script) { } fn watch_all_txn(&self) { } fn filter_block<'a>(&self, _block: &'a Block) -> (Vec<&'a Transaction>, Vec) { (Vec::new(), Vec::new()) } fn reentered(&self) -> usize { 0 } - fn get_chain_utxo(&self, _genesis_hash: Sha256dHash, _unspent_tx_output_identifier: u64) -> Result<(Script, u64), ChainError> { + fn get_chain_utxo(&self, _genesis_hash: BlockHash, _unspent_tx_output_identifier: u64) -> Result<(Script, u64), ChainError> { match self.input.get_slice(2) { Some(&[0, _]) => Err(ChainError::NotSupported), Some(&[1, _]) => Err(ChainError::NotWatched), diff --git a/lightning-net-tokio/Cargo.toml b/lightning-net-tokio/Cargo.toml index adfedea7..bdcb9113 100644 --- a/lightning-net-tokio/Cargo.toml +++ b/lightning-net-tokio/Cargo.toml @@ -10,10 +10,8 @@ For Rust-Lightning clients which wish to make direct connections to Lightning P2 """ [dependencies] -bitcoin = "0.21" -bitcoin_hashes = "0.7" +bitcoin = "0.23" lightning = { version = "0.0.11", path = "../lightning" } -secp256k1 = "0.15" tokio = { version = ">=0.2.12", features = [ "io-util", "macros", "rt-core", "sync", "tcp", "time" ] } [dev-dependencies] diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs index dd0b861c..e460df25 100644 --- a/lightning-net-tokio/src/lib.rs +++ b/lightning-net-tokio/src/lib.rs @@ -16,7 +16,7 @@ //! ``` //! use tokio::sync::mpsc; //! use tokio::net::TcpStream; -//! use secp256k1::key::PublicKey; +//! use bitcoin::secp256k1::key::PublicKey; //! use lightning::util::events::EventsProvider; //! use std::net::SocketAddr; //! use std::sync::Arc; @@ -59,7 +59,7 @@ //! } //! ``` -use secp256k1::key::PublicKey; +use bitcoin::secp256k1::key::PublicKey; use tokio::net::TcpStream; use tokio::{io, time}; @@ -481,7 +481,7 @@ mod tests { use lightning::ln::msgs::*; use lightning::ln::peer_handler::{MessageHandler, PeerManager}; use lightning::util::events::*; - use secp256k1::{Secp256k1, SecretKey, PublicKey}; + use bitcoin::secp256k1::{Secp256k1, SecretKey, PublicKey}; use tokio::sync::mpsc; diff --git a/lightning/Cargo.toml b/lightning/Cargo.toml index 96680b56..50859aab 100644 --- a/lightning/Cargo.toml +++ b/lightning/Cargo.toml @@ -13,7 +13,7 @@ Still missing tons of error-handling. See GitHub issues for suggested projects i [features] # Supports tracking channels with a non-bitcoin chain hashes. Currently enables all kinds of fun DoS attacks. non_bitcoin_chain_hash_routing = [] -fuzztarget = ["secp256k1/fuzztarget", "bitcoin/fuzztarget", "bitcoin_hashes/fuzztarget"] +fuzztarget = ["bitcoin/fuzztarget"] # Unlog messages superior at targeted level. max_level_off = [] max_level_error = [] @@ -22,12 +22,10 @@ max_level_info = [] max_level_debug = [] [dependencies] -bitcoin = "0.21" -bitcoin_hashes = "0.7" -secp256k1 = "0.15" +bitcoin = "0.23" [dev-dependencies.bitcoin] -version = "0.21" +version = "0.23" features = ["bitcoinconsensus"] [dev-dependencies] diff --git a/lightning/src/chain/chaininterface.rs b/lightning/src/chain/chaininterface.rs index b30ebc1e..814193af 100644 --- a/lightning/src/chain/chaininterface.rs +++ b/lightning/src/chain/chaininterface.rs @@ -9,8 +9,8 @@ use bitcoin::blockdata::transaction::Transaction; use bitcoin::blockdata::script::Script; use bitcoin::blockdata::constants::genesis_block; use bitcoin::util::hash::BitcoinHash; -use bitcoin_hashes::sha256d::Hash as Sha256dHash; use bitcoin::network::constants::Network; +use bitcoin::hash_types::{Txid, BlockHash}; use util::logger::Logger; @@ -40,11 +40,11 @@ pub enum ChainError { /// events). pub trait ChainWatchInterface: Sync + Send { /// Provides a txid/random-scriptPubKey-in-the-tx which much be watched for. - fn install_watch_tx(&self, txid: &Sha256dHash, script_pub_key: &Script); + fn install_watch_tx(&self, txid: &Txid, script_pub_key: &Script); /// Provides an outpoint which must be watched for, providing any transactions which spend the /// given outpoint. - fn install_watch_outpoint(&self, outpoint: (Sha256dHash, u32), out_script: &Script); + fn install_watch_outpoint(&self, outpoint: (Txid, u32), out_script: &Script); /// Indicates that a listener needs to see all transactions. fn watch_all_txn(&self); @@ -53,7 +53,7 @@ pub trait ChainWatchInterface: Sync + Send { /// short_channel_id (aka unspent_tx_output_identier). For BTC/tBTC channels the top three /// bytes are the block height, the next 3 the transaction index within the block, and the /// final two the output within the transaction. - fn get_chain_utxo(&self, genesis_hash: Sha256dHash, unspent_tx_output_identifier: u64) -> Result<(Script, u64), ChainError>; + fn get_chain_utxo(&self, genesis_hash: BlockHash, unspent_tx_output_identifier: u64) -> Result<(Script, u64), ChainError>; /// Gets the list of transactions and transaction indices that the ChainWatchInterface is /// watching for. @@ -135,11 +135,11 @@ pub struct ChainWatchedUtil { // We are more conservative in matching during testing to ensure everything matches *exactly*, // even though during normal runtime we take more optimized match approaches... #[cfg(test)] - watched_txn: HashSet<(Sha256dHash, Script)>, + watched_txn: HashSet<(Txid, Script)>, #[cfg(not(test))] watched_txn: HashSet