feat: Migrer de zstd vers flate2 pour la compatibilité WASM

This commit is contained in:
Debian 2025-08-29 15:07:52 +00:00
parent e98c5e7073
commit 694bc71714
4 changed files with 20 additions and 12 deletions

View File

@ -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 }

View File

@ -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;

View File

@ -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<Vec<u8>>;
@ -36,7 +37,7 @@ pub trait PcdSerializable {
impl PcdSerializable for serde_json::Value {
fn serialize_to_pcd(&self) -> Result<Vec<u8>> {
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<Self> {
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<Vec<u8>> {
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<Self> {
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"));

View File

@ -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();