Skip to content

Commit f4ae1fc

Browse files
fix: fixes issue #2653 Cannot decode DataContractCreateV1 with WASM-DPP (#2654)
1 parent 4a56fed commit f4ae1fc

File tree

4 files changed

+44
-9
lines changed

4 files changed

+44
-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: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,24 @@ 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)
65+
.map_err(ProtocolError::PlatformVersionError)
66+
.with_js_error()?
67+
} else {
68+
PlatformVersion::latest()
69+
};
70+
71+
DataContractWasm::try_from_serialization_format_with_platform_version(
72+
self.0.data_contract().clone(),
73+
false,
74+
platform_version,
75+
)
6176
}
6277

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

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,24 @@ 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)
66+
.map_err(ProtocolError::PlatformVersionError)
67+
.with_js_error()?
68+
} else {
69+
PlatformVersion::latest()
70+
};
71+
72+
DataContractWasm::try_from_serialization_format_with_platform_version(
73+
self.0.data_contract().clone(),
74+
false,
75+
platform_version,
76+
)
6277
}
6378

6479
// #[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)