Skip to content

Commit 64fefde

Browse files
fix: fixes issue #2653 Cannot decode DataContractCreateV1 with WASM-DPP
1 parent 5008b6d commit 64fefde

File tree

4 files changed

+40
-9
lines changed

4 files changed

+40
-9
lines changed

packages/wasm-dpp/src/data_contract/data_contract.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,11 @@ impl DataContractWasm {
415415
self.clone()
416416
}
417417

418-
pub(crate) fn try_from_serialization_format(
418+
pub(crate) fn try_from_serialization_format_with_platform_version(
419419
value: DataContractInSerializationFormat,
420420
full_validation: bool,
421+
platform_version: &PlatformVersion,
421422
) -> Result<Self, JsValue> {
422-
let platform_version = PlatformVersion::first();
423-
424423
DataContract::try_from_platform_versioned(
425424
value,
426425
full_validation,

packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,22 @@ impl DataContractCreateTransitionWasm {
5555
}
5656

5757
#[wasm_bindgen(js_name=getDataContract)]
58-
pub fn get_data_contract(&self) -> DataContractWasm {
59-
DataContractWasm::try_from_serialization_format(self.0.data_contract().clone(), false)
60-
.expect("should convert from serialziation format")
58+
pub fn get_data_contract(
59+
&self,
60+
protocol_version: Option<u32>,
61+
) -> Result<DataContractWasm, JsValue> {
62+
// Use provided protocol version or latest if not specified
63+
let platform_version = if let Some(version) = protocol_version {
64+
PlatformVersion::get(version).with_js_error()?
65+
} else {
66+
PlatformVersion::latest()
67+
};
68+
69+
DataContractWasm::try_from_serialization_format_with_platform_version(
70+
self.0.data_contract().clone(),
71+
false,
72+
platform_version,
73+
)
6174
}
6275

6376
// #[wasm_bindgen(js_name=setDataContractConfig)]

packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,22 @@ impl DataContractUpdateTransitionWasm {
5656
}
5757

5858
#[wasm_bindgen(js_name=getDataContract)]
59-
pub fn get_data_contract(&self) -> DataContractWasm {
60-
DataContractWasm::try_from_serialization_format(self.0.data_contract().clone(), false)
61-
.expect("should create data contract from serialized format")
59+
pub fn get_data_contract(
60+
&self,
61+
protocol_version: Option<u32>,
62+
) -> Result<DataContractWasm, JsValue> {
63+
// Use provided protocol version or latest if not specified
64+
let platform_version = if let Some(version) = protocol_version {
65+
PlatformVersion::get(version).with_js_error()?
66+
} else {
67+
PlatformVersion::latest()
68+
};
69+
70+
DataContractWasm::try_from_serialization_format_with_platform_version(
71+
self.0.data_contract().clone(),
72+
false,
73+
platform_version,
74+
)
6275
}
6376

6477
// #[wasm_bindgen(js_name=setDataContractConfig)]

packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ describe('DataContractCreateTransition', () => {
4646

4747
expect(result.toObject()).to.deep.equal(dataContract.toObject());
4848
});
49+
50+
it('should return Data Contract with specific protocol version', () => {
51+
const result = stateTransition.getDataContract(1);
52+
53+
expect(result.toObject()).to.deep.equal(dataContract.toObject());
54+
});
4955
});
5056

5157
describe.skip('#toJSON', () => {

0 commit comments

Comments
 (0)