瀏覽代碼

chore: bump bitcoin + lightning-invoice deps

Pavol Rusnak 6 月之前
父節點
當前提交
1021ec5299

+ 1 - 1
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 }

+ 3 - 3
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"

+ 1 - 2
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;

+ 1 - 1
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 }

+ 1 - 1
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"

+ 1 - 1
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 }

+ 1 - 1
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"] }

+ 2 - 2
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"] }

+ 1 - 1
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 }

+ 2 - 7
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 = [

+ 1 - 1
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),

+ 5 - 6
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<RwLock<HashMap<Id, MintKeySet>>>,
     secp_ctx: Secp256k1<secp256k1::All>,
-    xpriv: ExtendedPrivKey,
+    xpriv: Xpriv,
 }
 
 impl Mint {
@@ -52,8 +52,7 @@ impl Mint {
         supported_units: HashMap<CurrencyUnit, (u64, u8)>,
     ) -> Result<Self, Error> {
         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<MintKeySetInfo> for KeySetInfo {
 #[instrument(skip_all)]
 fn create_new_keyset<C: secp256k1::Signing>(
     secp: &secp256k1::Secp256k1<C>,
-    xpriv: ExtendedPrivKey,
+    xpriv: Xpriv,
     derivation_path: DerivationPath,
     derivation_path_index: Option<u32>,
     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,

+ 1 - 1
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),

+ 5 - 5
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)

+ 1 - 1
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(())
     }

+ 3 - 3
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<Signature, Error> {
         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

+ 4 - 5
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<C: secp256k1::Signing>(
         secp: &Secp256k1<C>,
-        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<C: secp256k1::Signing>(
         secp: &Secp256k1<C>,
-        xpriv: ExtendedPrivKey,
+        xpriv: Xpriv,
         max_order: u8,
         currency_unit: CurrencyUnit,
         derivation_path: DerivationPath,

+ 8 - 8
crates/cdk/src/nuts/nut13.rs

@@ -2,7 +2,7 @@
 //!
 //! <https://github.com/cashubtc/nuts/blob/main/13.md>
 
-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<Self, Error> {
+    pub fn from_xpriv(xpriv: Xpriv, keyset_id: Id, counter: u32) -> Result<Self, Error> {
         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<Self, Error> {
+    pub fn from_xpriv(xpriv: Xpriv, keyset_id: Id, counter: u32) -> Result<Self, Error> {
         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<Self, Error> {
@@ -102,7 +102,7 @@ impl PreMintSecrets {
     pub fn from_xpriv_blank(
         keyset_id: Id,
         counter: u32,
-        xpriv: ExtendedPrivKey,
+        xpriv: Xpriv,
         amount: Amount,
     ) -> Result<Self, Error> {
         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<Self, Error> {
@@ -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 = [

+ 3 - 4
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<dyn WalletDatabase<Err = cdk_database::Error> + 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<usize>,
     ) -> Result<Self, Error> {
-        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)?,