diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 440cc240399..5b886e19bff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,8 +16,8 @@ jobs: 1.41.0, # 1.45.2 is MSRV for lightning-net-tokio, lightning-block-sync, and coverage generation 1.45.2, - # 1.49.0 is MSRV for no_std builds using hashbrown - 1.49.0] + # 1.47.0 will be the MSRV for no_std builds using hashbrown once core2 is updated + 1.47.0] include: - toolchain: stable build-net-tokio: true @@ -41,8 +41,8 @@ jobs: build-net-tokio: true build-no-std: false coverage: true - - toolchain: 1.49.0 - build-no-std: true + - toolchain: 1.47.0 + build-no-std: false runs-on: ${{ matrix.platform }} steps: - name: Checkout source code diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 7c3d42067da..3b6d027df32 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -19,7 +19,7 @@ stdin_fuzz = [] [dependencies] afl = { version = "0.4", optional = true } lightning = { path = "../lightning", features = ["fuzztarget"] } -bitcoin = { version = "0.26", features = ["fuzztarget", "secp-lowmemory"] } +bitcoin = { version = "0.27", features = ["fuzztarget", "secp-lowmemory"] } hex = "0.3" honggfuzz = { version = "0.5", optional = true } libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git", optional = true } diff --git a/lightning-background-processor/Cargo.toml b/lightning-background-processor/Cargo.toml index 9849ac44bc6..1659ffd3ea3 100644 --- a/lightning-background-processor/Cargo.toml +++ b/lightning-background-processor/Cargo.toml @@ -10,7 +10,7 @@ Utilities to perform required background tasks for Rust Lightning. edition = "2018" [dependencies] -bitcoin = "0.26" +bitcoin = "0.27" lightning = { version = "0.0.99", path = "../lightning", features = ["allow_wallclock_use"] } lightning-persister = { version = "0.0.99", path = "../lightning-persister" } diff --git a/lightning-block-sync/Cargo.toml b/lightning-block-sync/Cargo.toml index b72d91cda50..36bb5af9009 100644 --- a/lightning-block-sync/Cargo.toml +++ b/lightning-block-sync/Cargo.toml @@ -14,7 +14,7 @@ rest-client = [ "serde", "serde_json", "chunked_transfer" ] rpc-client = [ "serde", "serde_json", "chunked_transfer" ] [dependencies] -bitcoin = "0.26" +bitcoin = "0.27" lightning = { version = "0.0.99", path = "../lightning" } tokio = { version = "1.0", features = [ "io-util", "net", "time" ], optional = true } serde = { version = "1.0", features = ["derive"], optional = true } diff --git a/lightning-invoice/Cargo.toml b/lightning-invoice/Cargo.toml index ae37382fd34..404f12d76eb 100644 --- a/lightning-invoice/Cargo.toml +++ b/lightning-invoice/Cargo.toml @@ -9,11 +9,11 @@ keywords = [ "lightning", "bitcoin", "invoice", "BOLT11" ] readme = "README.md" [dependencies] -bech32 = "0.7" +bech32 = "0.8" lightning = { version = "0.0.99", path = "../lightning" } secp256k1 = { version = "0.20", features = ["recovery"] } num-traits = "0.2.8" -bitcoin_hashes = "0.9.4" +bitcoin_hashes = "0.10" [dev-dependencies] lightning = { version = "0.0.99", path = "../lightning", features = ["_test_utils"] } diff --git a/lightning-invoice/fuzz/Cargo.toml b/lightning-invoice/fuzz/Cargo.toml index 68a0d4e0a33..eb583a41c7e 100644 --- a/lightning-invoice/fuzz/Cargo.toml +++ b/lightning-invoice/fuzz/Cargo.toml @@ -15,7 +15,7 @@ honggfuzz_fuzz = ["honggfuzz"] honggfuzz = { version = "0.5", optional = true } afl = { version = "0.4", optional = true } lightning-invoice = { path = ".."} -bech32 = "0.7" +bech32 = "0.8" # Prevent this from interfering with workspaces [workspace] diff --git a/lightning-invoice/src/de.rs b/lightning-invoice/src/de.rs index 9c5120e4ad6..dbcb74e073a 100644 --- a/lightning-invoice/src/de.rs +++ b/lightning-invoice/src/de.rs @@ -250,7 +250,13 @@ impl FromStr for SignedRawInvoice { type Err = ParseError; fn from_str(s: &str) -> Result { - let (hrp, data) = bech32::decode(s)?; + let (hrp, data, var) = bech32::decode(s)?; + + if var == bech32::Variant::Bech32m { + // Consider Bech32m addresses to be "Invalid Checksum", since that is what we'd get if + // we didn't support Bech32m (which lightning does not use). + return Err(ParseError::Bech32Error(bech32::Error::InvalidChecksum)); + } if data.len() < 104 { return Err(ParseError::TooShortDataPart); diff --git a/lightning-invoice/src/ser.rs b/lightning-invoice/src/ser.rs index 5c7b4aa8978..7d9ca9eb895 100644 --- a/lightning-invoice/src/ser.rs +++ b/lightning-invoice/src/ser.rs @@ -117,7 +117,7 @@ impl Display for SignedRawInvoice { let mut data = self.raw_invoice.data.to_base32(); data.extend_from_slice(&self.signature.to_base32()); - bech32::encode_to_fmt(f, &hrp, data).expect("HRP is valid")?; + bech32::encode_to_fmt(f, &hrp, data, bech32::Variant::Bech32).expect("HRP is valid")?; Ok(()) } diff --git a/lightning-net-tokio/Cargo.toml b/lightning-net-tokio/Cargo.toml index d855529fa9c..928eab7aa40 100644 --- a/lightning-net-tokio/Cargo.toml +++ b/lightning-net-tokio/Cargo.toml @@ -11,7 +11,7 @@ For Rust-Lightning clients which wish to make direct connections to Lightning P2 edition = "2018" [dependencies] -bitcoin = "0.26" +bitcoin = "0.27" lightning = { version = "0.0.99", path = "../lightning" } tokio = { version = "1.0", features = [ "io-util", "macros", "rt", "sync", "net", "time" ] } diff --git a/lightning-persister/Cargo.toml b/lightning-persister/Cargo.toml index 9ce4e8f683f..81c69d0ff97 100644 --- a/lightning-persister/Cargo.toml +++ b/lightning-persister/Cargo.toml @@ -12,7 +12,7 @@ Utilities to manage Rust-Lightning channel data persistence and retrieval. unstable = ["lightning/unstable"] [dependencies] -bitcoin = "0.26" +bitcoin = "0.27" lightning = { version = "0.0.99", path = "../lightning" } libc = "0.2" diff --git a/lightning/Cargo.toml b/lightning/Cargo.toml index 32c0d0af634..9a2861d6927 100644 --- a/lightning/Cargo.toml +++ b/lightning/Cargo.toml @@ -26,13 +26,13 @@ max_level_debug = [] unsafe_revoked_tx_signing = [] unstable = [] -no_std = ["hashbrown"] -std = [] +no_std = ["hashbrown", "bitcoin/no-std"] +std = ["bitcoin/std"] default = ["std"] [dependencies] -bitcoin = "0.26" +bitcoin = "0.27" hashbrown = { version = "0.11", optional = true } hex = { version = "0.3", optional = true } @@ -43,7 +43,7 @@ hex = "0.3" regex = "0.1.80" [dev-dependencies.bitcoin] -version = "0.26" +version = "0.27" features = ["bitcoinconsensus"] [package.metadata.docs.rs] diff --git a/lightning/src/lib.rs b/lightning/src/lib.rs index 14445710655..5c414b7b233 100644 --- a/lightning/src/lib.rs +++ b/lightning/src/lib.rs @@ -31,6 +31,7 @@ #![cfg_attr(all(any(test, feature = "_test_utils"), feature = "unstable"), feature(test))] #[cfg(all(any(test, feature = "_test_utils"), feature = "unstable"))] extern crate test; +#[macro_use] extern crate alloc; extern crate bitcoin; extern crate core; diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 6ebe802b50c..22458159544 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -5114,10 +5114,8 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> mod tests { use bitcoin::hashes::Hash; use bitcoin::hashes::sha256::Hash as Sha256; - use core::sync::atomic::{AtomicBool, Ordering}; use core::time::Duration; use ln::{PaymentPreimage, PaymentHash, PaymentSecret}; - use ln::channelmanager::PersistenceNotifier; use ln::features::{InitFeatures, InvoiceFeatures}; use ln::functional_test_utils::*; use ln::msgs; @@ -5125,12 +5123,15 @@ mod tests { use routing::router::{get_keysend_route, get_route}; use util::events::{Event, MessageSendEvent, MessageSendEventsProvider}; use util::test_utils; - use std::sync::Arc; - use std::thread; #[cfg(feature = "std")] #[test] fn test_wait_timeout() { + use ln::channelmanager::PersistenceNotifier; + use sync::Arc; + use core::sync::atomic::{AtomicBool, Ordering}; + use std::thread; + let persistence_notifier = Arc::new(PersistenceNotifier::new()); let thread_notifier = Arc::clone(&persistence_notifier);