feat: Migrer de zstd vers flate2 pour la compatibilité WASM
This commit is contained in:
parent
e98c5e7073
commit
694bc71714
@ -21,7 +21,7 @@ rand = "0.8.5"
|
|||||||
serde = { version = "1.0.193", features = ["derive"] }
|
serde = { version = "1.0.193", features = ["derive"] }
|
||||||
serde_json = { version = "1.0.108" }
|
serde_json = { version = "1.0.108" }
|
||||||
rs_merkle = "1.4.2"
|
rs_merkle = "1.4.2"
|
||||||
zstd = "0.13.3"
|
flate2 = { version = "1.0", features = ["miniz_oxide"] }
|
||||||
getrandom = { version = "0.2", features = ["js"] }
|
getrandom = { version = "0.2", features = ["js"] }
|
||||||
sp-client = { git = "https://github.com/Sosthene00/sp-client.git", branch = "dev", default-features = false }
|
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 }
|
backend-blindbit-native = { git = "https://github.com/Sosthene00/sp-client.git", branch = "dev", optional = true }
|
||||||
|
@ -11,7 +11,7 @@ pub use serde_json;
|
|||||||
pub use sp_client;
|
pub use sp_client;
|
||||||
pub use tsify;
|
pub use tsify;
|
||||||
pub use wasm_bindgen;
|
pub use wasm_bindgen;
|
||||||
pub use zstd;
|
pub use flate2;
|
||||||
|
|
||||||
#[cfg(feature = "blindbit-wasm")]
|
#[cfg(feature = "blindbit-wasm")]
|
||||||
pub use js_sys;
|
pub use js_sys;
|
||||||
|
15
src/pcd.rs
15
src/pcd.rs
@ -14,6 +14,8 @@ use sp_client::{
|
|||||||
silentpayments::SilentPaymentAddress,
|
silentpayments::SilentPaymentAddress,
|
||||||
};
|
};
|
||||||
use tsify::Tsify;
|
use tsify::Tsify;
|
||||||
|
use flate2::write::{DeflateEncoder, DeflateDecoder};
|
||||||
|
use flate2::Compression;
|
||||||
|
|
||||||
use crate::hash::AnkPcdHash;
|
use crate::hash::AnkPcdHash;
|
||||||
use crate::serialization::OutPointMemberMap;
|
use crate::serialization::OutPointMemberMap;
|
||||||
@ -24,7 +26,6 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const PCD_VERSION: u8 = 1;
|
pub const PCD_VERSION: u8 = 1;
|
||||||
pub(crate) const ZSTD_COMPRESSION_LEVEL: i32 = zstd::DEFAULT_COMPRESSION_LEVEL;
|
|
||||||
|
|
||||||
pub trait PcdSerializable {
|
pub trait PcdSerializable {
|
||||||
fn serialize_to_pcd(&self) -> Result<Vec<u8>>;
|
fn serialize_to_pcd(&self) -> Result<Vec<u8>>;
|
||||||
@ -36,7 +37,7 @@ pub trait PcdSerializable {
|
|||||||
impl PcdSerializable for serde_json::Value {
|
impl PcdSerializable for serde_json::Value {
|
||||||
fn serialize_to_pcd(&self) -> Result<Vec<u8>> {
|
fn serialize_to_pcd(&self) -> Result<Vec<u8>> {
|
||||||
let mut compressed = Vec::new();
|
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(&[PCD_VERSION])?;
|
||||||
encoder.write_all(&[DataType::Json as u8])?;
|
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> {
|
fn deserialize_from_pcd(data: &[u8]) -> Result<Self> {
|
||||||
let mut decompressed = Vec::new();
|
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 {
|
if decompressed.len() < 3 {
|
||||||
return Err(Error::msg("Invalid data: too short"));
|
return Err(Error::msg("Invalid data: too short"));
|
||||||
@ -71,7 +74,7 @@ impl PcdSerializable for serde_json::Value {
|
|||||||
impl PcdSerializable for FileBlob {
|
impl PcdSerializable for FileBlob {
|
||||||
fn serialize_to_pcd(&self) -> Result<Vec<u8>> {
|
fn serialize_to_pcd(&self) -> Result<Vec<u8>> {
|
||||||
let mut compressed = Vec::new();
|
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(&[PCD_VERSION])?;
|
||||||
encoder.write_all(&[DataType::FileBlob as u8])?;
|
encoder.write_all(&[DataType::FileBlob as u8])?;
|
||||||
@ -87,7 +90,9 @@ impl PcdSerializable for FileBlob {
|
|||||||
|
|
||||||
fn deserialize_from_pcd(data: &[u8]) -> Result<Self> {
|
fn deserialize_from_pcd(data: &[u8]) -> Result<Self> {
|
||||||
let mut decompressed = Vec::new();
|
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 {
|
if decompressed.len() < 4 {
|
||||||
return Err(Error::msg("Invalid data: too short"));
|
return Err(Error::msg("Invalid data: too short"));
|
||||||
|
@ -2,6 +2,7 @@ use anyhow::Result;
|
|||||||
use std::collections::{BTreeMap, HashMap, HashSet};
|
use std::collections::{BTreeMap, HashMap, HashSet};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::{Mutex, MutexGuard, OnceLock};
|
use std::sync::{Mutex, MutexGuard, OnceLock};
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sp_client::{
|
use sp_client::{
|
||||||
@ -698,7 +699,7 @@ mod tests {
|
|||||||
SpClient, SpendKey,
|
SpClient, SpendKey,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::pcd::{Member, ValidationRule, ZSTD_COMPRESSION_LEVEL};
|
use crate::pcd::{Member, ValidationRule};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
@ -1362,8 +1363,9 @@ mod tests {
|
|||||||
&Value::String("new_value1".to_owned()),
|
&Value::String("new_value1".to_owned()),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let updated_value =
|
let mut encoder = DeflateEncoder::new(Vec::new(), Compression::default());
|
||||||
zstd::encode_all(serialized_value.as_slice(), ZSTD_COMPRESSION_LEVEL).unwrap();
|
encoder.write_all(serialized_value.as_slice()).unwrap();
|
||||||
|
let updated_value = encoder.finish().unwrap();
|
||||||
new_state
|
new_state
|
||||||
.update_value(key_to_modify.as_str(), updated_value.as_slice())
|
.update_value(key_to_modify.as_str(), updated_value.as_slice())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -1396,8 +1398,9 @@ mod tests {
|
|||||||
&Value::String("new_value1".to_owned()),
|
&Value::String("new_value1".to_owned()),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let updated_value =
|
let mut encoder = DeflateEncoder::new(Vec::new(), Compression::default());
|
||||||
zstd::encode_all(serialized_value.as_slice(), ZSTD_COMPRESSION_LEVEL).unwrap();
|
encoder.write_all(serialized_value.as_slice()).unwrap();
|
||||||
|
let updated_value = encoder.finish().unwrap();
|
||||||
new_state
|
new_state
|
||||||
.update_value(key_to_modify.as_str(), updated_value.as_slice())
|
.update_value(key_to_modify.as_str(), updated_value.as_slice())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user