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,6 +1,5 @@
1
1
  import b4a from 'b4a';
2
- import PeerWallet from 'trac-wallet';
3
- import State from '../../../../../state/State.js';
2
+ import tracCryptoApi from 'trac-crypto-api';
4
3
 
5
4
  /*
6
5
  BaseResponse class for handling common validation logic for network responses.
@@ -9,18 +8,16 @@ import State from '../../../../../state/State.js';
9
8
  class BaseResponse {
10
9
  #wallet;
11
10
  #state;
12
- #config
13
11
 
14
12
  /**
15
13
  *
16
14
  * @param {State} state
17
- * @param {PeerWallet} wallet
15
+ * @param {IWallet} wallet
18
16
  * @param {Config} config
19
17
  */
20
- constructor(state, wallet, config) {
18
+ constructor(state, wallet, _config) {
21
19
  this.#state = state;
22
20
  this.#wallet = wallet;
23
- this.#config = config;
24
21
  }
25
22
 
26
23
  get state() {
@@ -66,11 +63,11 @@ class BaseResponse {
66
63
  switch (type) {
67
64
  case 'admin':
68
65
  const adminEntry = await this.state.getAdminEntry();
69
- publicKey = PeerWallet.decodeBech32m(adminEntry.address);
66
+ publicKey = tracCryptoApi.address.decode(adminEntry.address);
70
67
 
71
68
  break;
72
69
  default:
73
- publicKey = PeerWallet.decodeBech32m(message.address);
70
+ publicKey = tracCryptoApi.address.decode(message.address);
74
71
  }
75
72
 
76
73
  if (!publicKey) {
@@ -80,7 +77,7 @@ class BaseResponse {
80
77
  const messageWithoutSig = { ...message };
81
78
  delete messageWithoutSig.sig;
82
79
  const hashInput = b4a.from(JSON.stringify(messageWithoutSig), 'utf8');
83
- const hash = await PeerWallet.blake3(hashInput);
80
+ const hash = await tracCryptoApi.hash.blake3(hashInput);
84
81
  const signature = b4a.from(message.sig, 'hex');
85
82
  const verified = this.#wallet.verify(signature, hash, publicKey);
86
83
 
@@ -91,4 +88,4 @@ class BaseResponse {
91
88
  }
92
89
  }
93
90
 
94
- export default BaseResponse;
91
+ export default BaseResponse;
@@ -1,6 +1,6 @@
1
1
  import PartialOperationValidator from './PartialOperationValidator.js';
2
2
  import {ResultCode} from "../../../../../utils/constants.js";
3
- import SharedValidatorRejectionError from '../errors/SharedValidatorRejectionError.js';
3
+ import {V1ProtocolError} from '../../v1/V1ProtocolError.js';
4
4
 
5
5
  class PartialBootstrapDeploymentValidator extends PartialOperationValidator {
6
6
  constructor(state, selfAddress , config) {
@@ -28,7 +28,7 @@ class PartialBootstrapDeploymentValidator extends PartialOperationValidator {
28
28
  async validateBootstrapRegistration(payload) {
29
29
  const bootstrapString = payload.bdo.bs.toString('hex');
30
30
  if (null !== await this.state.getRegisteredBootstrapEntryUnsigned(bootstrapString)) {
31
- throw new SharedValidatorRejectionError(
31
+ throw new V1ProtocolError(
32
32
  ResultCode.BOOTSTRAP_ALREADY_EXISTS,
33
33
  `Bootstrap with hash ${bootstrapString} already exists in the state. Bootstrap must be unique.`
34
34
  );
@@ -1,5 +1,5 @@
1
1
  import b4a from 'b4a';
2
- import PeerWallet from 'trac-wallet';
2
+ import tracCryptoApi from 'trac-crypto-api';
3
3
  import Check from '../../../../../utils/check.js';
4
4
  import {bufferToAddress} from "../../../../state/utils/address.js";
5
5
  import {createMessage} from "../../../../../utils/buffer.js";
@@ -7,7 +7,7 @@ import {OperationType, ResultCode} from "../../../../../utils/constants.js";
7
7
  import {bufferToBigInt} from "../../../../../utils/amountSerialization.js";
8
8
  import {FEE} from "../../../../state/utils/transaction.js";
9
9
  import * as operationsUtils from '../../../../../utils/applyOperations.js';
10
- import SharedValidatorRejectionError from '../errors/SharedValidatorRejectionError.js';
10
+ import {V1ProtocolError} from '../../v1/V1ProtocolError.js';
11
11
 
12
12
  const MAX_AMOUNT = BigInt('0xffffffffffffffffffffffffffffffff');
13
13
  const FEE_BIGINT = bufferToBigInt(FEE);
@@ -36,19 +36,19 @@ class PartialOperationValidator {
36
36
  return this.#check;
37
37
  }
38
38
 
39
- async validate(payload) {
40
- throw new SharedValidatorRejectionError(ResultCode.UNEXPECTED_ERROR, "Method 'validate()' must be implemented.");
39
+ async validate() {
40
+ throw new V1ProtocolError(ResultCode.UNEXPECTED_ERROR, "Method 'validate()' must be implemented.");
41
41
  }
42
42
 
43
43
  isPayloadSchemaValid(payload) {
44
44
  if (!payload || !payload.type) {
45
- throw new SharedValidatorRejectionError(ResultCode.TX_INVALID_PAYLOAD, 'Payload or payload type is missing.');
45
+ throw new V1ProtocolError(ResultCode.TX_INVALID_PAYLOAD, 'Payload or payload type is missing.');
46
46
  }
47
47
 
48
48
  const selectedValidator = this.#selectCheckSchemaValidator(payload.type);
49
49
  const isPayloadValid = selectedValidator(payload);
50
50
  if (!isPayloadValid) {
51
- throw new SharedValidatorRejectionError(ResultCode.SCHEMA_VALIDATION_FAILED, 'Payload is invalid.');
51
+ throw new V1ProtocolError(ResultCode.SCHEMA_VALIDATION_FAILED, 'Payload is invalid.');
52
52
  }
53
53
  }
54
54
 
@@ -65,7 +65,7 @@ class PartialOperationValidator {
65
65
  case OperationType.TRANSFER:
66
66
  return this.check.validateTransferOperation.bind(this.check);
67
67
  default:
68
- throw new SharedValidatorRejectionError(
68
+ throw new V1ProtocolError(
69
69
  ResultCode.OPERATION_TYPE_UNKNOWN,
70
70
  `Unknown operation type: ${type}`
71
71
  );
@@ -75,14 +75,14 @@ class PartialOperationValidator {
75
75
  validateRequesterAddress(payload) {
76
76
  const incomingAddress = bufferToAddress(payload.address, this.#config.addressPrefix);
77
77
  if (!incomingAddress) {
78
- throw new SharedValidatorRejectionError(ResultCode.REQUESTER_ADDRESS_INVALID, 'Invalid requesting address in payload.');
78
+ throw new V1ProtocolError(ResultCode.REQUESTER_ADDRESS_INVALID, 'Invalid requesting address in payload.');
79
79
  }
80
80
 
81
- const incomingPublicKey = PeerWallet.decodeBech32mSafe(incomingAddress);
81
+ const incomingPublicKey = tracCryptoApi.address.decodeSafe(incomingAddress);
82
82
 
83
83
  // TODO: We can add check if public key belongs to the Ed25519 curve. Validate signature already checks that but it would be amazing to catch it earlier.
84
84
  if (!incomingPublicKey || incomingPublicKey.length !== PUBLIC_KEY_LENGTH) {
85
- throw new SharedValidatorRejectionError(ResultCode.REQUESTER_PUBLIC_KEY_INVALID, 'Invalid requesting public key in payload.');
85
+ throw new V1ProtocolError(ResultCode.REQUESTER_PUBLIC_KEY_INVALID, 'Invalid requesting public key in payload.');
86
86
  }
87
87
  }
88
88
 
@@ -131,7 +131,7 @@ class PartialOperationValidator {
131
131
  OperationType.TRANSFER
132
132
  ];
133
133
  default:
134
- throw new SharedValidatorRejectionError(
134
+ throw new V1ProtocolError(
135
135
  ResultCode.OPERATION_TYPE_UNKNOWN,
136
136
  `Unknown operation type: ${payload.type}`
137
137
  );
@@ -142,22 +142,22 @@ class PartialOperationValidator {
142
142
  const operationKey = operationsUtils.operationToPayload(payload.type);
143
143
  const operation = payload[operationKey];
144
144
 
145
- const incomingPublicKey = PeerWallet.decodeBech32mSafe(bufferToAddress(payload.address, this.#config.addressPrefix));
145
+ const incomingPublicKey = tracCryptoApi.address.decodeSafe(bufferToAddress(payload.address, this.#config.addressPrefix));
146
146
  const incomingSignature = operation.is;
147
147
  const messageComponents = this.#getMessageComponents(payload);
148
148
 
149
149
  const message = createMessage(...messageComponents);
150
- const messageHash = await PeerWallet.blake3(message);
150
+ const messageHash = await tracCryptoApi.hash.blake3(message);
151
151
  const payloadHash = operation.tx;
152
152
  if (!b4a.equals(payloadHash, messageHash)) {
153
- throw new SharedValidatorRejectionError(
153
+ throw new V1ProtocolError(
154
154
  ResultCode.TX_HASH_MISMATCH,
155
155
  'Regenerated transaction does not match incoming transaction in payload.'
156
156
  );
157
157
  }
158
158
 
159
- if (!PeerWallet.verify(incomingSignature, messageHash, incomingPublicKey)) {
160
- throw new SharedValidatorRejectionError(ResultCode.TX_SIGNATURE_INVALID, 'Invalid signature in payload.');
159
+ if (!tracCryptoApi.signature.verify(incomingSignature, messageHash, incomingPublicKey)) {
160
+ throw new V1ProtocolError(ResultCode.TX_SIGNATURE_INVALID, 'Invalid signature in payload.');
161
161
  }
162
162
  }
163
163
 
@@ -168,7 +168,7 @@ class PartialOperationValidator {
168
168
  const incomingTxv = operation.txv
169
169
 
170
170
  if (!b4a.equals(currentTxv, incomingTxv)) {
171
- throw new SharedValidatorRejectionError(ResultCode.TX_EXPIRED, 'Transaction has expired.');
171
+ throw new V1ProtocolError(ResultCode.TX_EXPIRED, 'Transaction has expired.');
172
172
  }
173
173
  }
174
174
 
@@ -179,7 +179,7 @@ class PartialOperationValidator {
179
179
  const txHex = tx.toString('hex');
180
180
 
181
181
  if (await this.state.get(txHex) !== null) {
182
- throw new SharedValidatorRejectionError(
182
+ throw new V1ProtocolError(
183
183
  ResultCode.TX_ALREADY_EXISTS,
184
184
  `Transaction with hash ${txHex} already exists in the state.`
185
185
  );
@@ -193,7 +193,7 @@ class PartialOperationValidator {
193
193
 
194
194
  const condition = va === undefined && vn === undefined && vs === undefined
195
195
  if (!condition) {
196
- throw new SharedValidatorRejectionError(
196
+ throw new V1ProtocolError(
197
197
  ResultCode.OPERATION_ALREADY_COMPLETED,
198
198
  'Transfer operation must not be completed already (va, vn, vs must be undefined).'
199
199
  );
@@ -210,12 +210,12 @@ class PartialOperationValidator {
210
210
  }
211
211
 
212
212
  if (!requesterEntry) {
213
- throw new SharedValidatorRejectionError(ResultCode.REQUESTER_NOT_FOUND, 'Requester address not found in state');
213
+ throw new V1ProtocolError(ResultCode.REQUESTER_NOT_FOUND, 'Requester address not found in state');
214
214
  }
215
215
 
216
216
  const requesterBalance = bufferToBigInt(requesterEntry.balance);
217
217
  if (requesterBalance < FEE_BIGINT) {
218
- throw new SharedValidatorRejectionError(ResultCode.INSUFFICIENT_FEE_BALANCE, 'Insufficient balance to cover transaction fee.');
218
+ throw new V1ProtocolError(ResultCode.INSUFFICIENT_FEE_BALANCE, 'Insufficient balance to cover transaction fee.');
219
219
  }
220
220
  }
221
221
 
@@ -225,7 +225,7 @@ class PartialOperationValidator {
225
225
  const operation = payload[operationKey];
226
226
  const bs = operation.bs;
227
227
  if (b4a.equals(this.#config.bootstrap, bs)) {
228
- throw new SharedValidatorRejectionError(
228
+ throw new V1ProtocolError(
229
229
  ResultCode.EXTERNAL_BOOTSTRAP_EQUALS_MSB_BOOTSTRAP,
230
230
  `External bootstrap is the same as MSB bootstrap: ${bs.toString('hex')}`
231
231
  );
@@ -242,7 +242,7 @@ class PartialOperationValidator {
242
242
 
243
243
  const requesterAddress = bufferToAddress(payload.address, this.#config.addressPrefix);
244
244
  if (this.#selfAddress === requesterAddress) {
245
- throw new SharedValidatorRejectionError(
245
+ throw new V1ProtocolError(
246
246
  ResultCode.SELF_VALIDATION_FORBIDDEN,
247
247
  'Requester address cannot be the same as the validator wallet address.'
248
248
  );
@@ -3,7 +3,7 @@ import {OperationType, ResultCode} from "../../../../../utils/constants.js";
3
3
  import {bufferToAddress} from "../../../../state/utils/address.js";
4
4
  import PartialOperationValidator from './PartialOperationValidator.js';
5
5
  import {bufferToBigInt} from "../../../../../utils/amountSerialization.js";
6
- import SharedValidatorRejectionError from '../errors/SharedValidatorRejectionError.js';
6
+ import {V1ProtocolError} from '../../v1/V1ProtocolError.js';
7
7
 
8
8
  class PartialRoleAccessValidator extends PartialOperationValidator {
9
9
  #config;
@@ -43,7 +43,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
43
43
  const nodeAddress = bufferToAddress(payload.address, this.#config.addressPrefix);
44
44
  const nodeEntry = await this.state.getNodeEntry(nodeAddress);
45
45
  if (!nodeEntry) {
46
- throw new SharedValidatorRejectionError(
46
+ throw new V1ProtocolError(
47
47
  ResultCode.ROLE_NODE_ENTRY_NOT_FOUND,
48
48
  `Node with address ${nodeAddress} entry does not exist.`
49
49
  );
@@ -51,7 +51,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
51
51
 
52
52
  const isNodeAlreadyWriter = nodeEntry.isWriter;
53
53
  if (isNodeAlreadyWriter) {
54
- throw new SharedValidatorRejectionError(
54
+ throw new V1ProtocolError(
55
55
  ResultCode.ROLE_NODE_ALREADY_WRITER,
56
56
  `Node with address ${nodeAddress} is already a writer.`
57
57
  );
@@ -59,7 +59,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
59
59
 
60
60
  const isNodeWhitelisted = nodeEntry.isWhitelisted;
61
61
  if (!isNodeWhitelisted) {
62
- throw new SharedValidatorRejectionError(
62
+ throw new V1ProtocolError(
63
63
  ResultCode.ROLE_NODE_NOT_WHITELISTED,
64
64
  `Node with address ${nodeAddress} is not whitelisted.`
65
65
  );
@@ -70,7 +70,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
70
70
  const nodeAddress = bufferToAddress(payload.address, this.#config.addressPrefix);
71
71
  const nodeEntry = await this.state.getNodeEntry(nodeAddress);
72
72
  if (!nodeEntry) {
73
- throw new SharedValidatorRejectionError(
73
+ throw new V1ProtocolError(
74
74
  ResultCode.ROLE_NODE_ENTRY_NOT_FOUND,
75
75
  `Node with address ${nodeAddress} entry does not exist.`
76
76
  );
@@ -78,7 +78,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
78
78
 
79
79
  const isAlreadyWriter = nodeEntry.isWriter;
80
80
  if (!isAlreadyWriter) {
81
- throw new SharedValidatorRejectionError(
81
+ throw new V1ProtocolError(
82
82
  ResultCode.ROLE_NODE_NOT_WRITER,
83
83
  `Node with address ${nodeAddress} is not a writer.`
84
84
  );
@@ -86,7 +86,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
86
86
 
87
87
  const isAlreadyIndexer = nodeEntry.isIndexer;
88
88
  if (isAlreadyIndexer) {
89
- throw new SharedValidatorRejectionError(
89
+ throw new V1ProtocolError(
90
90
  ResultCode.ROLE_NODE_IS_INDEXER,
91
91
  `Node with address ${nodeAddress} is an indexer.`
92
92
  );
@@ -96,7 +96,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
96
96
  } else if (type === OperationType.ADMIN_RECOVERY) {
97
97
  const adminEntry = await this.state.getAdminEntry();
98
98
  if (!adminEntry) {
99
- throw new SharedValidatorRejectionError(ResultCode.ROLE_ADMIN_ENTRY_MISSING, 'Admin entry does not exist.');
99
+ throw new V1ProtocolError(ResultCode.ROLE_ADMIN_ENTRY_MISSING, 'Admin entry does not exist.');
100
100
  }
101
101
 
102
102
  const adminAddressBuffer = payload.address;
@@ -106,7 +106,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
106
106
  !b4a.equals(payload.rao.iw, adminEntry.wk)
107
107
  );
108
108
  if (!isRecoveryCase) {
109
- throw new SharedValidatorRejectionError(
109
+ throw new V1ProtocolError(
110
110
  ResultCode.ROLE_INVALID_RECOVERY_CASE,
111
111
  `Node with address ${adminAddress} is not a valid recovery case.`
112
112
  );
@@ -115,7 +115,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
115
115
  return;
116
116
  }
117
117
 
118
- throw new SharedValidatorRejectionError(
118
+ throw new V1ProtocolError(
119
119
  ResultCode.ROLE_UNKNOWN_OPERATION,
120
120
  `Unknown role access operation type: ${type}`
121
121
  );
@@ -125,7 +125,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
125
125
  const requesterAddress = bufferToAddress(payload.address, this.#config.addressPrefix);
126
126
  const nodeEntry = await this.state.getNodeEntry(requesterAddress);
127
127
  if (!nodeEntry) {
128
- throw new SharedValidatorRejectionError(
128
+ throw new V1ProtocolError(
129
129
  ResultCode.REQUESTER_NOT_FOUND,
130
130
  `Node entry not found for address ${requesterAddress}`
131
131
  );
@@ -139,7 +139,7 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
139
139
  const isOwner = b4a.equals(addressFromRegisteredWritingKey, payload.address);
140
140
 
141
141
  if (!isCurrentWk || !isOwner) {
142
- throw new SharedValidatorRejectionError(
142
+ throw new V1ProtocolError(
143
143
  ResultCode.ROLE_INVALID_WRITER_KEY,
144
144
  'Invalid writer key: either not owned by requester or different from assigned key'
145
145
  );
@@ -157,13 +157,13 @@ class PartialRoleAccessValidator extends PartialOperationValidator {
157
157
  }
158
158
 
159
159
  if (!requesterEntry) {
160
- throw new SharedValidatorRejectionError(ResultCode.REQUESTER_NOT_FOUND, 'Requester address not found in state');
160
+ throw new V1ProtocolError(ResultCode.REQUESTER_NOT_FOUND, 'Requester address not found in state');
161
161
  }
162
162
  const requesterBalance = bufferToBigInt(requesterEntry.balance);
163
163
 
164
164
  const requiredBalance = this.fee * 11n;
165
165
  if (requesterBalance < requiredBalance) {
166
- throw new SharedValidatorRejectionError(
166
+ throw new V1ProtocolError(
167
167
  ResultCode.ROLE_INSUFFICIENT_FEE_BALANCE,
168
168
  'Insufficient requester balance to cover role access operation FEE.'
169
169
  );
@@ -3,7 +3,7 @@ import {safeDecodeApplyOperation} from "../../../../../utils/protobuf/operationH
3
3
  import deploymentEntryUtils from "../../../../state/utils/deploymentEntry.js";
4
4
  import PartialOperationValidator from './PartialOperationValidator.js';
5
5
  import {ResultCode} from "../../../../../utils/constants.js";
6
- import SharedValidatorRejectionError from '../errors/SharedValidatorRejectionError.js';
6
+ import {V1ProtocolError} from '../../v1/V1ProtocolError.js';
7
7
 
8
8
  class PartialTransactionValidator extends PartialOperationValidator {
9
9
  #config
@@ -34,7 +34,7 @@ class PartialTransactionValidator extends PartialOperationValidator {
34
34
 
35
35
  validateMsbBootstrap(payload) {
36
36
  if (!b4a.equals(this.#config.bootstrap, payload.txo.mbs)) {
37
- throw new SharedValidatorRejectionError(
37
+ throw new V1ProtocolError(
38
38
  ResultCode.MSB_BOOTSTRAP_MISMATCH,
39
39
  `Declared MSB bootstrap is different than network bootstrap in transaction operation: ${payload.txo.mbs.toString('hex')}`
40
40
  );
@@ -44,7 +44,7 @@ class PartialTransactionValidator extends PartialOperationValidator {
44
44
  async validateIfExternalBootstrapHasBeenDeployed(payload) {
45
45
  const externalBootstrapResult = await this.state.getRegisteredBootstrapEntry(payload.txo.bs.toString('hex'));
46
46
  if (externalBootstrapResult === null) {
47
- throw new SharedValidatorRejectionError(
47
+ throw new V1ProtocolError(
48
48
  ResultCode.EXTERNAL_BOOTSTRAP_NOT_DEPLOYED,
49
49
  `External bootstrap with hash ${payload.txo.bs.toString('hex')} is not registered as deployment entry.`
50
50
  );
@@ -55,7 +55,7 @@ class PartialTransactionValidator extends PartialOperationValidator {
55
55
  const getBootstrapTransactionTxPayload = await this.state.get(txHash.toString('hex'));
56
56
 
57
57
  if (getBootstrapTransactionTxPayload === null) {
58
- throw new SharedValidatorRejectionError(
58
+ throw new V1ProtocolError(
59
59
  ResultCode.EXTERNAL_BOOTSTRAP_TX_MISSING,
60
60
  `External bootstrap is not registered as usual tx ${externalBootstrapResult.toString('hex')}: ${payload}`
61
61
  );
@@ -65,7 +65,7 @@ class PartialTransactionValidator extends PartialOperationValidator {
65
65
 
66
66
  // edge case
67
67
  if (!b4a.equals(decodedBootstrapDeployment.bdo.bs, payload.txo.bs)) {
68
- throw new SharedValidatorRejectionError(
68
+ throw new V1ProtocolError(
69
69
  ResultCode.EXTERNAL_BOOTSTRAP_MISMATCH,
70
70
  `External bootstrap does not match the one in the transaction payload: ${decodedBootstrapDeployment.bdo.bs.toString('hex')} !== ${payload.txo.bs.toString('hex')}`
71
71
  );
@@ -1,10 +1,11 @@
1
- import PeerWallet from 'trac-wallet';
2
-
3
1
  import {bufferToAddress} from "../../../../state/utils/address.js";
4
2
  import {bufferToBigInt} from "../../../../../utils/amountSerialization.js";
5
3
  import {ResultCode} from "../../../../../utils/constants.js";
4
+ import { NULL_BUFFER } from '../../../../../utils/buffer.js';
6
5
  import PartialOperationValidator from './PartialOperationValidator.js';
7
- import SharedValidatorRejectionError from '../errors/SharedValidatorRejectionError.js';
6
+ import {V1ProtocolError} from '../../v1/V1ProtocolError.js';
7
+ import tracCryptoApi from "trac-crypto-api";
8
+ import b4a from 'b4a';
8
9
 
9
10
  class PartialTransferValidator extends PartialOperationValidator {
10
11
  #config
@@ -33,15 +34,15 @@ class PartialTransferValidator extends PartialOperationValidator {
33
34
  #validateRecipientAddress(payload) {
34
35
  const incomingAddress = bufferToAddress(payload.tro.to, this.#config.addressPrefix);
35
36
  if (!incomingAddress) {
36
- throw new SharedValidatorRejectionError(
37
+ throw new V1ProtocolError(
37
38
  ResultCode.TRANSFER_RECIPIENT_ADDRESS_INVALID,
38
39
  'Invalid recipient address in transfer payload.'
39
40
  );
40
41
  }
41
42
 
42
- const incomingPublicKey = PeerWallet.decodeBech32mSafe(incomingAddress);
43
- if (incomingPublicKey === null) {
44
- throw new SharedValidatorRejectionError(
43
+ const incomingPublicKey = tracCryptoApi.address.decodeSafe(incomingAddress);
44
+ if (b4a.equals(incomingPublicKey, NULL_BUFFER)) {
45
+ throw new V1ProtocolError(
45
46
  ResultCode.TRANSFER_RECIPIENT_PUBLIC_KEY_INVALID,
46
47
  'Invalid recipient public key in transfer payload.'
47
48
  );
@@ -55,7 +56,7 @@ class PartialTransferValidator extends PartialOperationValidator {
55
56
 
56
57
  const transferAmount = bufferToBigInt(payload.tro.am);
57
58
  if (transferAmount > this.max_amount) {
58
- throw new SharedValidatorRejectionError(
59
+ throw new V1ProtocolError(
59
60
  ResultCode.TRANSFER_AMOUNT_TOO_LARGE,
60
61
  'Transfer amount exceeds maximum allowed value'
61
62
  );
@@ -66,12 +67,12 @@ class PartialTransferValidator extends PartialOperationValidator {
66
67
 
67
68
  const senderEntry = await this.state.getNodeEntryUnsigned(senderAddress);
68
69
  if (!senderEntry) {
69
- throw new SharedValidatorRejectionError(ResultCode.TRANSFER_SENDER_NOT_FOUND, 'Sender account not found');
70
+ throw new V1ProtocolError(ResultCode.TRANSFER_SENDER_NOT_FOUND, 'Sender account not found');
70
71
  }
71
72
 
72
73
  const senderBalance = bufferToBigInt(senderEntry.balance);
73
74
  if (!(senderBalance >= totalDeductedAmount)) {
74
- throw new SharedValidatorRejectionError(
75
+ throw new V1ProtocolError(
75
76
  ResultCode.TRANSFER_INSUFFICIENT_BALANCE,
76
77
  'Insufficient balance for transfer' + (isSelfTransfer ? ' fee' : ' + fee')
77
78
  );
@@ -83,7 +84,7 @@ class PartialTransferValidator extends PartialOperationValidator {
83
84
  const recipientBalance = bufferToBigInt(recipientEntry.balance);
84
85
  const newRecipientBalance = recipientBalance + transferAmount;
85
86
  if (newRecipientBalance > this.max_amount) {
86
- throw new SharedValidatorRejectionError(
87
+ throw new V1ProtocolError(
87
88
  ResultCode.TRANSFER_RECIPIENT_BALANCE_OVERFLOW,
88
89
  'Transfer would cause recipient balance to exceed maximum allowed value'
89
90
  );
@@ -1,91 +1,27 @@
1
1
  import {ResultCode} from '../../../../utils/constants.js';
2
2
 
3
- export function getResultCode(err) {
4
- return err instanceof V1ProtocolError ? err.resultCode : ResultCode.UNEXPECTED_ERROR;
5
- }
6
-
7
- export function shouldEndConnection(err) {
8
- return err instanceof V1ProtocolError ? Boolean(err.endConnection) : false;
9
- }
10
-
11
3
  /**
12
4
  * V1 protocol error type.
13
5
  *
14
6
  * `V1ProtocolError` is the v1 base class used by handlers/validators to attach:
15
7
  * - `resultCode`: a stable `ResultCode` enum value for programmatic handling
16
- * - `endConnection`: a transport hint (close peer connection after responding)
17
8
  */
18
9
  export class V1ProtocolError extends Error {
19
10
  /**
20
11
  * @param {number} resultCode Stable rejection reason (a `ResultCode` enum value).
21
12
  * @param {string} message Human-readable error message.
22
- * @param {boolean} [endConnection=false] Whether the transport should end the connection after responding.
23
13
  */
24
- constructor(resultCode, message, endConnection = false) {
14
+ constructor(resultCode, message) {
25
15
  super(message);
26
16
  this.name = this.constructor.name;
27
17
  this.resultCode = resultCode;
28
- this.endConnection = Boolean(endConnection);
29
- }
30
- }
31
-
32
- export class V1InvalidPayloadError extends V1ProtocolError {
33
- constructor(message = 'Invalid payload', endConnection = false) {
34
- super(ResultCode.INVALID_PAYLOAD, message, endConnection);
35
- }
36
- }
37
-
38
- export class V1TxInvalidPayloadError extends V1ProtocolError {
39
- constructor(message = 'Invalid tx payload', endConnection = false) {
40
- super(ResultCode.TX_INVALID_PAYLOAD, message, endConnection);
41
- }
42
- }
43
-
44
- export class V1SignatureInvalidError extends V1ProtocolError {
45
- constructor(message = 'Signature invalid', endConnection = true) {
46
- super(ResultCode.SIGNATURE_INVALID, message, endConnection);
47
- }
48
- }
49
-
50
- export class V1RateLimitedError extends V1ProtocolError {
51
- constructor(message = 'Rate limited', endConnection = true) {
52
- super(ResultCode.RATE_LIMITED, message, endConnection);
53
- }
54
- }
55
-
56
- export class V1UnexpectedError extends V1ProtocolError {
57
- constructor(message = 'Unexpected error', endConnection = true) {
58
- super(ResultCode.UNEXPECTED_ERROR, message, endConnection);
59
- }
60
- }
61
-
62
- export class V1TimeoutError extends V1ProtocolError {
63
- constructor(message = 'Request timed out', endConnection = false) {
64
- super(ResultCode.TIMEOUT, message, endConnection);
65
- }
66
- }
67
-
68
- export class V1NodeHasNoWriteAccess extends V1ProtocolError {
69
- constructor(message = 'Node has no write access', endConnection = true) {
70
- super(ResultCode.NODE_HAS_NO_WRITE_ACCESS, message, endConnection);
71
18
  }
72
19
  }
73
20
 
74
- export class V1TxAcceptedProofUnavailable extends V1ProtocolError {
75
- constructor(message = 'Transaction accepted but proof is unavailable', endConnection = false, timestamp = 0) {
76
- super(ResultCode.TX_ACCEPTED_PROOF_UNAVAILABLE, message, endConnection);
77
- this.timestamp = Number.isSafeInteger(timestamp) && timestamp > 0 ? timestamp : 0;
78
- }
79
- }
80
-
81
- export class V1NodeOverloadedError extends V1ProtocolError {
82
- constructor(message = 'Commit queue is full', endConnection = true) {
83
- super(ResultCode.NODE_OVERLOADED, message, endConnection);
84
- }
21
+ export function getResultCode(err) {
22
+ return err instanceof V1ProtocolError ? err.resultCode : ResultCode.UNEXPECTED_ERROR;
85
23
  }
86
24
 
87
- export class V1TxAlreadyPendingError extends V1ProtocolError {
88
- constructor(message = 'Transaction is already pending', endConnection = false) {
89
- super(ResultCode.TX_ALREADY_PENDING, message, endConnection);
90
- }
25
+ export function shouldEndConnection(err) {
26
+ return err instanceof V1ProtocolError ? Boolean(err.endConnection) : false;
91
27
  }
@@ -1,5 +1,6 @@
1
+ import {ResultCode} from "../../../../../utils/constants.js";
1
2
  import {publicKeyToAddress} from "../../../../../utils/helpers.js";
2
- import {V1ProtocolError, V1UnexpectedError} from "../V1ProtocolError.js";
3
+ import {V1ProtocolError} from "../V1ProtocolError.js";
3
4
 
4
5
  class V1BaseOperationHandler {
5
6
  #rateLimiterService;
@@ -58,7 +59,7 @@ class V1BaseOperationHandler {
58
59
  if (error instanceof V1ProtocolError) {
59
60
  return error;
60
61
  }
61
- return new V1UnexpectedError(error?.message ?? 'Unexpected error');
62
+ return new V1ProtocolError(ResultCode.UNEXPECTED_ERROR, error?.message ?? 'Unexpected error');
62
63
  }
63
64
  }
64
65