diff --git a/Cargo.toml b/Cargo.toml index b529bf6..8531175 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ rand = "0.8.5" serde = { version = "1.0.193", features = ["derive"] } serde_json = { version = "1.0.108" } rs_merkle = "1.4.2" -zstd = "0.13.3" +flate2 = { version = "1.0", features = ["miniz_oxide"] } getrandom = { version = "0.2", features = ["js"] } sp-client = { git = "https://github.com/Sosthene00/sp-client.git", branch = "dev", default-features = false } backend-blindbit-native = { git = "https://github.com/Sosthene00/sp-client.git", branch = "dev", optional = true } diff --git a/src/lib.rs b/src/lib.rs index c0a707b..1b8cb43 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,7 +11,7 @@ pub use serde_json; pub use sp_client; pub use tsify; pub use wasm_bindgen; -pub use zstd; +pub use flate2; #[cfg(feature = "blindbit-wasm")] pub use js_sys; diff --git a/src/pcd.rs b/src/pcd.rs index 374d5c6..2f16c34 100644 --- a/src/pcd.rs +++ b/src/pcd.rs @@ -14,6 +14,8 @@ use sp_client::{ silentpayments::SilentPaymentAddress, }; use tsify::Tsify; +use flate2::write::{DeflateEncoder, DeflateDecoder}; +use flate2::Compression; use crate::hash::AnkPcdHash; use crate::serialization::OutPointMemberMap; @@ -24,7 +26,6 @@ use crate::{ }; pub const PCD_VERSION: u8 = 1; -pub(crate) const ZSTD_COMPRESSION_LEVEL: i32 = zstd::DEFAULT_COMPRESSION_LEVEL; pub trait PcdSerializable { fn serialize_to_pcd(&self) -> Result>; @@ -36,7 +37,7 @@ pub trait PcdSerializable { impl PcdSerializable for serde_json::Value { fn serialize_to_pcd(&self) -> Result> { let mut compressed = Vec::new(); - let mut encoder = zstd::stream::Encoder::new(&mut compressed, ZSTD_COMPRESSION_LEVEL)?; + let mut encoder = DeflateEncoder::new(&mut compressed, Compression::default()); encoder.write_all(&[PCD_VERSION])?; encoder.write_all(&[DataType::Json as u8])?; @@ -48,7 +49,9 @@ impl PcdSerializable for serde_json::Value { fn deserialize_from_pcd(data: &[u8]) -> Result { let mut decompressed = Vec::new(); - zstd::stream::copy_decode(data, &mut decompressed)?; + let mut decoder = DeflateDecoder::new(&mut decompressed); + decoder.write_all(data)?; + let decompressed = decoder.finish()?; if decompressed.len() < 3 { return Err(Error::msg("Invalid data: too short")); @@ -71,7 +74,7 @@ impl PcdSerializable for serde_json::Value { impl PcdSerializable for FileBlob { fn serialize_to_pcd(&self) -> Result> { let mut compressed = Vec::new(); - let mut encoder = zstd::stream::Encoder::new(&mut compressed, ZSTD_COMPRESSION_LEVEL)?; + let mut encoder = DeflateEncoder::new(&mut compressed, Compression::default()); encoder.write_all(&[PCD_VERSION])?; encoder.write_all(&[DataType::FileBlob as u8])?; @@ -87,7 +90,9 @@ impl PcdSerializable for FileBlob { fn deserialize_from_pcd(data: &[u8]) -> Result { let mut decompressed = Vec::new(); - zstd::stream::copy_decode(data, &mut decompressed)?; + let mut decoder = DeflateDecoder::new(&mut decompressed); + decoder.write_all(data)?; + let decompressed = decoder.finish()?; if decompressed.len() < 4 { return Err(Error::msg("Invalid data: too short")); diff --git a/src/process.rs b/src/process.rs index de57944..88b1534 100644 --- a/src/process.rs +++ b/src/process.rs @@ -2,6 +2,7 @@ use anyhow::Result; use std::collections::{BTreeMap, HashMap, HashSet}; use std::str::FromStr; use std::sync::{Mutex, MutexGuard, OnceLock}; +use std::io::Write; use serde::{Deserialize, Serialize}; use sp_client::{ @@ -698,7 +699,7 @@ mod tests { SpClient, SpendKey, }; - use crate::pcd::{Member, ValidationRule, ZSTD_COMPRESSION_LEVEL}; + use crate::pcd::{Member, ValidationRule}; use super::*; @@ -1362,8 +1363,9 @@ mod tests { &Value::String("new_value1".to_owned()), ) .unwrap(); - let updated_value = - zstd::encode_all(serialized_value.as_slice(), ZSTD_COMPRESSION_LEVEL).unwrap(); + let mut encoder = DeflateEncoder::new(Vec::new(), Compression::default()); + encoder.write_all(serialized_value.as_slice()).unwrap(); + let updated_value = encoder.finish().unwrap(); new_state .update_value(key_to_modify.as_str(), updated_value.as_slice()) .unwrap(); @@ -1396,8 +1398,9 @@ mod tests { &Value::String("new_value1".to_owned()), ) .unwrap(); - let updated_value = - zstd::encode_all(serialized_value.as_slice(), ZSTD_COMPRESSION_LEVEL).unwrap(); + let mut encoder = DeflateEncoder::new(Vec::new(), Compression::default()); + encoder.write_all(serialized_value.as_slice()).unwrap(); + let updated_value = encoder.finish().unwrap(); new_state .update_value(key_to_modify.as_str(), updated_value.as_slice()) .unwrap();