diff --git a/packages/wasm-dpp/src/data_contract/data_contract.rs b/packages/wasm-dpp/src/data_contract/data_contract.rs index 5b8134dc29d..a78eab156a1 100644 --- a/packages/wasm-dpp/src/data_contract/data_contract.rs +++ b/packages/wasm-dpp/src/data_contract/data_contract.rs @@ -415,12 +415,11 @@ impl DataContractWasm { self.clone() } - pub(crate) fn try_from_serialization_format( + pub(crate) fn try_from_serialization_format_with_platform_version( value: DataContractInSerializationFormat, full_validation: bool, + platform_version: &PlatformVersion, ) -> Result { - let platform_version = PlatformVersion::first(); - DataContract::try_from_platform_versioned( value, full_validation, diff --git a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs index 81a69a1da6b..e6d10d8da8b 100644 --- a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs +++ b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs @@ -55,9 +55,24 @@ impl DataContractCreateTransitionWasm { } #[wasm_bindgen(js_name=getDataContract)] - pub fn get_data_contract(&self) -> DataContractWasm { - DataContractWasm::try_from_serialization_format(self.0.data_contract().clone(), false) - .expect("should convert from serialziation format") + pub fn get_data_contract( + &self, + protocol_version: Option, + ) -> Result { + // Use provided protocol version or latest if not specified + let platform_version = if let Some(version) = protocol_version { + PlatformVersion::get(version) + .map_err(ProtocolError::PlatformVersionError) + .with_js_error()? + } else { + PlatformVersion::latest() + }; + + DataContractWasm::try_from_serialization_format_with_platform_version( + self.0.data_contract().clone(), + false, + platform_version, + ) } // #[wasm_bindgen(js_name=setDataContractConfig)] diff --git a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs index 1645e2c7a3c..2095c43fb46 100644 --- a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs +++ b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs @@ -56,9 +56,24 @@ impl DataContractUpdateTransitionWasm { } #[wasm_bindgen(js_name=getDataContract)] - pub fn get_data_contract(&self) -> DataContractWasm { - DataContractWasm::try_from_serialization_format(self.0.data_contract().clone(), false) - .expect("should create data contract from serialized format") + pub fn get_data_contract( + &self, + protocol_version: Option, + ) -> Result { + // Use provided protocol version or latest if not specified + let platform_version = if let Some(version) = protocol_version { + PlatformVersion::get(version) + .map_err(ProtocolError::PlatformVersionError) + .with_js_error()? + } else { + PlatformVersion::latest() + }; + + DataContractWasm::try_from_serialization_format_with_platform_version( + self.0.data_contract().clone(), + false, + platform_version, + ) } // #[wasm_bindgen(js_name=setDataContractConfig)] diff --git a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js index dc394aee3c6..2fa931c11ab 100644 --- a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js @@ -46,6 +46,12 @@ describe('DataContractCreateTransition', () => { expect(result.toObject()).to.deep.equal(dataContract.toObject()); }); + + it('should return Data Contract with specific protocol version', () => { + const result = stateTransition.getDataContract(1); + + expect(result.toObject()).to.deep.equal(dataContract.toObject()); + }); }); describe.skip('#toJSON', () => {