trac-msb 0.2.18 → 0.2.20

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 (381) hide show
  1. package/README.md +62 -2
  2. package/SECURITY.md +9 -6
  3. package/cli/commandHandler.js +272 -0
  4. package/cli/handlers.js +210 -0
  5. package/cli/interactive.js +182 -0
  6. package/msb.mjs +7 -8
  7. package/package.json +25 -8
  8. package/rpc/create_server.js +44 -44
  9. package/rpc/handlers.js +43 -56
  10. package/rpc/routes/index.js +8 -8
  11. package/rpc/rpc_server.js +6 -2
  12. package/rpc/utils/helpers.js +46 -66
  13. package/scripts/pear-runner.js +170 -0
  14. package/src/config/args.js +60 -13
  15. package/src/config/config.js +138 -10
  16. package/src/config/env.js +36 -18
  17. package/src/core/network/Network.js +130 -34
  18. package/src/core/network/protocols/ProtocolInterface.js +5 -5
  19. package/src/core/network/protocols/connectionPolicies.js +86 -0
  20. package/src/core/network/protocols/legacy/NetworkMessageRouter.js +1 -1
  21. package/src/core/network/protocols/legacy/handlers/BaseStateOperationHandler.js +2 -2
  22. package/src/core/network/protocols/legacy/handlers/LegacyGetRequestHandler.js +3 -3
  23. package/src/core/network/protocols/legacy/handlers/LegacyRoleOperationHandler.js +1 -1
  24. package/src/core/network/protocols/legacy/handlers/LegacySubnetworkOperationHandler.js +1 -1
  25. package/src/core/network/protocols/legacy/handlers/LegacyTransferOperationHandler.js +1 -1
  26. package/src/core/network/protocols/legacy/validators/base/BaseResponse.js +7 -10
  27. package/src/core/network/protocols/shared/validators/PartialBootstrapDeploymentValidator.js +2 -2
  28. package/src/core/network/protocols/shared/validators/PartialOperationValidator.js +23 -23
  29. package/src/core/network/protocols/shared/validators/PartialRoleAccessValidator.js +14 -14
  30. package/src/core/network/protocols/shared/validators/PartialTransactionValidator.js +5 -5
  31. package/src/core/network/protocols/shared/validators/PartialTransferValidator.js +12 -11
  32. package/src/core/network/protocols/v1/V1ProtocolError.js +5 -69
  33. package/src/core/network/protocols/v1/handlers/V1BaseOperationHandler.js +3 -2
  34. package/src/core/network/protocols/v1/handlers/V1BroadcastTransactionOperationHandler.js +130 -247
  35. package/src/core/network/protocols/v1/handlers/V1LivenessOperationHandler.js +6 -5
  36. package/src/core/network/protocols/v1/handlers/broadcastTransaction/BroadcastTransactionErrorMapper.js +84 -0
  37. package/src/core/network/protocols/v1/handlers/broadcastTransaction/BroadcastTransactionOperationStrategies.js +128 -0
  38. package/src/core/network/protocols/v1/handlers/broadcastTransaction/BroadcastTransactionPayloadUtils.js +26 -0
  39. package/src/core/network/protocols/v1/validators/V1BaseOperation.js +32 -31
  40. package/src/core/network/protocols/v1/validators/V1BroadcastTransactionRequest.js +5 -3
  41. package/src/core/network/protocols/v1/validators/V1BroadcastTransactionResponse.js +34 -50
  42. package/src/core/network/protocols/v1/validators/V1ValidationSchema.js +1 -1
  43. package/src/core/network/services/ConnectionManager.js +11 -10
  44. package/src/core/network/services/MessageOrchestrator.js +53 -17
  45. package/src/core/network/services/PendingRequestService.js +22 -19
  46. package/src/core/network/services/TransactionCommitService.js +36 -36
  47. package/src/core/network/services/TransactionPoolService.js +39 -39
  48. package/src/core/network/services/TransactionRateLimiterService.js +8 -4
  49. package/src/core/network/services/ValidatorObserverService.js +397 -110
  50. package/src/core/state/State.js +190 -138
  51. package/src/core/state/utils/address.js +4 -9
  52. package/src/core/state/utils/balance.js +7 -7
  53. package/src/core/state/utils/roles.js +1 -1
  54. package/src/index.js +316 -275
  55. package/src/messages/network/v1/NetworkMessageBuilder.js +12 -21
  56. package/src/messages/network/v1/networkMessageFactory.js +1 -1
  57. package/src/messages/state/ApplyStateMessageBuilder.js +6 -6
  58. package/src/messages/state/applyStateMessageFactory.js +1 -1
  59. package/src/utils/buffer.js +1 -1
  60. package/src/utils/check.js +12 -13
  61. package/src/utils/constants.js +7 -0
  62. package/src/utils/errors.js +20 -0
  63. package/src/utils/fileUtils.js +12 -3
  64. package/src/utils/helpers.js +2 -2
  65. package/src/utils/migrationUtils.js +3 -3
  66. package/.dockerignore +0 -16
  67. package/CODE_OF_CONDUCT.md +0 -128
  68. package/docker-compose.yml +0 -17
  69. package/dockerfile +0 -41
  70. package/docs/fee_distribution.md +0 -89
  71. package/docs/trac_network_http_api.openapi.yaml +0 -889
  72. package/migration/.gitkeep +0 -0
  73. package/proto/applyOperations.proto +0 -117
  74. package/proto/network/v1/enums/message_type.proto +0 -16
  75. package/proto/network/v1/enums/result_code.proto +0 -84
  76. package/proto/network/v1/messages/broadcast_transaction_request.proto +0 -9
  77. package/proto/network/v1/messages/broadcast_transaction_response.proto +0 -13
  78. package/proto/network/v1/messages/liveness_request.proto +0 -8
  79. package/proto/network/v1/messages/liveness_response.proto +0 -11
  80. package/proto/network/v1/network_message.proto +0 -22
  81. package/rpc/rpc_services.js +0 -181
  82. package/scripts/generate-protobufs.js +0 -67
  83. package/src/core/network/identity/NetworkWalletFactory.js +0 -77
  84. package/src/core/network/protocols/shared/errors/SharedValidatorRejectionError.js +0 -27
  85. package/src/utils/cli.js +0 -130
  86. package/src/utils/cliCommands.js +0 -280
  87. package/tests/acceptance/v1/account/account.test.mjs +0 -129
  88. package/tests/acceptance/v1/balance/balance.test.mjs +0 -54
  89. package/tests/acceptance/v1/broadcast-transaction/broadcast-transaction.test.mjs +0 -116
  90. package/tests/acceptance/v1/confirmed-length/confirmed-length.test.mjs +0 -19
  91. package/tests/acceptance/v1/fee/fee.test.mjs +0 -11
  92. package/tests/acceptance/v1/health/health.test.mjs +0 -33
  93. package/tests/acceptance/v1/rpc.test.mjs +0 -95
  94. package/tests/acceptance/v1/tx/tx.test.mjs +0 -133
  95. package/tests/acceptance/v1/tx-details/tx-details.test.mjs +0 -241
  96. package/tests/acceptance/v1/tx-hashes/tx-hashes.test.mjs +0 -72
  97. package/tests/acceptance/v1/tx-payloads-bulk/tx-payloads-bulk.test.mjs +0 -27
  98. package/tests/acceptance/v1/txv/txv.test.mjs +0 -11
  99. package/tests/acceptance/v1/unconfirmed-length/unconfirmed-length.test.mjs +0 -11
  100. package/tests/fixtures/apply.fixtures.js +0 -77
  101. package/tests/fixtures/assembleMessage.fixtures.js +0 -41
  102. package/tests/fixtures/check.fixtures.js +0 -428
  103. package/tests/fixtures/networkV1.fixtures.js +0 -59
  104. package/tests/fixtures/protobuf.fixtures.js +0 -388
  105. package/tests/helpers/StateNetworkFactory.js +0 -155
  106. package/tests/helpers/address.js +0 -6
  107. package/tests/helpers/autobaseTestHelpers.js +0 -419
  108. package/tests/helpers/config.js +0 -4
  109. package/tests/helpers/createTestSignature.js +0 -13
  110. package/tests/helpers/regexHelper.js +0 -3
  111. package/tests/helpers/setupApplyTests.js +0 -587
  112. package/tests/helpers/transactionPayloads.mjs +0 -92
  113. package/tests/helpers/wrapper.js +0 -28
  114. package/tests/unit/messages/messages.test.js +0 -12
  115. package/tests/unit/messages/network/NetworkMessageBuilder.test.js +0 -436
  116. package/tests/unit/messages/network/NetworkMessageDirector.test.js +0 -347
  117. package/tests/unit/messages/state/applyStateMessageBuilder.complete.test.js +0 -525
  118. package/tests/unit/messages/state/applyStateMessageBuilder.partial.test.js +0 -237
  119. package/tests/unit/network/LegacyNetworkMessageRouter.test.js +0 -54
  120. package/tests/unit/network/NetworkWalletFactory.test.js +0 -156
  121. package/tests/unit/network/ProtocolSession.test.js +0 -127
  122. package/tests/unit/network/networkModule.test.js +0 -13
  123. package/tests/unit/network/services/ConnectionManager.test.js +0 -450
  124. package/tests/unit/network/services/MessageOrchestrator.test.js +0 -445
  125. package/tests/unit/network/services/PendingRequestService.test.js +0 -431
  126. package/tests/unit/network/services/TransactionCommitService.test.js +0 -246
  127. package/tests/unit/network/services/TransactionPoolService.test.js +0 -489
  128. package/tests/unit/network/services/TransactionRateLimiterService.test.js +0 -139
  129. package/tests/unit/network/services/ValidatorHealthCheckService.test.js +0 -115
  130. package/tests/unit/network/services/services.test.js +0 -17
  131. package/tests/unit/network/utils/v1TestUtils.js +0 -153
  132. package/tests/unit/network/v1/NetworkMessageRouterV1.test.js +0 -151
  133. package/tests/unit/network/v1/V1BaseOperation.test.js +0 -356
  134. package/tests/unit/network/v1/V1BroadcastTransactionOperationHandler.test.js +0 -129
  135. package/tests/unit/network/v1/V1BroadcastTransactionRequest.test.js +0 -53
  136. package/tests/unit/network/v1/V1BroadcastTransactionResponse.test.js +0 -512
  137. package/tests/unit/network/v1/V1LivenessRequest.test.js +0 -32
  138. package/tests/unit/network/v1/V1LivenessResponse.test.js +0 -45
  139. package/tests/unit/network/v1/V1ResultCode.test.js +0 -84
  140. package/tests/unit/network/v1/V1ValidationSchema.test.js +0 -13
  141. package/tests/unit/network/v1/connectionPolicies.test.js +0 -49
  142. package/tests/unit/network/v1/handlers/V1BaseOperationHandler.test.js +0 -284
  143. package/tests/unit/network/v1/handlers/V1BroadcastTransactionOperationHandler.test.js +0 -794
  144. package/tests/unit/network/v1/handlers/V1LivenessOperationHandler.test.js +0 -193
  145. package/tests/unit/network/v1/v1.handlers.test.js +0 -15
  146. package/tests/unit/network/v1/v1.test.js +0 -19
  147. package/tests/unit/network/v1/v1ValidationSchema/broadcastTransactionRequest.test.js +0 -119
  148. package/tests/unit/network/v1/v1ValidationSchema/broadcastTransactionResponse.test.js +0 -136
  149. package/tests/unit/network/v1/v1ValidationSchema/common.test.js +0 -308
  150. package/tests/unit/network/v1/v1ValidationSchema/livenessRequest.test.js +0 -90
  151. package/tests/unit/network/v1/v1ValidationSchema/livenessResponse.test.js +0 -133
  152. package/tests/unit/state/State.test.js +0 -80
  153. package/tests/unit/state/apply/addAdmin/addAdminHappyPathScenario.js +0 -42
  154. package/tests/unit/state/apply/addAdmin/addAdminScenarioHelpers.js +0 -276
  155. package/tests/unit/state/apply/addAdmin/adminEntryEncodingFailureScenario.js +0 -30
  156. package/tests/unit/state/apply/addAdmin/adminEntryExistsScenario.js +0 -78
  157. package/tests/unit/state/apply/addAdmin/nodeEntryInitializationFailureScenario.js +0 -30
  158. package/tests/unit/state/apply/addAdmin/nonBootstrapNodeScenario.js +0 -68
  159. package/tests/unit/state/apply/addAdmin/state.apply.addAdmin.test.js +0 -159
  160. package/tests/unit/state/apply/addIndexer/addIndexerHappyPathScenario.js +0 -39
  161. package/tests/unit/state/apply/addIndexer/addIndexerMultipleIndexersInTheNetworkScenario.js +0 -167
  162. package/tests/unit/state/apply/addIndexer/addIndexerPretenderAlreadyIndexerScenario.js +0 -21
  163. package/tests/unit/state/apply/addIndexer/addIndexerPretenderNotWriterScenario.js +0 -21
  164. package/tests/unit/state/apply/addIndexer/addIndexerRemoveAndReAddScenario.js +0 -186
  165. package/tests/unit/state/apply/addIndexer/addIndexerScenarioHelpers.js +0 -443
  166. package/tests/unit/state/apply/addIndexer/addIndexerWriterKeyAlreadyRegisteredScenario.js +0 -32
  167. package/tests/unit/state/apply/addIndexer/state.apply.addIndexer.test.js +0 -297
  168. package/tests/unit/state/apply/addWriter/addWriterHappyPathScenario.js +0 -41
  169. package/tests/unit/state/apply/addWriter/addWriterInvalidValidatorSignatureScenario.js +0 -32
  170. package/tests/unit/state/apply/addWriter/addWriterNewWkScenario.js +0 -149
  171. package/tests/unit/state/apply/addWriter/addWriterRequesterAlreadyWriterScenario.js +0 -21
  172. package/tests/unit/state/apply/addWriter/addWriterRequesterBalanceInsufficientScenario.js +0 -21
  173. package/tests/unit/state/apply/addWriter/addWriterRequesterEntryDecodeFailureScenario.js +0 -19
  174. package/tests/unit/state/apply/addWriter/addWriterRequesterEntryMissingScenario.js +0 -19
  175. package/tests/unit/state/apply/addWriter/addWriterRequesterIndexerScenario.js +0 -21
  176. package/tests/unit/state/apply/addWriter/addWriterRequesterNotWhitelistedScenario.js +0 -21
  177. package/tests/unit/state/apply/addWriter/addWriterScenarioHelpers.js +0 -766
  178. package/tests/unit/state/apply/addWriter/addWriterStakeBalanceUpdateFailureScenario.js +0 -50
  179. package/tests/unit/state/apply/addWriter/addWriterStakeInsufficientBalanceScenario.js +0 -29
  180. package/tests/unit/state/apply/addWriter/addWriterStakeInvalidBalanceScenario.js +0 -29
  181. package/tests/unit/state/apply/addWriter/addWriterStakeInvalidEntryScenario.js +0 -21
  182. package/tests/unit/state/apply/addWriter/addWriterStakeStakedBalanceFailureScenario.js +0 -37
  183. package/tests/unit/state/apply/addWriter/addWriterStakeSubtractFailureScenario.js +0 -42
  184. package/tests/unit/state/apply/addWriter/addWriterValidatorRewardScenario.js +0 -106
  185. package/tests/unit/state/apply/addWriter/addWriterWriterKeyMismatchScenario.js +0 -54
  186. package/tests/unit/state/apply/addWriter/addWriterWriterKeyOwnershipScenario.js +0 -54
  187. package/tests/unit/state/apply/addWriter/addWriterZeroWriterKeyScenario.js +0 -29
  188. package/tests/unit/state/apply/addWriter/state.apply.addWriter.test.js +0 -309
  189. package/tests/unit/state/apply/adminRecovery/adminRecoveryHappyPathScenario.js +0 -30
  190. package/tests/unit/state/apply/adminRecovery/adminRecoveryScenarioHelpers.js +0 -881
  191. package/tests/unit/state/apply/adminRecovery/state.apply.adminRecovery.test.js +0 -435
  192. package/tests/unit/state/apply/appendWhitelist/appendWhitelistBanAndReapplyScenario.js +0 -78
  193. package/tests/unit/state/apply/appendWhitelist/appendWhitelistExistingReaderHappyPathScenario.js +0 -98
  194. package/tests/unit/state/apply/appendWhitelist/appendWhitelistFeeAfterDisableScenario.js +0 -66
  195. package/tests/unit/state/apply/appendWhitelist/appendWhitelistHappyPathScenario.js +0 -55
  196. package/tests/unit/state/apply/appendWhitelist/appendWhitelistInsufficientAdminBalanceScenario.js +0 -103
  197. package/tests/unit/state/apply/appendWhitelist/appendWhitelistNodeAlreadyWhitelistedScenario.js +0 -60
  198. package/tests/unit/state/apply/appendWhitelist/appendWhitelistScenarioHelpers.js +0 -189
  199. package/tests/unit/state/apply/appendWhitelist/state.apply.appendWhitelist.test.js +0 -220
  200. package/tests/unit/state/apply/balanceInitialization/balanceInitializationHappyPathScenario.js +0 -82
  201. package/tests/unit/state/apply/balanceInitialization/balanceInitializationScenarioHelpers.js +0 -111
  202. package/tests/unit/state/apply/balanceInitialization/invalidAmountScenario.js +0 -45
  203. package/tests/unit/state/apply/balanceInitialization/nodeEntryBalanceUpdateFailureScenario.js +0 -82
  204. package/tests/unit/state/apply/balanceInitialization/state.apply.balanceInitialization.test.js +0 -189
  205. package/tests/unit/state/apply/banValidator/banValidatorBanAndReWhitelistScenario.js +0 -156
  206. package/tests/unit/state/apply/banValidator/banValidatorHappyPathScenario.js +0 -36
  207. package/tests/unit/state/apply/banValidator/banValidatorScenarioHelpers.js +0 -531
  208. package/tests/unit/state/apply/banValidator/banValidatorSequentialBansScenario.js +0 -74
  209. package/tests/unit/state/apply/banValidator/banValidatorTargetDecodeFailureScenario.js +0 -19
  210. package/tests/unit/state/apply/banValidator/banValidatorTargetIndexerScenario.js +0 -32
  211. package/tests/unit/state/apply/banValidator/banValidatorTargetNodeEntryMissingScenario.js +0 -19
  212. package/tests/unit/state/apply/banValidator/banValidatorTargetRoleUpdateFailureScenario.js +0 -19
  213. package/tests/unit/state/apply/banValidator/banValidatorWhitelistedNonWriterScenario.js +0 -38
  214. package/tests/unit/state/apply/banValidator/banValidatorWhitelistedZeroBalanceScenario.js +0 -91
  215. package/tests/unit/state/apply/banValidator/banValidatorWithdrawFailureScenario.js +0 -19
  216. package/tests/unit/state/apply/banValidator/state.apply.banValidator.test.js +0 -266
  217. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentDuplicateRegistrationScenario.js +0 -143
  218. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentHappyPathScenario.js +0 -26
  219. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentIncompleteOperationScenario.js +0 -94
  220. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentInvalidDeploymentEntryScenario.js +0 -37
  221. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentMultipleBootstrapScenario.js +0 -86
  222. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentScenarioHelpers.js +0 -347
  223. package/tests/unit/state/apply/bootstrapDeployment/invalidValidatorNodeEntryScenario.js +0 -57
  224. package/tests/unit/state/apply/bootstrapDeployment/state.apply.bootstrapDeployment.test.js +0 -429
  225. package/tests/unit/state/apply/common/access-control/adminConsistencyMismatchScenario.js +0 -120
  226. package/tests/unit/state/apply/common/access-control/adminEntryDecodeFailureScenario.js +0 -130
  227. package/tests/unit/state/apply/common/access-control/adminEntryExistsScenario.js +0 -93
  228. package/tests/unit/state/apply/common/access-control/adminEntryMissingScenario.js +0 -108
  229. package/tests/unit/state/apply/common/access-control/adminOnlyGuardScenario.js +0 -126
  230. package/tests/unit/state/apply/common/access-control/adminPublicKeyDecodeFailureScenario.js +0 -121
  231. package/tests/unit/state/apply/common/access-control/roleAccessOperationValidationScenario.js +0 -50
  232. package/tests/unit/state/apply/common/adminControlOperationValidationScenario.js +0 -56
  233. package/tests/unit/state/apply/common/balances/adminEntryUpdateFailureScenario.js +0 -52
  234. package/tests/unit/state/apply/common/balances/base/requesterBalanceScenarioBase.js +0 -198
  235. package/tests/unit/state/apply/common/balances/feeDecodeFailureScenario.js +0 -52
  236. package/tests/unit/state/apply/common/balances/requesterBalanceDecodeFailureScenario.js +0 -15
  237. package/tests/unit/state/apply/common/balances/requesterBalanceFeeApplicationFailureScenario.js +0 -11
  238. package/tests/unit/state/apply/common/balances/requesterBalanceInsufficientScenario.js +0 -15
  239. package/tests/unit/state/apply/common/balances/requesterBalanceUpdateFailureScenario.js +0 -11
  240. package/tests/unit/state/apply/common/balances/validatorEntryRewardFailureScenario.js +0 -11
  241. package/tests/unit/state/apply/common/balances/validatorEntryUpdateFailureScenario.js +0 -11
  242. package/tests/unit/state/apply/common/balances/validatorNodeEntryDecodeFailureScenario.js +0 -40
  243. package/tests/unit/state/apply/common/base/OperationValidationScenarioBase.js +0 -114
  244. package/tests/unit/state/apply/common/commonScenarioHelper.js +0 -103
  245. package/tests/unit/state/apply/common/indexer/indexerNodeEntryDecodeFailureScenario.js +0 -36
  246. package/tests/unit/state/apply/common/indexer/indexerNodeEntryMissingScenario.js +0 -36
  247. package/tests/unit/state/apply/common/indexer/indexerRoleUpdateFailureScenario.js +0 -29
  248. package/tests/unit/state/apply/common/indexer/indexerSequenceStateInvalidScenario.js +0 -66
  249. package/tests/unit/state/apply/common/invalidMessageComponentValidationScenario.js +0 -84
  250. package/tests/unit/state/apply/common/nodeEntryInitializationFailureScenario.js +0 -47
  251. package/tests/unit/state/apply/common/operationAlreadyAppliedScenario.js +0 -85
  252. package/tests/unit/state/apply/common/payload-structure/addressWithInvalidPublicKeyScenario.js +0 -52
  253. package/tests/unit/state/apply/common/payload-structure/initializationDisabledScenario.js +0 -54
  254. package/tests/unit/state/apply/common/payload-structure/invalidAddressValidationScenario.js +0 -73
  255. package/tests/unit/state/apply/common/payload-structure/invalidHashValidationScenario.js +0 -71
  256. package/tests/unit/state/apply/common/payload-structure/invalidPayloadValidationScenario.js +0 -31
  257. package/tests/unit/state/apply/common/payload-structure/invalidSignatureValidationScenario.js +0 -142
  258. package/tests/unit/state/apply/common/payload-structure/partialOperationValidationScenario.js +0 -87
  259. package/tests/unit/state/apply/common/requester/requesterNodeEntryBufferMissingScenario.js +0 -71
  260. package/tests/unit/state/apply/common/requester/requesterNodeEntryDecodeFailureScenario.js +0 -73
  261. package/tests/unit/state/apply/common/requester/requesterNodeEntryMissingScenario.js +0 -36
  262. package/tests/unit/state/apply/common/requesterAddressValidationScenario.js +0 -44
  263. package/tests/unit/state/apply/common/requesterPublicKeyValidationScenario.js +0 -25
  264. package/tests/unit/state/apply/common/transactionValidityMismatchScenario.js +0 -98
  265. package/tests/unit/state/apply/common/validatorConsistency/base/validatorConsistencyScenarioBase.js +0 -202
  266. package/tests/unit/state/apply/common/validatorConsistency/validatorEntryDecodeFailureScenario.js +0 -17
  267. package/tests/unit/state/apply/common/validatorConsistency/validatorEntryMissingScenario.js +0 -44
  268. package/tests/unit/state/apply/common/validatorConsistency/validatorInactiveScenario.js +0 -19
  269. package/tests/unit/state/apply/common/validatorConsistency/validatorWriterKeyMismatchScenario.js +0 -18
  270. package/tests/unit/state/apply/common/validatorEntryValidation/base/validatorEntryValidationScenarioBase.js +0 -315
  271. package/tests/unit/state/apply/common/validatorEntryValidation/validatorEntryInvalidBalanceScenario.js +0 -18
  272. package/tests/unit/state/apply/common/writerKeyExistsValidationScenario.js +0 -43
  273. package/tests/unit/state/apply/disableInitialization/disableInitializationAlreadyDisabledScenario.js +0 -53
  274. package/tests/unit/state/apply/disableInitialization/disableInitializationHappyPathScenario.js +0 -24
  275. package/tests/unit/state/apply/disableInitialization/disableInitializationScenarioHelpers.js +0 -204
  276. package/tests/unit/state/apply/disableInitialization/state.apply.disableInitialization.test.js +0 -161
  277. package/tests/unit/state/apply/missing-tests.md +0 -18
  278. package/tests/unit/state/apply/removeIndexer/removeIndexerHappyPathScenario.js +0 -58
  279. package/tests/unit/state/apply/removeIndexer/removeIndexerReAddAndRemoveAgainScenario.js +0 -98
  280. package/tests/unit/state/apply/removeIndexer/removeIndexerRemoveMultipleIndexersScenario.js +0 -167
  281. package/tests/unit/state/apply/removeIndexer/removeIndexerScenarioHelpers.js +0 -429
  282. package/tests/unit/state/apply/removeIndexer/removeIndexerTargetNotIndexerScenario.js +0 -22
  283. package/tests/unit/state/apply/removeIndexer/removeIndexerWriterKeyMissingScenario.js +0 -20
  284. package/tests/unit/state/apply/removeIndexer/state.apply.removeIndexer.test.js +0 -291
  285. package/tests/unit/state/apply/removeWriter/removeWriterAndAddWriterAgainScenario.js +0 -87
  286. package/tests/unit/state/apply/removeWriter/removeWriterHappyPathScenario.js +0 -38
  287. package/tests/unit/state/apply/removeWriter/removeWriterInvalidValidatorSignatureScenario.js +0 -32
  288. package/tests/unit/state/apply/removeWriter/removeWriterRequesterBalanceInsufficientScenario.js +0 -21
  289. package/tests/unit/state/apply/removeWriter/removeWriterRequesterEntryDecodeFailureScenario.js +0 -19
  290. package/tests/unit/state/apply/removeWriter/removeWriterRequesterEntryMissingScenario.js +0 -19
  291. package/tests/unit/state/apply/removeWriter/removeWriterRequesterIndexerScenario.js +0 -21
  292. package/tests/unit/state/apply/removeWriter/removeWriterRequesterNotWriterScenario.js +0 -21
  293. package/tests/unit/state/apply/removeWriter/removeWriterRequesterRoleUpdateFailureScenario.js +0 -19
  294. package/tests/unit/state/apply/removeWriter/removeWriterScenarioHelpers.js +0 -348
  295. package/tests/unit/state/apply/removeWriter/removeWriterThroughWriterValidatorScenario.js +0 -113
  296. package/tests/unit/state/apply/removeWriter/removeWriterUnstakeFailureScenario.js +0 -33
  297. package/tests/unit/state/apply/removeWriter/removeWriterWriterKeyMismatchScenario.js +0 -21
  298. package/tests/unit/state/apply/removeWriter/removeWriterWriterKeyOwnershipScenario.js +0 -26
  299. package/tests/unit/state/apply/removeWriter/removeWriterWriterKeyRegistryMissingScenario.js +0 -22
  300. package/tests/unit/state/apply/removeWriter/state.apply.removeWriter.test.js +0 -307
  301. package/tests/unit/state/apply/state.apply.test.js +0 -24
  302. package/tests/unit/state/apply/transfer/state.apply.transfer.test.js +0 -819
  303. package/tests/unit/state/apply/transfer/transferContractSchemaValidationScenario.js +0 -22
  304. package/tests/unit/state/apply/transfer/transferDoubleSpendAcrossValidatorsScenario.js +0 -146
  305. package/tests/unit/state/apply/transfer/transferDoubleSpendSameBatchScenario.js +0 -63
  306. package/tests/unit/state/apply/transfer/transferDoubleSpendSingleValidatorScenario.js +0 -67
  307. package/tests/unit/state/apply/transfer/transferExistingRecipientAmountScenario.js +0 -31
  308. package/tests/unit/state/apply/transfer/transferExistingRecipientZeroAmountScenario.js +0 -31
  309. package/tests/unit/state/apply/transfer/transferHandlerGuardScenarios.js +0 -22
  310. package/tests/unit/state/apply/transfer/transferHappyPathScenario.js +0 -8
  311. package/tests/unit/state/apply/transfer/transferInvalidIncomingDataScenario.js +0 -66
  312. package/tests/unit/state/apply/transfer/transferNewRecipientAmountScenario.js +0 -31
  313. package/tests/unit/state/apply/transfer/transferNewRecipientZeroAmountScenario.js +0 -31
  314. package/tests/unit/state/apply/transfer/transferScenarioHelpers.js +0 -1170
  315. package/tests/unit/state/apply/transfer/transferSelfTransferAmountScenario.js +0 -38
  316. package/tests/unit/state/apply/transfer/transferSelfTransferZeroAmountScenario.js +0 -38
  317. package/tests/unit/state/apply/transfer/transferValidatorRecipientAmountScenario.js +0 -38
  318. package/tests/unit/state/apply/transfer/transferValidatorRecipientZeroAmountScenario.js +0 -38
  319. package/tests/unit/state/apply/txOperation/state.apply.txOperation.test.js +0 -318
  320. package/tests/unit/state/apply/txOperation/txOperationBootstrapNotRegisteredScenario.js +0 -70
  321. package/tests/unit/state/apply/txOperation/txOperationDifferentValidatorCreatorHappyPathScenario.js +0 -23
  322. package/tests/unit/state/apply/txOperation/txOperationInvalidDeploymentEntryScenario.js +0 -48
  323. package/tests/unit/state/apply/txOperation/txOperationInvalidFeeAmountScenario.js +0 -39
  324. package/tests/unit/state/apply/txOperation/txOperationInvalidSubnetCreatorAddressScenario.js +0 -46
  325. package/tests/unit/state/apply/txOperation/txOperationRequesterCreatorHappyPathScenario.js +0 -21
  326. package/tests/unit/state/apply/txOperation/txOperationScenarioHelpers.js +0 -432
  327. package/tests/unit/state/apply/txOperation/txOperationStandardHappyPathScenario.js +0 -21
  328. package/tests/unit/state/apply/txOperation/txOperationTransferFeeAddCreatorBalanceFailureScenario.js +0 -26
  329. package/tests/unit/state/apply/txOperation/txOperationTransferFeeAddValidatorBalanceFailureScenario.js +0 -25
  330. package/tests/unit/state/apply/txOperation/txOperationTransferFeeAddValidatorBonusFailureScenario.js +0 -27
  331. package/tests/unit/state/apply/txOperation/txOperationTransferFeeDecodeCreatorEntryScenario.js +0 -18
  332. package/tests/unit/state/apply/txOperation/txOperationTransferFeeDecodeRequesterEntryScenario.js +0 -17
  333. package/tests/unit/state/apply/txOperation/txOperationTransferFeeDecodeValidatorEntryScenario.js +0 -31
  334. package/tests/unit/state/apply/txOperation/txOperationTransferFeeGuardBypassScenario.js +0 -49
  335. package/tests/unit/state/apply/txOperation/txOperationTransferFeeGuardScenarioFactory.js +0 -93
  336. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInsufficientRequesterBalanceScenario.js +0 -28
  337. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidCreatorBalanceScenario.js +0 -29
  338. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidRequesterBalanceScenario.js +0 -28
  339. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidRequesterEntryScenario.js +0 -17
  340. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidValidatorBalanceScenario.js +0 -33
  341. package/tests/unit/state/apply/txOperation/txOperationTransferFeeMissingCreatorEntryScenario.js +0 -18
  342. package/tests/unit/state/apply/txOperation/txOperationTransferFeeSubtractFailureScenario.js +0 -25
  343. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateCreatorBalanceFailureScenario.js +0 -26
  344. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateFailureScenario.js +0 -25
  345. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateValidatorBalanceFailureScenario.js +0 -26
  346. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateValidatorBonusFailureScenario.js +0 -27
  347. package/tests/unit/state/apply/txOperation/txOperationValidatorCreatorHappyPathScenario.js +0 -21
  348. package/tests/unit/state/stateModule.test.js +0 -23
  349. package/tests/unit/state/stateTestUtils.js +0 -32
  350. package/tests/unit/state/utils/address.test.js +0 -63
  351. package/tests/unit/state/utils/adminEntry.test.js +0 -52
  352. package/tests/unit/state/utils/balance.test.js +0 -320
  353. package/tests/unit/state/utils/lengthEntry.test.js +0 -54
  354. package/tests/unit/state/utils/nodeEntry.test.js +0 -298
  355. package/tests/unit/state/utils/roles.test.js +0 -44
  356. package/tests/unit/unit.test.js +0 -14
  357. package/tests/unit/utils/amountSerialization/amountSerialization.test.js +0 -237
  358. package/tests/unit/utils/buffer/buffer.test.js +0 -251
  359. package/tests/unit/utils/check/adminControlOperation.test.js +0 -156
  360. package/tests/unit/utils/check/balanceInitializationOperation.test.js +0 -54
  361. package/tests/unit/utils/check/bootstrapDeploymentOperation.test.js +0 -104
  362. package/tests/unit/utils/check/check.test.js +0 -17
  363. package/tests/unit/utils/check/common.test.js +0 -419
  364. package/tests/unit/utils/check/coreAdminOperation.test.js +0 -95
  365. package/tests/unit/utils/check/roleAccessOperation.test.js +0 -255
  366. package/tests/unit/utils/check/transactionOperation.test.js +0 -107
  367. package/tests/unit/utils/check/transferOperation.test.js +0 -102
  368. package/tests/unit/utils/deepEqualApplyPayload/deepEqualApplyPayload.test.js +0 -102
  369. package/tests/unit/utils/fileUtils/readAddressesFromWhitelistFile.test.js +0 -95
  370. package/tests/unit/utils/fileUtils/readBalanceMigrationFile.test.js +0 -149
  371. package/tests/unit/utils/helpers/helpers.test.js +0 -11
  372. package/tests/unit/utils/helpers/isHexString.test.js +0 -12
  373. package/tests/unit/utils/helpers/normalizeHex.test.js +0 -82
  374. package/tests/unit/utils/migrationUtils/validateAddressFromIncomingFile.test.js +0 -100
  375. package/tests/unit/utils/normalizers/normalizers.test.js +0 -469
  376. package/tests/unit/utils/protobuf/applyOperations.test.js +0 -91
  377. package/tests/unit/utils/protobuf/operationHelpers.test.js +0 -303
  378. package/tests/unit/utils/protobuf/protobuf.test.js +0 -12
  379. package/tests/unit/utils/type/type.test.js +0 -25
  380. package/tests/unit/utils/utils.test.js +0 -21
  381. package/whitelist/.gitkeep +0 -0
@@ -1,237 +0,0 @@
1
- import { test } from 'brittle';
2
- import b4a from 'b4a';
3
- import PeerWallet from 'trac-wallet';
4
-
5
- import ApplyStateMessageBuilder from '../../../../src/messages/state/ApplyStateMessageBuilder.js';
6
- import { OperationType } from '../../../../src/utils/constants.js';
7
- import { isHexString } from '../../../../src/utils/helpers.js';
8
- import { config } from '../../../helpers/config.js';
9
- import { testKeyPair1, testKeyPair2 } from '../../../fixtures/apply.fixtures.js';
10
- import { isAddressValid } from '../../../../src/core/state/utils/address.js';
11
-
12
- const hex = (value, bytes) => value.repeat(bytes);
13
-
14
- async function createWallet(mnemonic) {
15
- const wallet = new PeerWallet({
16
- mnemonic,
17
- networkPrefix: config.addressPrefix,
18
- derivationPath: config.derivationPath
19
- });
20
- await wallet.ready;
21
- return wallet;
22
- }
23
-
24
- function expectHexField(t, value, bytes, label) {
25
- t.is(typeof value, 'string', `${label} type`);
26
- t.is(value.length, bytes * 2, `${label} length`);
27
- t.ok(isHexString(value), `${label} hex`);
28
- }
29
-
30
- function expectAddressField(t, value, label) {
31
- t.is(typeof value, 'string', `${label} type`);
32
- t.is(value.length, config.addressLength, `${label} length`);
33
- t.ok(isAddressValid(value, config.addressPrefix), `${label} valid`);
34
- }
35
-
36
- function expectKeys(t, value, keys, label) {
37
- t.alike(Object.keys(value).sort(), keys.slice().sort(), `${label} keys`);
38
- }
39
-
40
- function expectPayloadKeys(t, payload, bodyKey) {
41
- expectKeys(t, payload, ['type', 'address', bodyKey], 'payload');
42
- }
43
-
44
- test('ApplyStateMessageBuilder partial add writer (rao)', async t => {
45
- const wallet = await createWallet(testKeyPair1.mnemonic);
46
- const txValidity = hex('11', 32);
47
- const writingKey = hex('22', 32);
48
-
49
- const builder = new ApplyStateMessageBuilder(wallet, config);
50
- await builder
51
- .setPhase('partial')
52
- .setOutput('json')
53
- .setOperationType(OperationType.ADD_WRITER)
54
- .setAddress(wallet.address)
55
- .setTxValidity(txValidity)
56
- .setWriterKey(writingKey)
57
- .build();
58
-
59
- const payload = builder.getPayload();
60
- t.is(payload.type, OperationType.ADD_WRITER);
61
- t.is(payload.address, wallet.address);
62
- expectAddressField(t, payload.address, 'address');
63
- expectPayloadKeys(t, payload, 'rao');
64
- expectKeys(t, payload.rao, ['tx', 'txv', 'iw', 'in', 'is'], 'rao');
65
- expectHexField(t, payload.rao.tx, 32, 'rao.tx');
66
- expectHexField(t, payload.rao.txv, 32, 'rao.txv');
67
- expectHexField(t, payload.rao.iw, 32, 'rao.iw');
68
- expectHexField(t, payload.rao.in, 32, 'rao.in');
69
- expectHexField(t, payload.rao.is, 64, 'rao.is');
70
- t.is(payload.rao.txv, txValidity);
71
- t.is(payload.rao.iw, writingKey);
72
- });
73
-
74
- test('ApplyStateMessageBuilder partial remove writer (rao)', async t => {
75
- const wallet = await createWallet(testKeyPair1.mnemonic);
76
- const txValidity = hex('33', 32);
77
- const writingKey = hex('44', 32);
78
-
79
- const builder = new ApplyStateMessageBuilder(wallet, config);
80
- await builder
81
- .setPhase('partial')
82
- .setOutput('json')
83
- .setOperationType(OperationType.REMOVE_WRITER)
84
- .setAddress(wallet.address)
85
- .setTxValidity(txValidity)
86
- .setWriterKey(writingKey)
87
- .build();
88
-
89
- const payload = builder.getPayload();
90
- t.is(payload.type, OperationType.REMOVE_WRITER);
91
- t.is(payload.address, wallet.address);
92
- expectPayloadKeys(t, payload, 'rao');
93
- expectKeys(t, payload.rao, ['tx', 'txv', 'iw', 'in', 'is'], 'rao');
94
- expectHexField(t, payload.rao.tx, 32, 'rao.tx');
95
- expectHexField(t, payload.rao.txv, 32, 'rao.txv');
96
- expectHexField(t, payload.rao.iw, 32, 'rao.iw');
97
- expectHexField(t, payload.rao.in, 32, 'rao.in');
98
- expectHexField(t, payload.rao.is, 64, 'rao.is');
99
- t.is(payload.rao.txv, txValidity);
100
- t.is(payload.rao.iw, writingKey);
101
- });
102
-
103
- test('ApplyStateMessageBuilder partial admin recovery (rao)', async t => {
104
- const wallet = await createWallet(testKeyPair1.mnemonic);
105
- const txValidity = hex('55', 32);
106
- const writingKey = hex('66', 32);
107
-
108
- const builder = new ApplyStateMessageBuilder(wallet, config);
109
- await builder
110
- .setPhase('partial')
111
- .setOutput('json')
112
- .setOperationType(OperationType.ADMIN_RECOVERY)
113
- .setAddress(wallet.address)
114
- .setTxValidity(txValidity)
115
- .setWriterKey(writingKey)
116
- .build();
117
-
118
- const payload = builder.getPayload();
119
- t.is(payload.type, OperationType.ADMIN_RECOVERY);
120
- t.is(payload.address, wallet.address);
121
- expectPayloadKeys(t, payload, 'rao');
122
- expectKeys(t, payload.rao, ['tx', 'txv', 'iw', 'in', 'is'], 'rao');
123
- expectHexField(t, payload.rao.tx, 32, 'rao.tx');
124
- expectHexField(t, payload.rao.txv, 32, 'rao.txv');
125
- expectHexField(t, payload.rao.iw, 32, 'rao.iw');
126
- expectHexField(t, payload.rao.in, 32, 'rao.in');
127
- expectHexField(t, payload.rao.is, 64, 'rao.is');
128
- t.is(payload.rao.txv, txValidity);
129
- t.is(payload.rao.iw, writingKey);
130
- });
131
-
132
- test('ApplyStateMessageBuilder partial bootstrap deployment (bdo)', async t => {
133
- const wallet = await createWallet(testKeyPair1.mnemonic);
134
- const txValidity = hex('77', 32);
135
- const externalBootstrap = hex('88', 32);
136
- const channel = hex('99', 32);
137
-
138
- const builder = new ApplyStateMessageBuilder(wallet, config);
139
- await builder
140
- .setPhase('partial')
141
- .setOutput('json')
142
- .setOperationType(OperationType.BOOTSTRAP_DEPLOYMENT)
143
- .setAddress(wallet.address)
144
- .setTxValidity(txValidity)
145
- .setExternalBootstrap(externalBootstrap)
146
- .setChannel(channel)
147
- .build();
148
-
149
- const payload = builder.getPayload();
150
- t.is(payload.type, OperationType.BOOTSTRAP_DEPLOYMENT);
151
- t.is(payload.address, wallet.address);
152
- expectPayloadKeys(t, payload, 'bdo');
153
- expectKeys(t, payload.bdo, ['tx', 'txv', 'bs', 'ic', 'in', 'is'], 'bdo');
154
- expectHexField(t, payload.bdo.tx, 32, 'bdo.tx');
155
- expectHexField(t, payload.bdo.txv, 32, 'bdo.txv');
156
- expectHexField(t, payload.bdo.bs, 32, 'bdo.bs');
157
- expectHexField(t, payload.bdo.ic, 32, 'bdo.ic');
158
- expectHexField(t, payload.bdo.in, 32, 'bdo.in');
159
- expectHexField(t, payload.bdo.is, 64, 'bdo.is');
160
- t.is(payload.bdo.txv, txValidity);
161
- t.is(payload.bdo.bs, externalBootstrap);
162
- t.is(payload.bdo.ic, channel);
163
- });
164
-
165
- test('ApplyStateMessageBuilder partial transaction operation (txo)', async t => {
166
- const wallet = await createWallet(testKeyPair1.mnemonic);
167
- const txValidity = hex('aa', 32);
168
- const writingKey = hex('bb', 32);
169
- const contentHash = hex('cc', 32);
170
- const externalBootstrap = hex('dd', 32);
171
- const msbBootstrap = hex('ee', 32);
172
-
173
- const builder = new ApplyStateMessageBuilder(wallet, config);
174
- await builder
175
- .setPhase('partial')
176
- .setOutput('json')
177
- .setOperationType(OperationType.TX)
178
- .setAddress(wallet.address)
179
- .setTxValidity(txValidity)
180
- .setWriterKey(writingKey)
181
- .setContentHash(contentHash)
182
- .setExternalBootstrap(externalBootstrap)
183
- .setMsbBootstrap(msbBootstrap)
184
- .build();
185
-
186
- const payload = builder.getPayload();
187
- t.is(payload.type, OperationType.TX);
188
- t.is(payload.address, wallet.address);
189
- expectPayloadKeys(t, payload, 'txo');
190
- expectKeys(t, payload.txo, ['tx', 'txv', 'iw', 'ch', 'bs', 'mbs', 'in', 'is'], 'txo');
191
- expectHexField(t, payload.txo.tx, 32, 'txo.tx');
192
- expectHexField(t, payload.txo.txv, 32, 'txo.txv');
193
- expectHexField(t, payload.txo.iw, 32, 'txo.iw');
194
- expectHexField(t, payload.txo.ch, 32, 'txo.ch');
195
- expectHexField(t, payload.txo.bs, 32, 'txo.bs');
196
- expectHexField(t, payload.txo.mbs, 32, 'txo.mbs');
197
- expectHexField(t, payload.txo.in, 32, 'txo.in');
198
- expectHexField(t, payload.txo.is, 64, 'txo.is');
199
- t.is(payload.txo.txv, txValidity);
200
- t.is(payload.txo.iw, writingKey);
201
- t.is(payload.txo.ch, contentHash);
202
- t.is(payload.txo.bs, externalBootstrap);
203
- t.is(payload.txo.mbs, msbBootstrap);
204
- });
205
-
206
- test('ApplyStateMessageBuilder partial transfer operation (tro)', async t => {
207
- const wallet = await createWallet(testKeyPair1.mnemonic);
208
- const otherWallet = await createWallet(testKeyPair2.mnemonic);
209
- const txValidity = hex('ab', 32);
210
- const amount = hex('cd', 16);
211
-
212
- const builder = new ApplyStateMessageBuilder(wallet, config);
213
- await builder
214
- .setPhase('partial')
215
- .setOutput('json')
216
- .setOperationType(OperationType.TRANSFER)
217
- .setAddress(wallet.address)
218
- .setTxValidity(txValidity)
219
- .setIncomingAddress(otherWallet.address)
220
- .setAmount(amount)
221
- .build();
222
-
223
- const payload = builder.getPayload();
224
- t.is(payload.type, OperationType.TRANSFER);
225
- t.is(payload.address, wallet.address);
226
- expectPayloadKeys(t, payload, 'tro');
227
- expectKeys(t, payload.tro, ['tx', 'txv', 'to', 'am', 'in', 'is'], 'tro');
228
- expectHexField(t, payload.tro.tx, 32, 'tro.tx');
229
- expectHexField(t, payload.tro.txv, 32, 'tro.txv');
230
- expectAddressField(t, payload.tro.to, 'tro.to');
231
- expectHexField(t, payload.tro.am, 16, 'tro.am');
232
- expectHexField(t, payload.tro.in, 32, 'tro.in');
233
- expectHexField(t, payload.tro.is, 64, 'tro.is');
234
- t.is(payload.tro.txv, txValidity);
235
- t.is(payload.tro.to, otherWallet.address);
236
- t.is(payload.tro.am, amount);
237
- });
@@ -1,54 +0,0 @@
1
- import { test } from 'brittle';
2
- import sinon from 'sinon';
3
- import b4a from 'b4a';
4
- import { config } from '../../helpers/config.js';
5
- import NetworkMessageRouter from '../../../src/core/network/protocols/legacy/NetworkMessageRouter.js';
6
- import LegacyGetRequestHandler from '../../../src/core/network/protocols/legacy/handlers/LegacyGetRequestHandler.js';
7
- import LegacyResponseHandler from '../../../src/core/network/protocols/legacy/handlers/LegacyResponseHandler.js';
8
- import { NETWORK_MESSAGE_TYPES } from '../../../src/utils/constants.js';
9
-
10
- const makeConnection = (sandbox) => ({
11
- remotePublicKey: b4a.alloc(32, 0x01),
12
- protocolSession: {
13
- setLegacyAsPreferredProtocol: sandbox.stub()
14
- },
15
- end: sandbox.stub()
16
- });
17
-
18
- const makeRouterContext = (t) => {
19
- const sandbox = sinon.createSandbox();
20
- t.teardown(() => sandbox.restore());
21
-
22
- const getHandler = sandbox.stub(LegacyGetRequestHandler.prototype, 'handle').resolves();
23
- const responseHandler = sandbox.stub(LegacyResponseHandler.prototype, 'handle').resolves();
24
- const router = new NetworkMessageRouter({}, { address: 'test-wallet' }, {}, {}, config);
25
- const connection = makeConnection(sandbox);
26
-
27
- return { connection, getHandler, responseHandler, router };
28
- };
29
-
30
- test('LegacyNetworkMessageRouter', async (t) => {
31
- await t.test('routes legacy string GET messages', async (t) => {
32
- const { connection, getHandler, responseHandler, router } = makeRouterContext(t);
33
- const message = NETWORK_MESSAGE_TYPES.GET.VALIDATOR;
34
-
35
- await router.route(message, connection);
36
-
37
- t.ok(connection.protocolSession.setLegacyAsPreferredProtocol.calledOnce, 'should prefer legacy protocol');
38
- t.ok(getHandler.calledOnce, 'should route GET message');
39
- t.ok(responseHandler.notCalled, 'should not route response handler');
40
- t.is(getHandler.firstCall.args[0], message, 'passes GET message through to handler');
41
- });
42
-
43
- await t.test('routes legacy object response messages', async (t) => {
44
- const { connection, getHandler, responseHandler, router } = makeRouterContext(t);
45
- const message = { op: NETWORK_MESSAGE_TYPES.RESPONSE.VALIDATOR };
46
-
47
- await router.route(message, connection);
48
-
49
- t.ok(connection.protocolSession.setLegacyAsPreferredProtocol.calledOnce, 'should prefer legacy protocol');
50
- t.ok(responseHandler.calledOnce, 'should route response message');
51
- t.ok(getHandler.notCalled, 'should not route GET handler');
52
- t.is(responseHandler.firstCall.args[0], message, 'passes response message through to handler');
53
- });
54
- });
@@ -1,156 +0,0 @@
1
- import { test } from 'brittle';
2
- import sinon from 'sinon';
3
- import b4a from 'b4a';
4
-
5
- import PeerWallet from 'trac-wallet';
6
- import NetworkWalletFactory, { EphemeralWallet } from '../../../src/core/network/identity/NetworkWalletFactory.js';
7
- import { errorMessageIncludes } from '../../helpers/regexHelper.js';
8
- import { testKeyPair1, testKeyPair2 } from '../../fixtures/apply.fixtures.js';
9
- import { config } from '../../helpers/config.js';
10
-
11
- test('NetworkWalletFactory.provide returns wallet when enabled', async t => {
12
- const publicKey = b4a.from(testKeyPair2.publicKey, 'hex');
13
- const address = PeerWallet.encodeBech32m(config.addressPrefix, publicKey);
14
- const signResult = b4a.from('abcd', 'hex');
15
- const wallet = {
16
- publicKey,
17
- address,
18
- sign: sinon.stub().returns(signResult),
19
- verify: sinon.stub().returns(true)
20
- };
21
-
22
- const provider = NetworkWalletFactory.provide({ wallet, enableWallet: true, networkPrefix: config.addressPrefix });
23
- const message = b4a.from('00112233', 'hex');
24
- const signature = provider.sign(message);
25
-
26
- t.alike(provider.publicKey, publicKey);
27
- t.is(provider.address, address);
28
- t.alike(signature, signResult);
29
- t.ok(wallet.sign.calledOnceWithExactly(message));
30
-
31
- const verifyResult = provider.verify(signature, message);
32
- t.ok(verifyResult);
33
- t.ok(wallet.verify.calledOnceWithExactly(signature, message));
34
-
35
- sinon.restore();
36
- });
37
-
38
- test('NetworkWalletFactory.provide requires both public and secret keys when wallet disabled', async t => {
39
- const publicKey = b4a.from(testKeyPair1.publicKey, 'hex');
40
- await t.exception(
41
- () => NetworkWalletFactory.provide({ enableWallet: false, keyPair: { publicKey }, networkPrefix: config.addressPrefix }),
42
- errorMessageIncludes('keyPair with publicKey and secretKey is required')
43
- );
44
- });
45
-
46
- test('NetworkWalletFactory.provide rejects non-buffer inputs', async t => {
47
- const secretKey = b4a.from(testKeyPair1.secretKey, 'hex');
48
- await t.exception(
49
- () =>
50
- NetworkWalletFactory.provide({
51
- enableWallet: false,
52
- keyPair: { publicKey: 'not-a-buffer', secretKey },
53
- networkPrefix: config.addressPrefix
54
- }),
55
- errorMessageIncludes('must be a Buffer')
56
- );
57
- });
58
-
59
- test('NetworkWalletFactory.provide propagates invalid public key length errors', async t => {
60
- const secretKey = b4a.from(testKeyPair1.secretKey, 'hex');
61
- const invalidPublicKey = b4a.alloc(10);
62
-
63
- await t.exception(
64
- () =>
65
- NetworkWalletFactory.provide({
66
- enableWallet: false,
67
- keyPair: { publicKey: invalidPublicKey, secretKey },
68
- networkPrefix: config.addressPrefix
69
- }),
70
- errorMessageIncludes('Invalid public key')
71
- );
72
- });
73
-
74
- test('NetworkWalletFactory.provide derives address and signs payloads from keyPair', async t => {
75
- const keyPair = {
76
- publicKey: b4a.from(testKeyPair1.publicKey, 'hex'),
77
- secretKey: b4a.from(testKeyPair1.secretKey, 'hex')
78
- };
79
- const provider = NetworkWalletFactory.provide({
80
- enableWallet: false,
81
- keyPair,
82
- networkPrefix: config.addressPrefix
83
- });
84
- const message = b4a.from('123455555', 'hex');
85
- const signature = provider.sign(message);
86
-
87
- t.is(
88
- provider.address,
89
- PeerWallet.encodeBech32m(config.addressPrefix, provider.publicKey)
90
- );
91
- t.ok(PeerWallet.verify(signature, message, provider.publicKey));
92
- t.ok(provider.verify(signature, message));
93
- });
94
-
95
- test('NetworkWalletFactory handles falsy address derivation results', async t => {
96
- const keyPair = {
97
- publicKey: b4a.from(testKeyPair1.publicKey, 'hex'),
98
- secretKey: b4a.from(testKeyPair1.secretKey, 'hex')
99
- };
100
-
101
- const stub = sinon.stub(PeerWallet, 'encodeBech32m').returns(null);
102
- await t.exception(
103
- () =>
104
- NetworkWalletFactory.provide({
105
- enableWallet: false,
106
- keyPair,
107
- networkPrefix: config.addressPrefix
108
- }),
109
- errorMessageIncludes('failed to derive address')
110
- );
111
- stub.restore();
112
- sinon.restore();
113
- });
114
-
115
- test('NetworkWalletFactory propagates encoder exceptions', async t => {
116
- const keyPair = {
117
- publicKey: b4a.from(testKeyPair1.publicKey, 'hex'),
118
- secretKey: b4a.from(testKeyPair1.secretKey, 'hex')
119
- };
120
-
121
- const stub = sinon.stub(PeerWallet, 'encodeBech32m').throws(new Error('test exception'));
122
- await t.exception(
123
- () =>
124
- NetworkWalletFactory.provide({
125
- enableWallet: false,
126
- keyPair,
127
- networkPrefix: config.addressPrefix
128
- }),
129
- errorMessageIncludes('test exception')
130
- );
131
- stub.restore();
132
- sinon.restore();
133
- });
134
-
135
- test('EphemeralWallet exposes wallet like interface', async t => {
136
- const keyPair = {
137
- publicKey: b4a.from(testKeyPair1.publicKey, 'hex'),
138
- secretKey: b4a.from(testKeyPair1.secretKey, 'hex')
139
- };
140
- const wallet = new EphemeralWallet(keyPair, config.addressPrefix);
141
- const message = b4a.from('feedface', 'hex');
142
- const signature = wallet.sign(message);
143
-
144
- t.alike(wallet.publicKey, keyPair.publicKey);
145
- t.is(wallet.address, PeerWallet.encodeBech32m(config.addressPrefix, keyPair.publicKey));
146
- t.ok(PeerWallet.verify(signature, message, wallet.publicKey));
147
- t.ok(wallet.verify(signature, message));
148
- });
149
-
150
- test('EphemeralWallet requires both public and secret keys', async t => {
151
- const publicKey = b4a.from(testKeyPair1.publicKey, 'hex');
152
- await t.exception(
153
- () => new EphemeralWallet({ publicKey }, config.addressPrefix),
154
- errorMessageIncludes('keyPair with publicKey and secretKey is required')
155
- );
156
- });
@@ -1,127 +0,0 @@
1
- import { test } from 'brittle';
2
- import sinon from 'sinon';
3
- import b4a from 'b4a';
4
-
5
- import NetworkWalletFactory from '../../../src/core/network/identity/NetworkWalletFactory.js';
6
- import ProtocolSession from '../../../src/core/network/protocols/ProtocolSession.js';
7
- import { ResultCode } from '../../../src/utils/constants.js';
8
- import { config } from '../../helpers/config.js';
9
- import { testKeyPair1 } from '../../fixtures/apply.fixtures.js';
10
-
11
- function createWallet() {
12
- const keyPair = {
13
- publicKey: b4a.from(testKeyPair1.publicKey, 'hex'),
14
- secretKey: b4a.from(testKeyPair1.secretKey, 'hex')
15
- };
16
- return NetworkWalletFactory.provide({
17
- enableWallet: false,
18
- keyPair,
19
- networkPrefix: config.addressPrefix
20
- });
21
- }
22
-
23
- function makeProtocol(sendStub) {
24
- return {
25
- send: sendStub ?? sinon.stub().resolves(ResultCode.OK),
26
- sendAndForget: sinon.stub(),
27
- decode: sinon.stub(),
28
- close: sinon.stub()
29
- };
30
- }
31
-
32
- test('ProtocolSession', (t) => {
33
- t.teardown(() => sinon.restore());
34
-
35
- test('probe sets preferred protocol to v1 on OK', async (t) => {
36
- const v1Send = sinon.stub().resolves(ResultCode.OK);
37
- const session = new ProtocolSession(
38
- makeProtocol(),
39
- makeProtocol(v1Send),
40
- createWallet(),
41
- config
42
- );
43
-
44
- await session.probe();
45
- t.is(session.preferredProtocol, session.supportedProtocols.V1);
46
- t.ok(v1Send.calledOnce);
47
- });
48
-
49
- test('probe sets preferred protocol to legacy on non-OK', async (t) => {
50
- const v1Send = sinon.stub().resolves(ResultCode.TIMEOUT);
51
- const session = new ProtocolSession(
52
- makeProtocol(),
53
- makeProtocol(v1Send),
54
- createWallet(),
55
- config
56
- );
57
-
58
- await session.probe();
59
- t.is(session.preferredProtocol, session.supportedProtocols.LEGACY);
60
- t.ok(v1Send.calledOnce);
61
- });
62
-
63
- test('probe sets preferred protocol to legacy on rejection', async (t) => {
64
- const v1Send = sinon.stub().rejects(new Error('boom'));
65
- const session = new ProtocolSession(
66
- makeProtocol(),
67
- makeProtocol(v1Send),
68
- createWallet(),
69
- config
70
- );
71
-
72
- await session.probe();
73
- t.is(session.preferredProtocol, session.supportedProtocols.LEGACY);
74
- t.ok(v1Send.calledOnce);
75
- });
76
-
77
- test('sendHealthCheck returns OK when preferred is v1', async (t) => {
78
- const v1Send = sinon.stub().resolves(ResultCode.OK);
79
- const session = new ProtocolSession(
80
- makeProtocol(),
81
- makeProtocol(v1Send),
82
- createWallet(),
83
- config
84
- );
85
-
86
- session.setV1AsPreferredProtocol();
87
- const result = await session.sendHealthCheck();
88
- t.is(result, ResultCode.OK);
89
- t.ok(v1Send.calledOnce);
90
- });
91
-
92
- test('sendHealthCheck returns OK when preferred is legacy', async (t) => {
93
- const session = new ProtocolSession(
94
- makeProtocol(),
95
- makeProtocol(),
96
- createWallet(),
97
- config
98
- );
99
-
100
- session.setLegacyAsPreferredProtocol();
101
- const result = await session.sendHealthCheck();
102
- t.is(result, ResultCode.OK);
103
- });
104
-
105
- test('sendHealthCheck returns UNSPECIFIED when not probed', async (t) => {
106
- const session = new ProtocolSession(
107
- makeProtocol(),
108
- makeProtocol(),
109
- createWallet(),
110
- config
111
- );
112
-
113
- const result = await session.sendHealthCheck();
114
- t.is(result, ResultCode.UNSPECIFIED);
115
- });
116
-
117
- test('isHealthCheckSupported throws when not probed', async (t) => {
118
- const session = new ProtocolSession(
119
- makeProtocol(),
120
- makeProtocol(),
121
- createWallet(),
122
- config
123
- );
124
-
125
- await t.exception.all(() => session.isHealthCheckSupported());
126
- });
127
- });
@@ -1,13 +0,0 @@
1
- import { default as test } from 'brittle';
2
-
3
- async function runNetworkModuleTests() {
4
- test.pause();
5
- await import('./LegacyNetworkMessageRouter.test.js');
6
- await import('./NetworkWalletFactory.test.js');
7
- await import('./ProtocolSession.test.js');
8
- await import('./services/services.test.js');
9
- await import('./v1/v1.test.js');
10
- test.resume();
11
- }
12
-
13
- await runNetworkModuleTests();