From 1021ec5299884c75868141b7804f796244fb92a2 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Tue, 20 Aug 2024 17:57:29 +0200 Subject: [PATCH] chore: bump bitcoin + lightning-invoice deps --- crates/cdk-cln/Cargo.toml | 2 +- crates/cdk-fake-wallet/Cargo.toml | 6 +++--- crates/cdk-fake-wallet/src/lib.rs | 3 +-- crates/cdk-lnbits/Cargo.toml | 2 +- crates/cdk-mintd/Cargo.toml | 2 +- crates/cdk-phoenixd/Cargo.toml | 2 +- crates/cdk-redb/Cargo.toml | 2 +- crates/cdk-sqlite/Cargo.toml | 4 ++-- crates/cdk-strike/Cargo.toml | 2 +- crates/cdk/Cargo.toml | 9 ++------- crates/cdk/src/error.rs | 2 +- crates/cdk/src/mint/mod.rs | 11 +++++------ crates/cdk/src/nuts/nut00/mod.rs | 2 +- crates/cdk/src/nuts/nut00/token.rs | 10 +++++----- crates/cdk/src/nuts/nut01/public_key.rs | 2 +- crates/cdk/src/nuts/nut01/secret_key.rs | 6 +++--- crates/cdk/src/nuts/nut02.rs | 9 ++++----- crates/cdk/src/nuts/nut13.rs | 16 ++++++++-------- crates/cdk/src/wallet/mod.rs | 7 +++---- 19 files changed, 45 insertions(+), 54 deletions(-) diff --git a/crates/cdk-cln/Cargo.toml b/crates/cdk-cln/Cargo.toml index 946aa55f..b0efecd8 100644 --- a/crates/cdk-cln/Cargo.toml +++ b/crates/cdk-cln/Cargo.toml @@ -11,7 +11,7 @@ description = "CDK ln backend for cln" [dependencies] async-trait = "0.1" -bitcoin = { version = "0.30", default-features = false } # lightning-invoice uses v0.30 +bitcoin = { version = "0.32.2", default-features = false } cdk = { path = "../cdk", version = "0.4.0", default-features = false, features = ["mint"] } cln-rpc = "0.1.9" futures = { version = "0.3.28", default-features = false } diff --git a/crates/cdk-fake-wallet/Cargo.toml b/crates/cdk-fake-wallet/Cargo.toml index 647329aa..ffa81ba4 100644 --- a/crates/cdk-fake-wallet/Cargo.toml +++ b/crates/cdk-fake-wallet/Cargo.toml @@ -11,14 +11,14 @@ description = "CDK fake ln backend" [dependencies] async-trait = "0.1.74" -bitcoin = { version = "0.30", default-features = false } # lightning-invoice uses v0.30 +bitcoin = { version = "0.32.2", default-features = false } cdk = { path = "../cdk", version = "0.4.0", default-features = false, features = ["mint"] } futures = { version = "0.3.28", default-features = false } tokio = { version = "1", default-features = false } tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] } thiserror = "1" uuid = { version = "1", features = ["v4"] } -lightning-invoice = { version = "0.31", features = ["serde"] } -lightning = "0.0.123" +lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } +lightning = "0.0.124" tokio-stream = "0.1.15" rand = "0.8.5" diff --git a/crates/cdk-fake-wallet/src/lib.rs b/crates/cdk-fake-wallet/src/lib.rs index 468302e2..b9b87b65 100644 --- a/crates/cdk-fake-wallet/src/lib.rs +++ b/crates/cdk-fake-wallet/src/lib.rs @@ -23,8 +23,7 @@ use cdk::util::unix_time; use error::Error; use futures::stream::StreamExt; use futures::Stream; -use lightning::ln::types::PaymentSecret; -use lightning_invoice::{Currency, InvoiceBuilder}; +use lightning_invoice::{Currency, InvoiceBuilder, PaymentSecret}; use tokio::sync::Mutex; use tokio::time; use tokio_stream::wrappers::ReceiverStream; diff --git a/crates/cdk-lnbits/Cargo.toml b/crates/cdk-lnbits/Cargo.toml index 0ff945d5..1c75f16d 100644 --- a/crates/cdk-lnbits/Cargo.toml +++ b/crates/cdk-lnbits/Cargo.toml @@ -13,7 +13,7 @@ description = "CDK ln backend for lnbits" async-trait = "0.1" anyhow = "1" axum = "0.6.20" -bitcoin = { version = "0.30", default-features = false } # lightning-invoice uses v0.30 +bitcoin = { version = "0.32.2", default-features = false } cdk = { path = "../cdk", version = "0.4.0", default-features = false, features = ["mint"] } futures = { version = "0.3.28", default-features = false } tokio = { version = "1", default-features = false } diff --git a/crates/cdk-mintd/Cargo.toml b/crates/cdk-mintd/Cargo.toml index 3305b6a0..c61db669 100644 --- a/crates/cdk-mintd/Cargo.toml +++ b/crates/cdk-mintd/Cargo.toml @@ -31,6 +31,6 @@ futures = { version = "0.3.28", default-features = false } serde = { version = "1", default-features = false, features = ["derive"] } bip39 = "2.0" tower-http = { version = "0.4.4", features = ["cors"] } -lightning-invoice = { version = "0.31", features = ["serde"] } +lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } home = "0.5.5" url = "2.3" diff --git a/crates/cdk-phoenixd/Cargo.toml b/crates/cdk-phoenixd/Cargo.toml index 3f54ff90..4a5b6e53 100644 --- a/crates/cdk-phoenixd/Cargo.toml +++ b/crates/cdk-phoenixd/Cargo.toml @@ -13,7 +13,7 @@ description = "CDK ln backend for phoenixd" async-trait = "0.1" anyhow = "1" axum = "0.6.20" -bitcoin = { version = "0.30", default-features = false } # lightning-invoice uses v0.30 +bitcoin = { version = "0.32.2", default-features = false } cdk = { path = "../cdk", version = "0.4.0", default-features = false, features = ["mint"] } futures = { version = "0.3.28", default-features = false } tokio = { version = "1", default-features = false } diff --git a/crates/cdk-redb/Cargo.toml b/crates/cdk-redb/Cargo.toml index ef30b128..d7ec6b50 100644 --- a/crates/cdk-redb/Cargo.toml +++ b/crates/cdk-redb/Cargo.toml @@ -23,4 +23,4 @@ thiserror = "1" tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] } serde = { version = "1", default-features = false, features = ["derive"] } serde_json = "1" -lightning-invoice = { version = "0.31", features = ["serde"] } +lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } diff --git a/crates/cdk-sqlite/Cargo.toml b/crates/cdk-sqlite/Cargo.toml index 00ff9b30..e281ba48 100644 --- a/crates/cdk-sqlite/Cargo.toml +++ b/crates/cdk-sqlite/Cargo.toml @@ -18,7 +18,7 @@ wallet = ["cdk/wallet"] [dependencies] async-trait = "0.1" cdk = { path = "../cdk", version = "0.4.0", default-features = false } -bitcoin = { version = "0.30", default-features = false } # lightning-invoice uses v0.30 +bitcoin = { version = "0.32.2", default-features = false } sqlx = { version = "0.6.3", default-features = false, features = ["runtime-tokio-rustls", "sqlite", "macros", "migrate"] } thiserror = "1" tokio = { version = "1", features = [ @@ -28,4 +28,4 @@ tokio = { version = "1", features = [ ] } tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] } serde_json = "1" -lightning-invoice = { version = "0.31", features = ["serde"] } +lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } diff --git a/crates/cdk-strike/Cargo.toml b/crates/cdk-strike/Cargo.toml index 415345b1..d97d18bf 100644 --- a/crates/cdk-strike/Cargo.toml +++ b/crates/cdk-strike/Cargo.toml @@ -13,7 +13,7 @@ description = "CDK ln backend for Strike api" async-trait = "0.1" anyhow = "1" axum = "0.6.20" -bitcoin = { version = "0.30", default-features = false } # lightning-invoice uses v0.30 +bitcoin = { version = "0.32.2", default-features = false } cdk = { path = "../cdk", version = "0.4.0", default-features = false, features = ["mint"] } futures = { version = "0.3.28", default-features = false } tokio = { version = "1", default-features = false } diff --git a/crates/cdk/Cargo.toml b/crates/cdk/Cargo.toml index 024709b1..dd0347f0 100644 --- a/crates/cdk/Cargo.toml +++ b/crates/cdk/Cargo.toml @@ -20,15 +20,10 @@ bench = [] [dependencies] async-trait = "0.1" anyhow = { version = "1.0.43", features = ["backtrace"] } -base64 = "0.22" # bitcoin uses v0.13 (optional dep) -bitcoin = { version= "0.30", features = [ - "serde", - "rand", - "rand-std", -] } # lightning-invoice uses v0.30 +bitcoin = { version= "0.32.2", features = ["base64", "serde", "rand", "rand-std"] } ciborium = { version = "0.2.2", default-features = false, features = ["std"] } cbor-diag = "0.1.12" -lightning-invoice = { version = "0.31", features = ["serde"] } +lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } once_cell = "1.19" regex = "1" reqwest = { version = "0.12", default-features = false, features = [ diff --git a/crates/cdk/src/error.rs b/crates/cdk/src/error.rs index 61d48750..1a8f8b6b 100644 --- a/crates/cdk/src/error.rs +++ b/crates/cdk/src/error.rs @@ -176,7 +176,7 @@ pub enum Error { SerdeJsonError(#[from] serde_json::Error), /// Base64 error #[error(transparent)] - Base64Error(#[from] base64::DecodeError), + Base64Error(#[from] bitcoin::base64::DecodeError), /// From hex error #[error(transparent)] HexError(#[from] hex::Error), diff --git a/crates/cdk/src/mint/mod.rs b/crates/cdk/src/mint/mod.rs index 59c26eb4..5e66ecb2 100644 --- a/crates/cdk/src/mint/mod.rs +++ b/crates/cdk/src/mint/mod.rs @@ -4,7 +4,7 @@ use std::collections::{HashMap, HashSet}; use std::str::FromStr; use std::sync::Arc; -use bitcoin::bip32::{ChildNumber, DerivationPath, ExtendedPrivKey}; +use bitcoin::bip32::{ChildNumber, DerivationPath, Xpriv}; use bitcoin::secp256k1::{self, Secp256k1}; use serde::{Deserialize, Serialize}; use tokio::sync::RwLock; @@ -38,7 +38,7 @@ pub struct Mint { /// Active Mint Keysets keysets: Arc>>, secp_ctx: Secp256k1, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, } impl Mint { @@ -52,8 +52,7 @@ impl Mint { supported_units: HashMap, ) -> Result { let secp_ctx = Secp256k1::new(); - let xpriv = - ExtendedPrivKey::new_master(bitcoin::Network::Bitcoin, seed).expect("RNG busted"); + let xpriv = Xpriv::new_master(bitcoin::Network::Bitcoin, seed).expect("RNG busted"); let mut active_keysets = HashMap::new(); let keysets_infos = localstore.get_keyset_infos().await?; @@ -1396,7 +1395,7 @@ impl From for KeySetInfo { #[instrument(skip_all)] fn create_new_keyset( secp: &secp256k1::Secp256k1, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, derivation_path: DerivationPath, derivation_path_index: Option, unit: CurrencyUnit, @@ -1486,7 +1485,7 @@ mod tests { fn mint_mod_generate_keyset_from_xpriv() { let seed = "test_seed".as_bytes(); let network = Network::Bitcoin; - let xpriv = ExtendedPrivKey::new_master(network, seed).expect("Failed to create xpriv"); + let xpriv = Xpriv::new_master(network, seed).expect("Failed to create xpriv"); let keyset = MintKeySet::generate_from_xpriv( &Secp256k1::new(), xpriv, diff --git a/crates/cdk/src/nuts/nut00/mod.rs b/crates/cdk/src/nuts/nut00/mod.rs index c4eef312..8b6e85c9 100644 --- a/crates/cdk/src/nuts/nut00/mod.rs +++ b/crates/cdk/src/nuts/nut00/mod.rs @@ -52,7 +52,7 @@ pub enum Error { Utf8ParseError(#[from] FromUtf8Error), /// Base64 error #[error(transparent)] - Base64Error(#[from] base64::DecodeError), + Base64Error(#[from] bitcoin::base64::DecodeError), /// Parse Url Error #[error(transparent)] UrlParseError(#[from] url::ParseError), diff --git a/crates/cdk/src/nuts/nut00/token.rs b/crates/cdk/src/nuts/nut00/token.rs index c969196a..f4616620 100644 --- a/crates/cdk/src/nuts/nut00/token.rs +++ b/crates/cdk/src/nuts/nut00/token.rs @@ -6,8 +6,8 @@ use std::collections::HashMap; use std::fmt; use std::str::FromStr; -use base64::engine::{general_purpose, GeneralPurpose}; -use base64::{alphabet, Engine as _}; +use bitcoin::base64::engine::{general_purpose, GeneralPurpose}; +use bitcoin::base64::{alphabet, Engine as _}; use serde::{Deserialize, Serialize}; use url::Url; @@ -119,7 +119,7 @@ impl FromStr for Token { }; let decode_config = general_purpose::GeneralPurposeConfig::new() - .with_decode_padding_mode(base64::engine::DecodePaddingMode::Indifferent); + .with_decode_padding_mode(bitcoin::base64::engine::DecodePaddingMode::Indifferent); let decoded = GeneralPurpose::new(&alphabet::URL_SAFE, decode_config).decode(s)?; match is_v3 { @@ -234,7 +234,7 @@ impl FromStr for TokenV3 { let s = s.strip_prefix("cashuA").ok_or(Error::UnsupportedToken)?; let decode_config = general_purpose::GeneralPurposeConfig::new() - .with_decode_padding_mode(base64::engine::DecodePaddingMode::Indifferent); + .with_decode_padding_mode(bitcoin::base64::engine::DecodePaddingMode::Indifferent); let decoded = GeneralPurpose::new(&alphabet::URL_SAFE, decode_config).decode(s)?; let decoded_str = String::from_utf8(decoded)?; let token: TokenV3 = serde_json::from_str(&decoded_str)?; @@ -344,7 +344,7 @@ impl FromStr for TokenV4 { let s = s.strip_prefix("cashuB").ok_or(Error::UnsupportedToken)?; let decode_config = general_purpose::GeneralPurposeConfig::new() - .with_decode_padding_mode(base64::engine::DecodePaddingMode::Indifferent); + .with_decode_padding_mode(bitcoin::base64::engine::DecodePaddingMode::Indifferent); let decoded = GeneralPurpose::new(&alphabet::URL_SAFE, decode_config).decode(s)?; let token: TokenV4 = ciborium::from_reader(&decoded[..])?; Ok(token) diff --git a/crates/cdk/src/nuts/nut01/public_key.rs b/crates/cdk/src/nuts/nut01/public_key.rs index e8e668d4..ddb58b81 100644 --- a/crates/cdk/src/nuts/nut01/public_key.rs +++ b/crates/cdk/src/nuts/nut01/public_key.rs @@ -88,7 +88,7 @@ impl PublicKey { /// Verify schnorr signature pub fn verify(&self, msg: &[u8], sig: &Signature) -> Result<(), Error> { let hash: Sha256Hash = Sha256Hash::hash(msg); - let msg = Message::from_slice(hash.as_ref())?; + let msg = Message::from_digest_slice(hash.as_ref())?; SECP256K1.verify_schnorr(sig, &msg, &self.inner.x_only_public_key().0)?; Ok(()) } diff --git a/crates/cdk/src/nuts/nut01/secret_key.rs b/crates/cdk/src/nuts/nut01/secret_key.rs index 68c72516..11b7e00b 100644 --- a/crates/cdk/src/nuts/nut01/secret_key.rs +++ b/crates/cdk/src/nuts/nut01/secret_key.rs @@ -7,7 +7,7 @@ use bitcoin::hashes::Hash; use bitcoin::secp256k1; use bitcoin::secp256k1::rand::rngs::OsRng; use bitcoin::secp256k1::schnorr::Signature; -use bitcoin::secp256k1::{KeyPair, Message, Scalar}; +use bitcoin::secp256k1::{Keypair, Message, Scalar}; use serde::{Deserialize, Deserializer, Serialize}; use super::{Error, PublicKey}; @@ -81,8 +81,8 @@ impl SecretKey { /// Schnorr Signature on Message pub fn sign(&self, msg: &[u8]) -> Result { let hash: Sha256Hash = Sha256Hash::hash(msg); - let msg = Message::from_slice(hash.as_ref())?; - Ok(SECP256K1.sign_schnorr(&msg, &KeyPair::from_secret_key(&SECP256K1, &self.inner))) + let msg = Message::from_digest_slice(hash.as_ref())?; + Ok(SECP256K1.sign_schnorr(&msg, &Keypair::from_secret_key(&SECP256K1, &self.inner))) } /// Get public key diff --git a/crates/cdk/src/nuts/nut02.rs b/crates/cdk/src/nuts/nut02.rs index 0923c341..e0e4fd15 100644 --- a/crates/cdk/src/nuts/nut02.rs +++ b/crates/cdk/src/nuts/nut02.rs @@ -11,7 +11,7 @@ use std::collections::BTreeMap; #[cfg(feature = "mint")] use bitcoin::bip32::DerivationPath; #[cfg(feature = "mint")] -use bitcoin::bip32::{ChildNumber, ExtendedPrivKey}; +use bitcoin::bip32::{ChildNumber, Xpriv}; use bitcoin::hashes::sha256::Hash as Sha256; use bitcoin::hashes::Hash; #[cfg(feature = "mint")] @@ -288,7 +288,7 @@ impl MintKeySet { /// Generate new [`MintKeySet`] pub fn generate( secp: &Secp256k1, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, unit: CurrencyUnit, max_order: u8, ) -> Self { @@ -328,8 +328,7 @@ impl MintKeySet { currency_unit: CurrencyUnit, derivation_path: DerivationPath, ) -> Self { - let xpriv = - ExtendedPrivKey::new_master(bitcoin::Network::Bitcoin, seed).expect("RNG busted"); + let xpriv = Xpriv::new_master(bitcoin::Network::Bitcoin, seed).expect("RNG busted"); Self::generate( secp, xpriv @@ -343,7 +342,7 @@ impl MintKeySet { /// Generate new [`MintKeySet`] from xpriv pub fn generate_from_xpriv( secp: &Secp256k1, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, max_order: u8, currency_unit: CurrencyUnit, derivation_path: DerivationPath, diff --git a/crates/cdk/src/nuts/nut13.rs b/crates/cdk/src/nuts/nut13.rs index 2408ea17..4383ba13 100644 --- a/crates/cdk/src/nuts/nut13.rs +++ b/crates/cdk/src/nuts/nut13.rs @@ -2,7 +2,7 @@ //! //! -use bitcoin::bip32::{ChildNumber, DerivationPath, ExtendedPrivKey}; +use bitcoin::bip32::{ChildNumber, DerivationPath, Xpriv}; use thiserror::Error; use tracing::instrument; @@ -37,7 +37,7 @@ pub enum Error { impl Secret { /// Create new [`Secret`] from xpriv - pub fn from_xpriv(xpriv: ExtendedPrivKey, keyset_id: Id, counter: u32) -> Result { + pub fn from_xpriv(xpriv: Xpriv, keyset_id: Id, counter: u32) -> Result { let path = derive_path_from_keyset_id(keyset_id)? .child(ChildNumber::from_hardened_idx(counter)?) .child(ChildNumber::from_normal_idx(0)?); @@ -51,7 +51,7 @@ impl Secret { impl SecretKey { /// Create new [`SecretKey`] from xpriv - pub fn from_xpriv(xpriv: ExtendedPrivKey, keyset_id: Id, counter: u32) -> Result { + pub fn from_xpriv(xpriv: Xpriv, keyset_id: Id, counter: u32) -> Result { let path = derive_path_from_keyset_id(keyset_id)? .child(ChildNumber::from_hardened_idx(counter)?) .child(ChildNumber::from_normal_idx(1)?); @@ -68,7 +68,7 @@ impl PreMintSecrets { pub fn from_xpriv( keyset_id: Id, counter: u32, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, amount: Amount, amount_split_target: &SplitTarget, ) -> Result { @@ -102,7 +102,7 @@ impl PreMintSecrets { pub fn from_xpriv_blank( keyset_id: Id, counter: u32, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, amount: Amount, ) -> Result { if amount <= Amount::ZERO { @@ -141,7 +141,7 @@ impl PreMintSecrets { /// factor pub fn restore_batch( keyset_id: Id, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, start_count: u32, end_count: u32, ) -> Result { @@ -194,7 +194,7 @@ mod tests { "half depart obvious quality work element tank gorilla view sugar picture humble"; let mnemonic = Mnemonic::from_str(seed).unwrap(); let seed: [u8; 64] = mnemonic.to_seed(""); - let xpriv = ExtendedPrivKey::new_master(Network::Bitcoin, &seed).unwrap(); + let xpriv = Xpriv::new_master(Network::Bitcoin, &seed).unwrap(); let keyset_id = Id::from_str("009a1f293253e41e").unwrap(); let test_secrets = [ @@ -216,7 +216,7 @@ mod tests { "half depart obvious quality work element tank gorilla view sugar picture humble"; let mnemonic = Mnemonic::from_str(seed).unwrap(); let seed: [u8; 64] = mnemonic.to_seed(""); - let xpriv = ExtendedPrivKey::new_master(Network::Bitcoin, &seed).unwrap(); + let xpriv = Xpriv::new_master(Network::Bitcoin, &seed).unwrap(); let keyset_id = Id::from_str("009a1f293253e41e").unwrap(); let test_rs = [ diff --git a/crates/cdk/src/wallet/mod.rs b/crates/cdk/src/wallet/mod.rs index a32f62bc..058bee6a 100644 --- a/crates/cdk/src/wallet/mod.rs +++ b/crates/cdk/src/wallet/mod.rs @@ -4,7 +4,7 @@ use std::collections::{HashMap, HashSet}; use std::str::FromStr; use std::sync::Arc; -use bitcoin::bip32::ExtendedPrivKey; +use bitcoin::bip32::Xpriv; use bitcoin::hashes::sha256::Hash as Sha256Hash; use bitcoin::hashes::Hash; use bitcoin::key::XOnlyPublicKey; @@ -51,7 +51,7 @@ pub struct Wallet { pub localstore: Arc + Send + Sync>, /// The targeted amount of proofs to have at each size pub target_proof_count: usize, - xpriv: ExtendedPrivKey, + xpriv: Xpriv, client: HttpClient, } @@ -80,8 +80,7 @@ impl Wallet { seed: &[u8], target_proof_count: Option, ) -> Result { - let xpriv = ExtendedPrivKey::new_master(Network::Bitcoin, seed) - .expect("Could not create master key"); + let xpriv = Xpriv::new_master(Network::Bitcoin, seed).expect("Could not create master key"); Ok(Self { mint_url: MintUrl::from_str(mint_url)?,