@dashevo/wasm-dpp 0.25.0-dev.14 → 0.25.0-dev.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/Cargo.toml +5 -1
  2. package/dist/wasm/wasm_dpp.d.ts +1319 -1058
  3. package/dist/wasm/wasm_dpp.js +227 -116
  4. package/dist/wasm/wasm_dpp_bg.js +1 -1
  5. package/lib/test/fixtures/getDataContractFixture.js +9 -1
  6. package/lib/test/fixtures/getIdentityCreditTransferTransitionFixture.js +19 -0
  7. package/lib/wasm/wasm_dpp.d.ts +1319 -1058
  8. package/package.json +4 -4
  9. package/scripts/build-wasm.sh +6 -9
  10. package/src/data_contract/data_contract.rs +12 -0
  11. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +18 -1
  12. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +18 -1
  13. package/src/data_contract_factory/data_contract_factory.rs +11 -2
  14. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -0
  15. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +1 -0
  16. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -0
  17. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -0
  18. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -0
  19. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +1 -0
  20. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +1 -0
  21. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +1 -0
  22. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -0
  23. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -0
  24. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -0
  25. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -0
  26. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -0
  27. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -0
  28. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -0
  29. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -0
  30. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -0
  31. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +1 -0
  32. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -0
  33. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -0
  34. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -0
  35. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -0
  36. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -0
  37. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +1 -0
  38. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -0
  39. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -0
  40. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +1 -0
  41. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -0
  42. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -0
  43. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -0
  44. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -0
  45. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -0
  46. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -0
  47. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -0
  48. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -0
  49. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -0
  50. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -0
  51. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -0
  52. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -0
  53. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -0
  54. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -0
  55. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -0
  56. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -0
  57. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -0
  58. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -0
  59. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -0
  60. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -0
  61. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -0
  62. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -0
  63. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -0
  64. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -0
  65. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -0
  66. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -0
  67. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -0
  68. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +1 -0
  69. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -0
  70. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +1 -0
  71. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -0
  72. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -0
  73. package/src/errors/consensus/basic/json_schema_error.rs +2 -2
  74. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -0
  75. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
  76. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -0
  77. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -0
  78. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -0
  79. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -0
  80. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -0
  81. package/src/errors/consensus/consensus_error.rs +10 -1
  82. package/src/errors/consensus/deserialize.rs +1 -0
  83. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -0
  84. package/src/errors/consensus/signature/basic_bls_error.rs +1 -0
  85. package/src/errors/consensus/signature/basic_ecdsa_error.rs +1 -0
  86. package/src/errors/consensus/signature/identity_not_found_error.rs +1 -0
  87. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +1 -0
  88. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +1 -0
  89. package/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +53 -0
  90. package/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +53 -0
  91. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +1 -0
  92. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +1 -0
  93. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +1 -0
  94. package/src/errors/consensus/state/data_contract/mod.rs +4 -0
  95. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -0
  96. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -0
  97. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -0
  98. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +1 -0
  99. package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +2 -1
  100. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -0
  101. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -0
  102. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -0
  103. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -0
  104. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -0
  105. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -0
  106. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -0
  107. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -0
  108. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -0
  109. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -0
  110. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -0
  111. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -0
  112. package/src/errors/consensus/value_error.rs +1 -0
  113. package/src/identity/identity_facade.rs +20 -2
  114. package/src/identity/identity_factory.rs +20 -2
  115. package/src/identity/state_transition/identity_credit_transfer_transition/apply_identity_credit_transfer_transition.rs +31 -0
  116. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_basic_validator.rs +66 -0
  117. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_state_validator.rs +44 -0
  118. package/src/identity/state_transition/identity_credit_transfer_transition/mod.rs +8 -0
  119. package/src/identity/state_transition/identity_credit_transfer_transition/to_object.rs +52 -0
  120. package/src/identity/state_transition/identity_credit_transfer_transition/transition.rs +311 -0
  121. package/src/identity/state_transition/mod.rs +2 -0
  122. package/src/identity/state_transition/transition_types.rs +4 -0
  123. package/src/state_transition/conversion.rs +11 -1
  124. package/src/state_transition/state_transition_facade.rs +1 -1
  125. package/src/state_transition/state_transition_factory.rs +10 -1
  126. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +5 -0
  127. package/src/utils.rs +2 -1
  128. package/src/validation/validation_result.rs +1 -0
  129. package/test/unit/dataContract/DataContract.spec.js +18 -0
  130. package/test/unit/dataContract/DataContractFactory.spec.js +20 -0
  131. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +10 -0
  132. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +10 -0
  133. package/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +139 -0
package/src/utils.rs CHANGED
@@ -9,6 +9,7 @@ use dpp::{
9
9
  };
10
10
 
11
11
  use dpp::platform_value::Value;
12
+ use dpp::serialization_traits::PlatformDeserializable;
12
13
  use js_sys::{Function, Uint8Array};
13
14
  use serde::de::DeserializeOwned;
14
15
  use serde_json::Value as JsonValue;
@@ -193,7 +194,7 @@ pub fn generic_of_js_val<T: RefFromWasmAbi<Abi = u32>>(
193
194
  .name();
194
195
 
195
196
  if ctor_name == class_name {
196
- let ptr = js_sys::Reflect::get(js_value, &JsValue::from_str("ptr"))?;
197
+ let ptr = js_sys::Reflect::get(js_value, &JsValue::from_str("__wbg_ptr"))?;
197
198
  let ptr_u32: u32 = ptr
198
199
  .as_f64()
199
200
  .ok_or_else(|| JsValue::from(JsError::new("Invalid JS object pointer")))?
@@ -3,6 +3,7 @@ use crate::{
3
3
  errors::consensus::consensus_error::from_consensus_error_ref,
4
4
  utils::{consensus_errors_from_buffers, WithJsError},
5
5
  };
6
+ use dpp::serialization_traits::PlatformDeserializable;
6
7
  use dpp::{consensus::ConsensusError, validation::ConsensusValidationResult};
7
8
  use js_sys::{JsString, Uint8Array};
8
9
  use wasm_bindgen::prelude::*;
@@ -335,4 +335,22 @@ describe('DataContract', () => {
335
335
  expect(dataContract.getMetadata().toObject()).to.deep.equal(otherMetadataToObject);
336
336
  });
337
337
  });
338
+
339
+ describe('#setConfig', () => {
340
+ it('should set config', () => {
341
+ const config = {
342
+ canBeDeleted: true,
343
+ readonly: true,
344
+ keepsHistory: true,
345
+ documentsKeepHistoryContractDefault: true,
346
+ documentsMutableContractDefault: true,
347
+ };
348
+
349
+ dataContract.setConfig(config);
350
+
351
+ const restoredConfig = dataContract.getConfig();
352
+
353
+ expect(config).to.deep.equal(restoredConfig);
354
+ });
355
+ });
338
356
  });
@@ -46,6 +46,26 @@ describe('DataContractFactory', () => {
46
46
 
47
47
  expect(result).excluding('$id').to.deep.equal(rawDataContract);
48
48
  });
49
+
50
+ it('should pass config', () => {
51
+ const config = {
52
+ canBeDeleted: false,
53
+ readonly: false,
54
+ keepsHistory: true,
55
+ documentsKeepHistoryContractDefault: false,
56
+ documentsMutableContractDefault: true,
57
+ };
58
+ const contract = factory.create(
59
+ dataContract.getOwnerId(),
60
+ rawDataContract.documents,
61
+ config,
62
+ );
63
+
64
+ const result = contract.toObject();
65
+
66
+ expect(contract.getConfig()).to.be.deep.equal(config);
67
+ expect(result).excluding('$id').to.deep.equal(rawDataContract);
68
+ });
49
69
  });
50
70
 
51
71
  describe('createFromObject', () => {
@@ -68,6 +68,16 @@ describe('DataContractCreateTransition', () => {
68
68
  expect(result).to.be.instanceOf(Buffer);
69
69
  expect(result).to.have.lengthOf(2271);
70
70
  });
71
+
72
+ it('should be able to restore contract config from bytes', () => {
73
+ const config = stateTransition.getDataContract().getConfig();
74
+ config.keepsHistory = true;
75
+ stateTransition.setDataContractConfig(config);
76
+ expect(stateTransition.getDataContract().getConfig().keepsHistory).to.be.true();
77
+ const buffer = stateTransition.toBuffer();
78
+ const restoredSt = DataContractCreateTransition.fromBuffer(buffer);
79
+ expect(restoredSt.getDataContract().getConfig().keepsHistory).to.be.true();
80
+ });
71
81
  });
72
82
 
73
83
  describe('#getOwnerId', () => {
@@ -68,6 +68,16 @@ describe('DataContractUpdateTransition', () => {
68
68
  expect(result).to.be.instanceOf(Buffer);
69
69
  expect(result).to.have.lengthOf(2239);
70
70
  });
71
+
72
+ it('should be able to restore contract config from bytes', () => {
73
+ const config = stateTransition.getDataContract().getConfig();
74
+ config.keepsHistory = true;
75
+ stateTransition.setDataContractConfig(config);
76
+ expect(stateTransition.getDataContract().getConfig().keepsHistory).to.be.true();
77
+ const buffer = stateTransition.toBuffer();
78
+ const restoredSt = DataContractUpdateTransition.fromBuffer(buffer);
79
+ expect(restoredSt.getDataContract().getConfig().keepsHistory).to.be.true();
80
+ });
71
81
  });
72
82
 
73
83
  describe.skip('#hash', () => {
@@ -0,0 +1,139 @@
1
+ const getIdentityCreditTransferTransitionFixture = require('../../../../../lib/test/fixtures/getIdentityCreditTransferTransitionFixture');
2
+
3
+ const { default: loadWasmDpp } = require('../../../../..');
4
+ const { getLatestProtocolVersion, StateTransitionTypes } = require('../../../../..');
5
+
6
+ describe('IdentityCreditTransferTransition', () => {
7
+ let rawStateTransition;
8
+ let stateTransition;
9
+
10
+ let IdentityCreditTransferTransition;
11
+ let Identifier;
12
+
13
+ before(async () => {
14
+ ({
15
+ IdentityCreditTransferTransition, Identifier,
16
+ } = await loadWasmDpp());
17
+ });
18
+
19
+ beforeEach(async () => {
20
+ rawStateTransition = (await getIdentityCreditTransferTransitionFixture()).toObject();
21
+
22
+ stateTransition = new IdentityCreditTransferTransition(
23
+ rawStateTransition,
24
+ );
25
+ });
26
+
27
+ describe('#constructor', () => {
28
+ it('should create an instance with specified data from specified raw transition', () => {
29
+ expect(stateTransition.getIdentityId().toBuffer()).to.be.deep.equal(
30
+ rawStateTransition.identityId,
31
+ );
32
+ expect(stateTransition.getRecipientId().toBuffer()).to.be.deep.equal(
33
+ rawStateTransition.recipientId,
34
+ );
35
+ expect(stateTransition.getAmount()).to.be.equal(
36
+ rawStateTransition.amount,
37
+ );
38
+ });
39
+ });
40
+
41
+ describe('#getType', () => {
42
+ it('should return IDENTITY_CREDIT_TRANSFER type', () => {
43
+ expect(stateTransition.getType()).to.equal(StateTransitionTypes.IdentityCreditTransfer);
44
+ });
45
+ });
46
+
47
+ describe('#getIdentityId', () => {
48
+ it('should return identity id', () => {
49
+ expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal(
50
+ rawStateTransition.identityId,
51
+ );
52
+ });
53
+ });
54
+
55
+ describe('#getRecipientId', () => {
56
+ it('should return recipient id', () => {
57
+ expect(stateTransition.getRecipientId().toBuffer()).to.deep.equal(
58
+ rawStateTransition.recipientId,
59
+ );
60
+ });
61
+ });
62
+
63
+ describe('#toObject', () => {
64
+ it('should return raw state transition', () => {
65
+ rawStateTransition = stateTransition.toObject();
66
+
67
+ expect(rawStateTransition).to.deep.equal({
68
+ protocolVersion: getLatestProtocolVersion(),
69
+ type: StateTransitionTypes.IdentityCreditTransfer,
70
+ identityId: rawStateTransition.identityId,
71
+ recipientId: rawStateTransition.recipientId,
72
+ amount: rawStateTransition.amount,
73
+ signature: Buffer.alloc(32).fill(0),
74
+ signaturePublicKeyId: 0,
75
+ });
76
+ });
77
+
78
+ it('should return raw state transition', () => {
79
+ rawStateTransition = stateTransition.toObject({ skipSignature: true });
80
+
81
+ expect(rawStateTransition).to.deep.equal({
82
+ protocolVersion: getLatestProtocolVersion(),
83
+ type: StateTransitionTypes.IdentityCreditTransfer,
84
+ identityId: rawStateTransition.identityId,
85
+ recipientId: rawStateTransition.recipientId,
86
+ amount: rawStateTransition.amount,
87
+ });
88
+ });
89
+ });
90
+
91
+ describe('#toJSON', () => {
92
+ it('should return JSON representation of state transition', () => {
93
+ const jsonStateTransition = stateTransition.toJSON();
94
+
95
+ expect(jsonStateTransition).to.deep.equal({
96
+ protocolVersion: getLatestProtocolVersion(),
97
+ type: StateTransitionTypes.IdentityCreditTransfer,
98
+ identityId: new Identifier(rawStateTransition.identityId).toString(),
99
+ recipientId: new Identifier(rawStateTransition.recipientId).toString(),
100
+ amount: rawStateTransition.amount,
101
+ signature: Buffer.alloc(32).fill(0).toString('base64'),
102
+ signaturePublicKeyId: 0,
103
+ });
104
+ });
105
+ });
106
+
107
+ describe('#getModifiedDataIds', () => {
108
+ it('should return ids of topped up identity', () => {
109
+ const result = stateTransition.getModifiedDataIds();
110
+
111
+ expect(result.length).to.be.equal(2);
112
+ const [identityId, recipientId] = result;
113
+
114
+ expect(identityId).to.be.an.instanceOf(Identifier);
115
+ expect(identityId.toBuffer()).to.be.deep.equal(rawStateTransition.identityId);
116
+
117
+ expect(recipientId).to.be.an.instanceOf(Identifier);
118
+ expect(recipientId.toBuffer()).to.be.deep.equal(rawStateTransition.recipientId);
119
+ });
120
+ });
121
+
122
+ describe('#isDataContractStateTransition', () => {
123
+ it('should return false', () => {
124
+ expect(stateTransition.isDataContractStateTransition()).to.be.false();
125
+ });
126
+ });
127
+
128
+ describe('#isDocumentStateTransition', () => {
129
+ it('should return false', () => {
130
+ expect(stateTransition.isDocumentStateTransition()).to.be.false();
131
+ });
132
+ });
133
+
134
+ describe('#isIdentityStateTransition', () => {
135
+ it('should return true', () => {
136
+ expect(stateTransition.isIdentityStateTransition()).to.be.true();
137
+ });
138
+ });
139
+ });