trac-msb 0.2.7 → 0.2.9

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 (187) hide show
  1. package/.github/workflows/publish.yml +8 -16
  2. package/msb.mjs +13 -25
  3. package/package.json +8 -4
  4. package/proto/network.proto +74 -0
  5. package/rpc/{create_server.mjs → create_server.js} +4 -4
  6. package/rpc/{handlers.mjs → handlers.js} +7 -7
  7. package/rpc/routes/{index.mjs → index.js} +1 -1
  8. package/rpc/routes/{v1.mjs → v1.js} +1 -1
  9. package/rpc/rpc_server.js +10 -0
  10. package/rpc/rpc_services.js +48 -7
  11. package/rpc/utils/{helpers.mjs → helpers.js} +1 -1
  12. package/src/config/config.js +137 -0
  13. package/src/config/env.js +63 -0
  14. package/src/core/network/Network.js +133 -119
  15. package/src/core/network/identity/NetworkWalletFactory.js +5 -6
  16. package/src/core/network/protocols/LegacyProtocol.js +67 -0
  17. package/src/core/network/protocols/NetworkMessages.js +48 -0
  18. package/src/core/network/protocols/ProtocolInterface.js +31 -0
  19. package/src/core/network/protocols/ProtocolSession.js +59 -0
  20. package/src/core/network/protocols/V1Protocol.js +64 -0
  21. package/src/core/network/protocols/legacy/NetworkMessageRouter.js +84 -0
  22. package/src/core/network/protocols/legacy/handlers/GetRequestHandler.js +53 -0
  23. package/src/core/network/protocols/legacy/handlers/ResponseHandler.js +37 -0
  24. package/src/core/network/{messaging → protocols/legacy}/validators/ValidatorResponse.js +2 -2
  25. package/src/core/network/{messaging → protocols/legacy}/validators/base/BaseResponse.js +13 -6
  26. package/src/core/network/protocols/shared/handlers/RoleOperationHandler.js +88 -0
  27. package/src/core/network/protocols/shared/handlers/SubnetworkOperationHandler.js +93 -0
  28. package/src/core/network/protocols/shared/handlers/TransferOperationHandler.js +57 -0
  29. package/src/core/network/{messaging → protocols/shared}/handlers/base/BaseOperationHandler.js +21 -26
  30. package/src/core/network/{messaging → protocols/shared}/validators/PartialBootstrapDeployment.js +3 -3
  31. package/src/core/network/{messaging → protocols/shared}/validators/PartialRoleAccess.js +15 -12
  32. package/src/core/network/{messaging → protocols/shared}/validators/PartialTransaction.js +10 -11
  33. package/src/core/network/{messaging → protocols/shared}/validators/PartialTransfer.js +10 -7
  34. package/src/core/network/{messaging → protocols/shared}/validators/base/PartialOperation.js +40 -22
  35. package/src/core/network/protocols/v1/NetworkMessageRouter.js +15 -0
  36. package/src/core/network/services/ConnectionManager.js +13 -19
  37. package/src/core/network/services/MessageOrchestrator.js +10 -22
  38. package/src/core/network/services/TransactionPoolService.js +10 -10
  39. package/src/core/network/services/TransactionRateLimiterService.js +5 -3
  40. package/src/core/network/services/ValidatorObserverService.js +46 -21
  41. package/src/core/state/State.js +137 -141
  42. package/src/core/state/utils/address.js +18 -16
  43. package/src/core/state/utils/adminEntry.js +17 -16
  44. package/src/core/state/utils/deploymentEntry.js +15 -15
  45. package/src/core/state/utils/transaction.js +3 -95
  46. package/src/index.js +250 -325
  47. package/src/messages/network/v1/NetworkMessageBuilder.js +325 -0
  48. package/src/messages/network/v1/NetworkMessageDirector.js +137 -0
  49. package/src/messages/network/v1/networkMessageFactory.js +12 -0
  50. package/src/messages/state/ApplyStateMessageBuilder.js +661 -0
  51. package/src/messages/state/ApplyStateMessageDirector.js +516 -0
  52. package/src/messages/state/applyStateMessageFactory.js +12 -0
  53. package/src/utils/buffer.js +53 -1
  54. package/src/utils/check.js +21 -17
  55. package/src/utils/cli.js +0 -8
  56. package/src/utils/cliCommands.js +11 -11
  57. package/src/utils/constants.js +36 -24
  58. package/src/utils/fileUtils.js +1 -4
  59. package/src/utils/helpers.js +9 -20
  60. package/src/utils/migrationUtils.js +2 -2
  61. package/src/utils/normalizers.js +94 -11
  62. package/src/utils/protobuf/network.cjs +840 -0
  63. package/src/utils/protobuf/operationHelpers.js +10 -0
  64. package/tests/acceptance/v1/account/account.test.mjs +2 -2
  65. package/tests/acceptance/v1/balance/balance.test.mjs +1 -1
  66. package/tests/acceptance/v1/broadcast-transaction/broadcast-transaction.test.mjs +11 -2
  67. package/tests/acceptance/v1/rpc.test.mjs +10 -10
  68. package/tests/acceptance/v1/tx/tx.test.mjs +4 -2
  69. package/tests/acceptance/v1/tx-details/tx-details.test.mjs +7 -3
  70. package/tests/fixtures/check.fixtures.js +42 -42
  71. package/tests/fixtures/networkV1.fixtures.js +84 -0
  72. package/tests/fixtures/protobuf.fixtures.js +110 -26
  73. package/tests/helpers/StateNetworkFactory.js +3 -5
  74. package/tests/helpers/autobaseTestHelpers.js +1 -2
  75. package/tests/helpers/config.js +3 -0
  76. package/tests/helpers/setupApplyTests.js +113 -99
  77. package/tests/helpers/transactionPayloads.mjs +26 -12
  78. package/tests/unit/messages/messages.test.js +12 -0
  79. package/tests/unit/messages/network/NetworkMessageBuilder.test.js +276 -0
  80. package/tests/unit/messages/network/NetworkMessageDirector.test.js +203 -0
  81. package/tests/unit/messages/state/applyStateMessageBuilder.complete.test.js +521 -0
  82. package/tests/unit/messages/state/applyStateMessageBuilder.partial.test.js +233 -0
  83. package/tests/unit/network/ConnectionManager.test.js +10 -7
  84. package/tests/unit/network/NetworkWalletFactory.test.js +14 -14
  85. package/tests/unit/network/networkModule.test.js +3 -2
  86. package/tests/unit/state/apply/addAdmin/addAdminHappyPathScenario.js +10 -6
  87. package/tests/unit/state/apply/addAdmin/addAdminScenarioHelpers.js +11 -8
  88. package/tests/unit/state/apply/addAdmin/state.apply.addAdmin.test.js +11 -7
  89. package/tests/unit/state/apply/addIndexer/addIndexerScenarioHelpers.js +18 -20
  90. package/tests/unit/state/apply/addWriter/addWriterScenarioHelpers.js +57 -48
  91. package/tests/unit/state/apply/addWriter/addWriterValidatorRewardScenario.js +2 -1
  92. package/tests/unit/state/apply/adminRecovery/adminRecoveryScenarioHelpers.js +72 -57
  93. package/tests/unit/state/apply/adminRecovery/state.apply.adminRecovery.test.js +3 -7
  94. package/tests/unit/state/apply/appendWhitelist/appendWhitelistScenarioHelpers.js +12 -14
  95. package/tests/unit/state/apply/balanceInitialization/balanceInitializationScenarioHelpers.js +18 -13
  96. package/tests/unit/state/apply/balanceInitialization/nodeEntryBalanceUpdateFailureScenario.js +2 -1
  97. package/tests/unit/state/apply/banValidator/banValidatorBanAndReWhitelistScenario.js +2 -1
  98. package/tests/unit/state/apply/banValidator/banValidatorScenarioHelpers.js +27 -30
  99. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentDuplicateRegistrationScenario.js +2 -1
  100. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentScenarioHelpers.js +24 -21
  101. package/tests/unit/state/apply/common/access-control/adminConsistencyMismatchScenario.js +5 -4
  102. package/tests/unit/state/apply/common/access-control/adminPublicKeyDecodeFailureScenario.js +4 -3
  103. package/tests/unit/state/apply/common/balances/base/requesterBalanceScenarioBase.js +2 -1
  104. package/tests/unit/state/apply/common/commonScenarioHelper.js +16 -16
  105. package/tests/unit/state/apply/common/payload-structure/initializationDisabledScenario.js +10 -5
  106. package/tests/unit/state/apply/common/payload-structure/invalidHashValidationScenario.js +2 -2
  107. package/tests/unit/state/apply/common/requester/requesterNodeEntryBufferMissingScenario.js +2 -1
  108. package/tests/unit/state/apply/common/requester/requesterNodeEntryDecodeFailureScenario.js +2 -1
  109. package/tests/unit/state/apply/common/validatorConsistency/base/validatorConsistencyScenarioBase.js +2 -1
  110. package/tests/unit/state/apply/common/validatorEntryValidation/base/validatorEntryValidationScenarioBase.js +2 -1
  111. package/tests/unit/state/apply/disableInitialization/disableInitializationScenarioHelpers.js +16 -9
  112. package/tests/unit/state/apply/removeIndexer/removeIndexerScenarioHelpers.js +6 -5
  113. package/tests/unit/state/apply/removeWriter/removeWriterScenarioHelpers.js +23 -19
  114. package/tests/unit/state/apply/transfer/transferDoubleSpendAcrossValidatorsScenario.js +45 -36
  115. package/tests/unit/state/apply/transfer/transferScenarioHelpers.js +48 -45
  116. package/tests/unit/state/apply/txOperation/txOperationScenarioHelpers.js +32 -29
  117. package/tests/unit/state/apply/txOperation/txOperationTransferFeeGuardScenarioFactory.js +2 -1
  118. package/tests/unit/state/stateModule.test.js +0 -1
  119. package/tests/unit/state/stateTestUtils.js +7 -3
  120. package/tests/unit/state/utils/address.test.js +3 -3
  121. package/tests/unit/state/utils/adminEntry.test.js +10 -9
  122. package/tests/unit/unit.test.js +1 -1
  123. package/tests/unit/utils/buffer/buffer.test.js +62 -1
  124. package/tests/unit/utils/check/adminControlOperation.test.js +3 -3
  125. package/tests/unit/utils/check/balanceInitializationOperation.test.js +2 -2
  126. package/tests/unit/utils/check/bootstrapDeploymentOperation.test.js +2 -3
  127. package/tests/unit/utils/check/common.test.js +7 -6
  128. package/tests/unit/utils/check/coreAdminOperation.test.js +3 -3
  129. package/tests/unit/utils/check/roleAccessOperation.test.js +3 -2
  130. package/tests/unit/utils/check/transactionOperation.test.js +3 -3
  131. package/tests/unit/utils/check/transferOperation.test.js +3 -3
  132. package/tests/unit/utils/fileUtils/readAddressesFromWhitelistFile.test.js +2 -1
  133. package/tests/unit/utils/fileUtils/readBalanceMigrationFile.test.js +2 -1
  134. package/tests/unit/utils/migrationUtils/validateAddressFromIncomingFile.test.js +7 -0
  135. package/tests/unit/utils/normalizers/normalizers.test.js +469 -0
  136. package/tests/unit/utils/protobuf/operationHelpers.test.js +120 -2
  137. package/tests/unit/utils/utils.test.js +0 -1
  138. package/rpc/rpc_server.mjs +0 -10
  139. package/src/core/network/messaging/NetworkMessages.js +0 -63
  140. package/src/core/network/messaging/handlers/GetRequestHandler.js +0 -112
  141. package/src/core/network/messaging/handlers/ResponseHandler.js +0 -108
  142. package/src/core/network/messaging/handlers/RoleOperationHandler.js +0 -116
  143. package/src/core/network/messaging/handlers/SubnetworkOperationHandler.js +0 -143
  144. package/src/core/network/messaging/handlers/TransferOperationHandler.js +0 -52
  145. package/src/core/network/messaging/routes/NetworkMessageRouter.js +0 -94
  146. package/src/core/network/messaging/validators/AdminResponse.js +0 -58
  147. package/src/core/network/messaging/validators/CustomNodeResponse.js +0 -46
  148. package/src/core/state/utils/indexerEntry.js +0 -105
  149. package/src/messages/base/StateBuilder.js +0 -25
  150. package/src/messages/completeStateMessages/CompleteStateMessageBuilder.js +0 -421
  151. package/src/messages/completeStateMessages/CompleteStateMessageDirector.js +0 -252
  152. package/src/messages/completeStateMessages/CompleteStateMessageOperations.js +0 -299
  153. package/src/messages/partialStateMessages/PartialStateMessageBuilder.js +0 -272
  154. package/src/messages/partialStateMessages/PartialStateMessageDirector.js +0 -137
  155. package/src/messages/partialStateMessages/PartialStateMessageOperations.js +0 -131
  156. package/src/utils/crypto.js +0 -11
  157. package/tests/integration/apply/addAdmin/addAdminBasic.test.js +0 -68
  158. package/tests/integration/apply/addAdmin/addAdminRecovery.test.js +0 -125
  159. package/tests/integration/apply/addIndexer.test.js +0 -237
  160. package/tests/integration/apply/addWhitelist.test.js +0 -53
  161. package/tests/integration/apply/addWriter.test.js +0 -244
  162. package/tests/integration/apply/apply.test.js +0 -19
  163. package/tests/integration/apply/banValidator.test.js +0 -109
  164. package/tests/integration/apply/postTx/invalidSubValues.test.js +0 -103
  165. package/tests/integration/apply/postTx/postTx.test.js +0 -222
  166. package/tests/integration/apply/removeIndexer.test.js +0 -128
  167. package/tests/integration/apply/removeWriter.test.js +0 -167
  168. package/tests/integration/apply/transfer.test.js +0 -81
  169. package/tests/integration/integration.test.js +0 -9
  170. package/tests/unit/messageOperations/assembleAddIndexerMessage.test.js +0 -21
  171. package/tests/unit/messageOperations/assembleAddWriterMessage.test.js +0 -16
  172. package/tests/unit/messageOperations/assembleAdminMessage.test.js +0 -69
  173. package/tests/unit/messageOperations/assembleBanWriterMessage.test.js +0 -16
  174. package/tests/unit/messageOperations/assemblePostTransaction.test.js +0 -442
  175. package/tests/unit/messageOperations/assembleRemoveIndexerMessage.test.js +0 -19
  176. package/tests/unit/messageOperations/assembleRemoveWriterMessage.test.js +0 -17
  177. package/tests/unit/messageOperations/assembleWhitelistMessages.test.js +0 -58
  178. package/tests/unit/messageOperations/commonsStateMessageOperationsTest.js +0 -277
  179. package/tests/unit/messageOperations/stateMessageOperations.test.js +0 -19
  180. package/tests/unit/state/utils/indexerEntry.test.js +0 -83
  181. package/tests/unit/state/utils/transaction.test.js +0 -97
  182. package/tests/unit/utils/crypto/createHash.test.js +0 -15
  183. /package/rpc/{constants.mjs → constants.js} +0 -0
  184. /package/rpc/{cors.mjs → cors.js} +0 -0
  185. /package/rpc/utils/{confirmedParameter.mjs → confirmedParameter.js} +0 -0
  186. /package/rpc/utils/{url.mjs → url.js} +0 -0
  187. /package/src/utils/{operations.js → applyOperations.js} +0 -0
@@ -1,167 +0,0 @@
1
- import {test, hook} from '../../helpers/wrapper.js';
2
- import b4a from 'b4a';
3
- import {
4
- setupMsbAdmin,
5
- initTemporaryDirectory,
6
- removeTemporaryDirectory,
7
- setupMsbWriter,
8
- randomBytes,
9
- setupMsbIndexer,
10
- tryToSyncWriters,
11
- waitForNotIndexer,
12
- waitForNodeState,
13
- } from '../../helpers/setupApplyTests.js';
14
- import {
15
- testKeyPair1,
16
- testKeyPair2,
17
- testKeyPair3,
18
- testKeyPair4,
19
- testKeyPair5,
20
- testKeyPair6
21
- } from '../../fixtures/apply.fixtures.js';
22
- import CompleteStateMessageOperations from '../../../src/messages/completeStateMessages/CompleteStateMessageOperations.js';
23
- import PartialStateMessageOperations from '../../../src/messages/partialStateMessages/PartialStateMessageOperations.js';
24
-
25
- let admin, writer1, writer2, writer3, writer4, indexer, tmpDirectory;
26
-
27
- const sendRemoveWriter = async (invoker, broadcaster) => {
28
- const validity = await invoker.msb.state.getIndexerSequenceState()
29
- const writerRemoval = await PartialStateMessageOperations.assembleRemoveWriterMessage(
30
- invoker.wallet,
31
- b4a.toString(invoker.msb.state.writingKey, 'hex'),
32
- b4a.toString(validity, 'hex')
33
- );
34
-
35
- const raw = await CompleteStateMessageOperations.assembleRemoveWriterMessage(
36
- broadcaster.wallet,
37
- writerRemoval.address,
38
- b4a.from(writerRemoval.rao.tx, 'hex'),
39
- b4a.from(writerRemoval.rao.txv, 'hex'),
40
- b4a.from(writerRemoval.rao.iw, 'hex'),
41
- b4a.from(writerRemoval.rao.in, 'hex'),
42
- b4a.from(writerRemoval.rao.is, 'hex'),
43
- )
44
-
45
- return await broadcaster.msb.state.append(raw)
46
- }
47
-
48
- hook('Initialize nodes for removeWriter tests', async () => {
49
- tmpDirectory = await initTemporaryDirectory()
50
- const randomChannel = randomBytes(32).toString('hex');
51
-
52
- admin = await setupMsbAdmin(testKeyPair1, tmpDirectory, {
53
- enable_tx_apply_logs: false,
54
- enable_interactive_mode: false,
55
- enable_role_requester: false,
56
- enable_validator_observer: false,
57
- channel: randomChannel,
58
- });
59
- writer1 = await setupMsbWriter(admin, 'writer', testKeyPair2, tmpDirectory, admin.options);
60
- writer2 = await setupMsbWriter(admin, 'writer2', testKeyPair3, tmpDirectory, admin.options);
61
- writer3 = await setupMsbWriter(admin, 'writer3', testKeyPair4, tmpDirectory, admin.options);
62
- writer4 = await setupMsbWriter(admin, 'writer4', testKeyPair5, tmpDirectory, admin.options);
63
-
64
- indexer = await setupMsbWriter(admin, 'indexer', testKeyPair6, tmpDirectory, admin.options);
65
- indexer = await setupMsbIndexer(indexer, admin);
66
- })
67
-
68
- test('handleApplyRemoveWriterOperation (apply) - Append removeWriter payload into the base - happy path', async (t) => {
69
- // writer1 is already a writer -> this writer will lose its writer status
70
- // writer2 is already a writer
71
- // writer3 is already a writer
72
- // writer4 is already a writer
73
- // indexer is already an indexer
74
- await sendRemoveWriter(writer1, writer2)
75
- await tryToSyncWriters(admin, writer2, writer3, writer4, indexer);
76
- await waitForNodeState(writer2, writer1.wallet.address, {
77
- wk: writer1.msb.state.writingKey,
78
- isWhitelisted: true,
79
- isWriter: false,
80
- isIndexer: false,
81
- })
82
-
83
- const resultRemoveWriter = await writer2.msb.state.getNodeEntry(writer1.wallet.address); // check if the writer entry was removed successfully in the base
84
-
85
- t.ok(resultRemoveWriter, 'Result should not be null');
86
- t.ok(b4a.equals(resultRemoveWriter.wk, writer1.msb.state.writingKey), 'Result writing key should match writer writing key');
87
- t.is(resultRemoveWriter.isWriter, false, 'Node should not be a writer anymore');
88
- t.is(resultRemoveWriter.isIndexer, false, 'Result should not indicate that the peer is an indexer');
89
- t.is(writer1.msb.state.isWritable(), false, 'peer should not be writable');
90
- });
91
-
92
- test('handleApplyRemoveWriterOperation (apply) - Append removeWriter payload into the base - idempotency', async (t) => {
93
- // writer1 is not a writer.
94
- // writer2 is already a writer -> this writer will lose its writer status
95
- // writer3 is already a writer
96
- // writer4 is already a writer
97
- // indexer is already an indexer.
98
- await sendRemoveWriter(writer2, writer3)
99
- await tryToSyncWriters(admin, writer3, writer4, indexer);
100
- await waitForNodeState(writer3, writer2.wallet.address, {
101
- wk: writer2.msb.state.writingKey,
102
- isWhitelisted: true,
103
- isWriter: false,
104
- isIndexer: false,
105
- });
106
-
107
- const signedLengthAdminBefore = admin.msb.state.getSignedLength();
108
- const signedLengthWriter3Before = writer3.msb.state.getSignedLength();
109
- await sendRemoveWriter(writer2, writer3)
110
- await tryToSyncWriters(admin, writer3, writer4, indexer);
111
- await waitForNodeState(writer3, writer2.wallet.address, {
112
- wk: writer2.msb.state.writingKey,
113
- isWhitelisted: true,
114
- isWriter: false,
115
- isIndexer: false,
116
- });
117
-
118
-
119
- const signedLengthAdminAfter = admin.msb.state.getSignedLength();
120
- const signedLengthWriter3After = writer3.msb.state.getSignedLength();
121
-
122
- t.is(signedLengthAdminBefore, signedLengthAdminAfter, 'Admin signed length should not change');
123
- t.is(signedLengthWriter3Before, signedLengthWriter3After, 'Writer3 signed length should not change');
124
- });
125
-
126
- test('handleApplyRemoveWriterOperation (apply) - Append removeWriter payload into the base - indexer will NOT be removed', async (t) => {
127
- // writer1 is not a writer.
128
- // writer2 is not a writer
129
- // writer3 is already a writer.
130
- // writer4 is already a writer.
131
- // indexer is already an indexer.
132
- await sendRemoveWriter(indexer, admin)
133
- await tryToSyncWriters(admin, writer3, writer4);
134
-
135
- await waitForNodeState(writer3, indexer.wallet.address, {
136
- wk: indexer.msb.state.writingKey,
137
- isWhitelisted: true,
138
- isWriter: false,
139
- isIndexer: false,
140
- })
141
-
142
- await waitForNotIndexer(indexer);
143
- await writer3.msb.state.getNodeEntry(indexer.wallet.address);
144
- const indexersEntry = await writer3.msb.state.getIndexersEntry();
145
-
146
- t.ok(indexersEntry, 'Indexers entry should not be null');
147
- t.ok(indexersEntry.find(({ key }) => b4a.equals(key, indexer.msb.state.writingKey)))
148
- t.is(indexer.msb.state.isWritable(), true, 'Peer should remain writable');
149
- })
150
-
151
- test('handleApplyRemoveWriterOperation (apply) - validator and invoker are the same', async (t) => {
152
- // TODO: Implement when apply tests are fixed
153
- t.pass('Skipping test: Placeholder. To be implemented later.');
154
- });
155
-
156
- hook('Clean up removeWriter setup', async t => {
157
- // close msb instances and remove temp directory
158
- const toClose = []
159
- if (admin?.msb) toClose.push(admin.msb.close());
160
- if (writer1?.msb) toClose.push(writer1.msb.close());
161
- if (writer2?.msb) toClose.push(writer2.msb.close());
162
- if (writer3?.msb) toClose.push(writer3.msb.close());
163
- if (writer4?.msb) toClose.push(writer4.msb.close());
164
- if (indexer?.msb) toClose.push(indexer.msb.close());
165
- await Promise.all(toClose)
166
- if (tmpDirectory) await removeTemporaryDirectory(tmpDirectory);
167
- })
@@ -1,81 +0,0 @@
1
- import b4a from 'b4a';
2
- import { test, hook } from '../../helpers/wrapper.js';
3
- import {
4
- setupMsbAdmin,
5
- initTemporaryDirectory,
6
- randomBytes,
7
- setupMsbWriter,
8
- waitForHash,
9
- removeTemporaryDirectory
10
- } from '../../helpers/setupApplyTests.js';
11
- import {
12
- testKeyPair1,
13
- testKeyPair2,
14
- testKeyPair3,
15
- testKeyPair4
16
- } from '../../fixtures/apply.fixtures.js';
17
- import PartialStateMessageOperations from "../../../src/messages/partialStateMessages/PartialStateMessageOperations.js";
18
- import CompleteStateMessageOperations from '../../../src/messages/completeStateMessages/CompleteStateMessageOperations.js';
19
- import { $TNK } from '../../../src/core/state/utils/balance.js';
20
-
21
- const buildTransfer = async (admin, from, to, amount) => {
22
- const txValidity = await from.msb.state.getIndexerSequenceState()
23
- const tx = await PartialStateMessageOperations.assembleTransferOperationMessage(from.wallet, to.wallet.address, b4a.toString(amount, 'hex'), b4a.toString(txValidity, 'hex'))
24
- return {
25
- raw: await CompleteStateMessageOperations.assembleCompleteTransferOperationMessage(
26
- admin.wallet,
27
- tx.address,
28
- b4a.from(tx.tro.tx, 'hex'),
29
- b4a.from(tx.tro.txv, 'hex'),
30
- b4a.from(tx.tro.in, 'hex'),
31
- tx.tro.to,
32
- b4a.from(tx.tro.am, 'hex'),
33
- b4a.from(tx.tro.is, 'hex'),
34
- ),
35
- hash: tx.tro.tx
36
- }
37
- }
38
-
39
- let admin, writer1, writer2, writer3, tmpDirectory;
40
-
41
- hook('Initialize nodes for addWriter tests', async t => {
42
- const randomChannel = randomBytes(32).toString('hex');
43
- const baseOptions = {
44
- enable_tx_apply_logs: false,
45
- enable_interactive_mode: false,
46
- enable_role_requester: false,
47
- channel: randomChannel,
48
- enable_validator_observer: false
49
- }
50
- tmpDirectory = await initTemporaryDirectory();
51
- admin = await setupMsbAdmin(testKeyPair1, tmpDirectory, baseOptions);
52
- writer1 = await setupMsbWriter(admin, 'writer1', testKeyPair2, tmpDirectory, admin.options)
53
- writer2 = await setupMsbWriter(admin, 'writer2', testKeyPair3, tmpDirectory, admin.options)
54
- writer3 = await setupMsbWriter(admin, 'writer3', testKeyPair4, tmpDirectory, admin.options)
55
- });
56
-
57
- test('handleApplyTransferOperation (apply) - append two transfers', async t => {
58
- const first = await buildTransfer(admin, writer2, writer3, $TNK(1n))
59
- const second = await buildTransfer(admin, writer2, writer3, $TNK(1n))
60
- const raw = [first.raw, second.raw]
61
- await admin.msb.state.base.append(raw)
62
- await Promise.all(
63
- [await waitForHash(writer2, first.hash), await waitForHash(writer2, second.hash)]
64
- );
65
-
66
- const firstResult = await writer2.msb.state.get(first.hash)
67
- const secondResult = await writer2.msb.state.get(second.hash)
68
- t.ok(firstResult, 'First result should not be null');
69
- t.ok(secondResult, 'Second result should not be null');
70
- })
71
-
72
- hook('Clean up handleApplyTransferOperation setup', async t => {
73
- const toClose = []
74
- if (admin?.msb) toClose.push(admin.msb.close());
75
- if (writer1?.msb) toClose.push(writer1.msb.close());
76
- if (writer2?.msb) toClose.push(writer2.msb.close());
77
- if (writer3?.msb) toClose.push(writer3.msb.close());
78
-
79
- await Promise.all(toClose)
80
- if (tmpDirectory) await removeTemporaryDirectory(tmpDirectory);
81
- });
@@ -1,9 +0,0 @@
1
- import { default as test } from 'brittle';
2
-
3
- async function runTests() {
4
- test.pause();
5
- await import('./apply/apply.test.js');
6
- test.resume();
7
- }
8
-
9
- await runTests();
@@ -1,21 +0,0 @@
1
- import test from 'brittle';
2
- import CompleteStateMessageOperations from '../../src/messages/completeStateMessages/CompleteStateMessageOperations.js';
3
- import { OperationType } from '../../src/utils/protobuf/applyOperations.cjs';
4
- import { writingKeyNonAdmin, walletNonAdmin, initAll ,walletAdmin} from '../fixtures/assembleMessage.fixtures.js';
5
- import { messageOperationsBkoTest } from './commonsStateMessageOperationsTest.js';
6
- import { safeDecodeApplyOperation } from '../../src/utils/protobuf/operationHelpers.js';
7
-
8
- const testName = 'assembleAddIndexerMessage';
9
- test(testName, async (t) => {
10
- await initAll();
11
- const assembler = async (wallet, address) => {
12
- return safeDecodeApplyOperation(await CompleteStateMessageOperations.assembleAddIndexerMessage(wallet,address));
13
- }
14
-
15
- await messageOperationsBkoTest(t, testName, assembler, walletAdmin, writingKeyNonAdmin, OperationType.ADD_INDEXER, 2, walletNonAdmin.address);
16
-
17
- });
18
-
19
-
20
-
21
-
@@ -1,16 +0,0 @@
1
- import test from 'brittle';
2
- import CompleteStateMessageOperations from '../../src/messages/completeStateMessages/CompleteStateMessageOperations.js';
3
- import {OperationType} from '../../src/utils/protobuf/applyOperations.cjs';
4
- import {initAll, walletNonAdmin, writingKeyNonAdmin} from '../fixtures/assembleMessage.fixtures.js';
5
- import {messageOperationsEkoTest} from './commonsStateMessageOperationsTest.js';
6
- import {safeDecodeApplyOperation} from '../../src/utils/protobuf/operationHelpers.js';
7
-
8
- const testName = 'assembleAddWriterMessage';
9
- test(testName, async (t) => {
10
- await initAll();
11
- const assembler = async (wallet, writingKey) => {
12
- return safeDecodeApplyOperation(await CompleteStateMessageOperations.assembleAddWriterMessage(wallet, writingKey));
13
- }
14
-
15
- await messageOperationsEkoTest(t, testName, assembler, walletNonAdmin, writingKeyNonAdmin, OperationType.ADD_WRITER, 3, walletNonAdmin.address);
16
- });
@@ -1,69 +0,0 @@
1
- import test from 'brittle';
2
- import b4a from 'b4a';
3
-
4
- import CompleteStateMessageOperations from '../../src/messages/completeStateMessages/CompleteStateMessageOperations.js';
5
- import {default as fixtures} from '../fixtures/assembleMessage.fixtures.js';
6
- import {OperationType} from "../../src/utils/constants.js";
7
- import {bufferToAddress} from "../../src/core/state/utils/address.js";
8
- import {safeDecodeApplyOperation} from '../../src/utils/protobuf/operationHelpers.js';
9
- import {isAddressValid} from "../../src/core/state/utils/address.js";
10
- import {errorMessageIncludes} from "../utils/regexHelper.js";
11
-
12
- test('assembleAdminMessage', async (t) => {
13
- await fixtures.initAll();
14
-
15
- const walletAdmin = fixtures.walletAdmin;
16
- const writingKeyAdmin = fixtures.writingKeyAdmin;
17
- const writingKeyNonAdmin = fixtures.writingKeyNonAdmin;
18
-
19
-
20
- t.test('assembleAdminMessage - setup admin', async (k) => {
21
-
22
- const msg = safeDecodeApplyOperation(await CompleteStateMessageOperations.assembleAddAdminMessage(walletAdmin, writingKeyAdmin));
23
-
24
- k.ok(msg, 'Message should be created');
25
- k.is(Object.keys(msg).length, 3, 'Message should have 3 keys');
26
- k.is(Object.keys(msg.eko).length, 3, 'Message value have 3 keys');
27
- k.is(msg.type, OperationType.ADD_ADMIN, 'Message type should be ADD_ADMIN');
28
- k.is(bufferToAddress(msg.address), walletAdmin.address, 'Message address should be the public key of the wallet');
29
-
30
- k.ok(isAddressValid(msg.address), 'Message address should be a valid address');
31
-
32
- k.ok(b4a.equals(msg.eko.wk, writingKeyAdmin), 'Message wk should be the writing key');
33
- k.is(msg.eko.nonce.length, 32, 'Message nonce should be 32 bytes long');
34
- k.ok(b4a.isBuffer(msg.eko.nonce), 'Message nonce should be a buffer');
35
- k.is(msg.eko.sig.length, 64, 'Message signature should be 64 bytes long')
36
- k.ok(b4a.isBuffer(msg.eko.sig), 'Message signature should be a buffer');
37
- });
38
-
39
- t.test('assembleAdminMessage - admin recovery message', async (k) => {
40
- const msg = safeDecodeApplyOperation(await CompleteStateMessageOperations.assembleAddAdminMessage(walletAdmin, writingKeyNonAdmin));
41
-
42
- k.ok(msg, 'Message should be created');
43
- k.is(Object.keys(msg).length, 3, 'Message should have 3 keys');
44
- k.is(Object.keys(msg.eko).length, 3, 'Message value have 3 keys');
45
- k.is(msg.type, OperationType.ADD_ADMIN, 'Message type should be ADD_ADMIN');
46
-
47
- k.is(bufferToAddress(msg.address), walletAdmin.address, 'Message address should be address of the wallet');
48
- k.ok(isAddressValid(msg.address), 'Message address should be a valid address');
49
-
50
- k.ok(b4a.equals(msg.eko.wk, writingKeyNonAdmin), 'Message wk should be the writing key');
51
- k.is(msg.eko.sig.length, 64, 'Message signature should be 64 bytes long')
52
- k.ok(b4a.isBuffer(msg.eko.sig), 'Message signature should be a buffer');
53
-
54
- });
55
-
56
- t.test('assembleAdminMessage - writer key is null', async (k) => {
57
- await k.exception(
58
- async () => await CompleteStateMessageOperations.assembleAddAdminMessage(walletAdmin, null),
59
- errorMessageIncludes('Writer key must be a 32 length buffer')
60
- );
61
- });
62
-
63
- t.test("assembleAdminMessage - admin wallet is null", async (k) => {
64
- await k.exception(
65
- async () => await CompleteStateMessageOperations.assembleAddAdminMessage(null, writingKeyAdmin),
66
- errorMessageIncludes('Wallet must be a valid wallet object')
67
- );
68
- });
69
- });
@@ -1,16 +0,0 @@
1
- import test from 'brittle';
2
- import CompleteStateMessageOperations from '../../src/messages/completeStateMessages/CompleteStateMessageOperations.js';
3
- import { OperationType } from '../../src/utils/protobuf/applyOperations.cjs';
4
- import { writingKeyNonAdmin, walletNonAdmin, initAll, walletAdmin } from '../fixtures/assembleMessage.fixtures.js';
5
- import { messageOperationsBkoTest } from './commonsStateMessageOperationsTest.js';
6
- import { safeDecodeApplyOperation } from '../../src/utils/protobuf/operationHelpers.js';
7
-
8
- const testName = 'assembleBanWriterMessage';
9
- test(testName, async (t) => {
10
- await initAll();
11
- const assembler = async (wallet,address) => {
12
- return safeDecodeApplyOperation(await CompleteStateMessageOperations.assembleBanWriterMessage(wallet,address));
13
- }
14
- await messageOperationsBkoTest(t, testName, assembler, walletAdmin, writingKeyNonAdmin, OperationType.BAN_VALIDATOR, 2, walletNonAdmin.address);
15
-
16
- });