From bdd100120a5b0a3d2e8e695e82e317a20f8fe20c Mon Sep 17 00:00:00 2001 From: Sosthene Date: Tue, 24 Jun 2025 17:30:51 +0200 Subject: [PATCH] Update decode_value to zstd --- src/api.rs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/api.rs b/src/api.rs index a92e3d6..bb2b33f 100644 --- a/src/api.rs +++ b/src/api.rs @@ -65,7 +65,7 @@ use sdk_common::network::{ NewTxMessage, }; use sdk_common::pcd::{ - FileBlob, Member, Pcd, PcdCommitments, RoleDefinition, Roles, ValidationRule + DataType, FileBlob, Member, Pcd, PcdCommitments, RoleDefinition, Roles, ValidationRule, PCD_VERSION, PcdSerializable }; use sdk_common::prd::{AnkPrdHash, Prd, PrdType}; use sdk_common::silentpayments::{create_transaction as internal_create_transaction, sign_transaction as internal_sign_tx, TsUnsignedTransaction}; @@ -73,7 +73,7 @@ use sdk_common::sp_client::{FeeRate, OutputSpendStatus, OwnedOutput, Recipient, use sdk_common::secrets::SecretsStore; use crate::user::{lock_local_device, set_new_device, LOCAL_DEVICE}; -use crate::wallet::{generate_sp_wallet, lock_freezed_utxos}; +use crate::wallet::{generate_sp_wallet, lock_freezed_utxos, scan_blocks}; const EMPTYSTATEID: &str = "0000000000000000000000000000000000000000000000000000000000000000"; @@ -1711,18 +1711,29 @@ pub fn encode_json(json_data: JsValue) -> ApiResult { #[wasm_bindgen] pub fn decode_value(value: Vec) -> ApiResult { - if let Ok(deserialized) = sdk_common::serialization::ciborium_deserialize::(&value) { - let u8IntArray = Uint8Array::from(deserialized.data.as_slice()); + // Try FileBlob first + if let Ok(file_blob) = sdk_common::pcd::FileBlob::deserialize_from_pcd(&value) { + let u8IntArray = Uint8Array::from(file_blob.data.as_slice()); let res = Object::new(); - Reflect::set(&res, &JsValue::from_str("type"), &JsValue::from_str(&deserialized.r#type)); - Reflect::set(&res, &JsValue::from_str("data"), &JsValue::from(u8IntArray)); - Ok(JsValue::from(res)) - } else { - let res: Value = sdk_common::serialization::ciborium_deserialize(&value)?; - return Ok(serde_wasm_bindgen::to_value(&res)?); + Reflect::set(&res, &JsValue::from_str("type"), &JsValue::from_str(&file_blob.r#type)).unwrap(); + Reflect::set(&res, &JsValue::from_str("data"), &JsValue::from(u8IntArray)).unwrap(); + return Ok(JsValue::from(res)); } + // Try JSON next + if let Ok(json) = serde_json::Value::deserialize_from_pcd(&value) { + return Ok(serde_wasm_bindgen::to_value(&json)?); + } + Err(ApiError::new("Invalid or unsupported PCD data".to_owned())) } +// #[wasm_bindgen] +// pub fn hash_value(value: JsValue, commited_in: String, label: String) -> ApiResult { +// let outpoint = OutPoint::from_str(&commited_in)?; +// let encoded_value = sdk_common::serialization::ciborium_serialize(&serde_wasm_bindgen::from_value::(value)?)?; +// let hash = AnkPcdHash::from_pcd_value(encoded_value.as_slice(), label.as_bytes(), &outpoint); +// Ok(hash.as_byte_array().to_lower_hex_string()) +// } + #[wasm_bindgen] pub fn hash_value(value: JsValue, commited_in: String, label: String) -> ApiResult { let outpoint = OutPoint::from_str(&commited_in)?;