@ritbit/v4-client-js 2.4.0 → 2.4.2
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.
- package/build/cjs/src/clients/composite-client.js +10 -9
- package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/build/esm/src/clients/composite-client.d.ts +3 -3
- package/build/esm/src/clients/composite-client.d.ts.map +1 -1
- package/build/esm/src/clients/composite-client.js +10 -9
- package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +11 -3
- package/.env +0 -1
- package/.eslintignore +0 -2
- package/.eslintrc.js +0 -15
- package/.gitleaks.toml +0 -24
- package/.gitleaksignore +0 -1
- package/.nvmrc +0 -1
- package/.prettierignore +0 -3
- package/.prettierrc.json +0 -6
- package/.releaserc +0 -10
- package/.vscode/launch.json +0 -11
- package/__native__/__ios__/v4-native-client.js +0 -251395
- package/__native__/__ios__/v4-native-client.js.map +0 -1
- package/__tests__/clients/composite-client.test.ts +0 -140
- package/__tests__/helpers/baseClients.ts +0 -23
- package/__tests__/helpers/constants.ts +0 -131
- package/__tests__/lib/helpers.test.ts +0 -55
- package/__tests__/lib/util.test.ts +0 -77
- package/__tests__/lib/validation.test.ts +0 -289
- package/__tests__/modules/client/AccountEndpoints.test.ts +0 -236
- package/__tests__/modules/client/FaucetEndpoint.test.ts +0 -14
- package/__tests__/modules/client/MarketsEndpoints.test.ts +0 -84
- package/__tests__/modules/client/Transfers.test.ts +0 -44
- package/__tests__/modules/client/UtilityEndpoints.test.ts +0 -29
- package/__tests__/modules/client/ValidatorGetEndpoints.test.ts +0 -50
- package/__tests__/modules/client/ValidatorPostEndpoints.test.ts +0 -52
- package/__tests__/modules/client/constants.ts +0 -5
- package/__tests__/modules/onboarding.test.ts +0 -66
- package/build/cjs/__tests__/clients/composite-client.test.js +0 -130
- package/build/cjs/__tests__/helpers/baseClients.js +0 -29
- package/build/cjs/__tests__/helpers/constants.js +0 -110
- package/build/cjs/__tests__/lib/helpers.test.js +0 -46
- package/build/cjs/__tests__/lib/util.test.js +0 -67
- package/build/cjs/__tests__/lib/validation.test.js +0 -254
- package/build/cjs/__tests__/modules/client/AccountEndpoints.test.js +0 -171
- package/build/cjs/__tests__/modules/client/FaucetEndpoint.test.js +0 -15
- package/build/cjs/__tests__/modules/client/MarketsEndpoints.test.js +0 -69
- package/build/cjs/__tests__/modules/client/Transfers.test.js +0 -44
- package/build/cjs/__tests__/modules/client/UtilityEndpoints.test.js +0 -28
- package/build/cjs/__tests__/modules/client/ValidatorGetEndpoints.test.js +0 -46
- package/build/cjs/__tests__/modules/client/ValidatorPostEndpoints.test.js +0 -53
- package/build/cjs/__tests__/modules/client/constants.js +0 -7
- package/build/cjs/__tests__/modules/onboarding.test.js +0 -50
- package/build/cjs/examples/account_endpoints.js +0 -129
- package/build/cjs/examples/batch_cancel_orders_example.js +0 -93
- package/build/cjs/examples/composite_example.js +0 -50
- package/build/cjs/examples/constants.js +0 -35
- package/build/cjs/examples/faucet_endpoint.js +0 -23
- package/build/cjs/examples/gov_add_new_market.js +0 -77
- package/build/cjs/examples/human_readable_orders.json +0 -86
- package/build/cjs/examples/human_readable_short_term_orders.json +0 -42
- package/build/cjs/examples/json-encoding.js +0 -32
- package/build/cjs/examples/long_term_order_cancel_example.js +0 -63
- package/build/cjs/examples/markets_endpoints.js +0 -134
- package/build/cjs/examples/native_examples.js +0 -112
- package/build/cjs/examples/noble_example.js +0 -88
- package/build/cjs/examples/optimal_node.js +0 -70
- package/build/cjs/examples/permissioned_keys_example.js +0 -104
- package/build/cjs/examples/raw_orders.json +0 -130
- package/build/cjs/examples/short_term_order_cancel_example.js +0 -54
- package/build/cjs/examples/short_term_order_composite_example.js +0 -68
- package/build/cjs/examples/test.js +0 -50
- package/build/cjs/examples/transfer_example_deposit.js +0 -29
- package/build/cjs/examples/transfer_example_send.js +0 -42
- package/build/cjs/examples/transfer_example_subaccount_transfer.js +0 -29
- package/build/cjs/examples/transfer_example_withdraw.js +0 -30
- package/build/cjs/examples/transfer_example_withdraw_other.js +0 -42
- package/build/cjs/examples/utility_endpoints.js +0 -42
- package/build/cjs/examples/validator_get_example.js +0 -158
- package/build/cjs/examples/validator_post_example.js +0 -76
- package/build/cjs/examples/wallet_address.js +0 -22
- package/build/cjs/examples/websocket_example.js +0 -36
- package/build/cjs/examples/websocket_orderbook_example.js +0 -196
- package/build/esm/__tests__/clients/composite-client.test.d.ts +0 -2
- package/build/esm/__tests__/clients/composite-client.test.d.ts.map +0 -1
- package/build/esm/__tests__/clients/composite-client.test.js +0 -128
- package/build/esm/__tests__/helpers/baseClients.d.ts +0 -19
- package/build/esm/__tests__/helpers/baseClients.d.ts.map +0 -1
- package/build/esm/__tests__/helpers/baseClients.js +0 -22
- package/build/esm/__tests__/helpers/constants.d.ts +0 -19
- package/build/esm/__tests__/helpers/constants.d.ts.map +0 -1
- package/build/esm/__tests__/helpers/constants.js +0 -104
- package/build/esm/__tests__/lib/helpers.test.d.ts +0 -2
- package/build/esm/__tests__/lib/helpers.test.d.ts.map +0 -1
- package/build/esm/__tests__/lib/helpers.test.js +0 -41
- package/build/esm/__tests__/lib/util.test.d.ts +0 -2
- package/build/esm/__tests__/lib/util.test.d.ts.map +0 -1
- package/build/esm/__tests__/lib/util.test.js +0 -65
- package/build/esm/__tests__/lib/validation.test.d.ts +0 -2
- package/build/esm/__tests__/lib/validation.test.d.ts.map +0 -1
- package/build/esm/__tests__/lib/validation.test.js +0 -249
- package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/AccountEndpoints.test.js +0 -169
- package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/FaucetEndpoint.test.js +0 -13
- package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/MarketsEndpoints.test.js +0 -66
- package/build/esm/__tests__/modules/client/Transfers.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/Transfers.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/Transfers.test.js +0 -39
- package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/UtilityEndpoints.test.js +0 -26
- package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.js +0 -44
- package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts +0 -2
- package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.js +0 -48
- package/build/esm/__tests__/modules/client/constants.d.ts +0 -4
- package/build/esm/__tests__/modules/client/constants.d.ts.map +0 -1
- package/build/esm/__tests__/modules/client/constants.js +0 -4
- package/build/esm/__tests__/modules/onboarding.test.d.ts +0 -2
- package/build/esm/__tests__/modules/onboarding.test.d.ts.map +0 -1
- package/build/esm/__tests__/modules/onboarding.test.js +0 -48
- package/build/esm/examples/account_endpoints.d.ts +0 -5
- package/build/esm/examples/account_endpoints.d.ts.map +0 -1
- package/build/esm/examples/account_endpoints.js +0 -127
- package/build/esm/examples/batch_cancel_orders_example.d.ts +0 -2
- package/build/esm/examples/batch_cancel_orders_example.d.ts.map +0 -1
- package/build/esm/examples/batch_cancel_orders_example.js +0 -88
- package/build/esm/examples/composite_example.d.ts +0 -2
- package/build/esm/examples/composite_example.d.ts.map +0 -1
- package/build/esm/examples/composite_example.js +0 -45
- package/build/esm/examples/constants.d.ts +0 -13
- package/build/esm/examples/constants.d.ts.map +0 -1
- package/build/esm/examples/constants.js +0 -29
- package/build/esm/examples/faucet_endpoint.d.ts +0 -5
- package/build/esm/examples/faucet_endpoint.d.ts.map +0 -1
- package/build/esm/examples/faucet_endpoint.js +0 -21
- package/build/esm/examples/gov_add_new_market.d.ts +0 -2
- package/build/esm/examples/gov_add_new_market.d.ts.map +0 -1
- package/build/esm/examples/gov_add_new_market.js +0 -72
- package/build/esm/examples/human_readable_orders.json +0 -86
- package/build/esm/examples/human_readable_short_term_orders.json +0 -42
- package/build/esm/examples/json-encoding.d.ts +0 -2
- package/build/esm/examples/json-encoding.d.ts.map +0 -1
- package/build/esm/examples/json-encoding.js +0 -27
- package/build/esm/examples/long_term_order_cancel_example.d.ts +0 -2
- package/build/esm/examples/long_term_order_cancel_example.d.ts.map +0 -1
- package/build/esm/examples/long_term_order_cancel_example.js +0 -58
- package/build/esm/examples/markets_endpoints.d.ts +0 -5
- package/build/esm/examples/markets_endpoints.d.ts.map +0 -1
- package/build/esm/examples/markets_endpoints.js +0 -131
- package/build/esm/examples/native_examples.d.ts +0 -2
- package/build/esm/examples/native_examples.d.ts.map +0 -1
- package/build/esm/examples/native_examples.js +0 -110
- package/build/esm/examples/noble_example.d.ts +0 -2
- package/build/esm/examples/noble_example.d.ts.map +0 -1
- package/build/esm/examples/noble_example.js +0 -83
- package/build/esm/examples/optimal_node.d.ts +0 -2
- package/build/esm/examples/optimal_node.d.ts.map +0 -1
- package/build/esm/examples/optimal_node.js +0 -68
- package/build/esm/examples/permissioned_keys_example.d.ts +0 -2
- package/build/esm/examples/permissioned_keys_example.d.ts.map +0 -1
- package/build/esm/examples/permissioned_keys_example.js +0 -99
- package/build/esm/examples/raw_orders.json +0 -130
- package/build/esm/examples/short_term_order_cancel_example.d.ts +0 -2
- package/build/esm/examples/short_term_order_cancel_example.d.ts.map +0 -1
- package/build/esm/examples/short_term_order_cancel_example.js +0 -49
- package/build/esm/examples/short_term_order_composite_example.d.ts +0 -2
- package/build/esm/examples/short_term_order_composite_example.d.ts.map +0 -1
- package/build/esm/examples/short_term_order_composite_example.js +0 -63
- package/build/esm/examples/test.d.ts +0 -2
- package/build/esm/examples/test.d.ts.map +0 -1
- package/build/esm/examples/test.js +0 -45
- package/build/esm/examples/transfer_example_deposit.d.ts +0 -2
- package/build/esm/examples/transfer_example_deposit.d.ts.map +0 -1
- package/build/esm/examples/transfer_example_deposit.js +0 -24
- package/build/esm/examples/transfer_example_send.d.ts +0 -2
- package/build/esm/examples/transfer_example_send.d.ts.map +0 -1
- package/build/esm/examples/transfer_example_send.js +0 -37
- package/build/esm/examples/transfer_example_subaccount_transfer.d.ts +0 -2
- package/build/esm/examples/transfer_example_subaccount_transfer.d.ts.map +0 -1
- package/build/esm/examples/transfer_example_subaccount_transfer.js +0 -24
- package/build/esm/examples/transfer_example_withdraw.d.ts +0 -2
- package/build/esm/examples/transfer_example_withdraw.d.ts.map +0 -1
- package/build/esm/examples/transfer_example_withdraw.js +0 -25
- package/build/esm/examples/transfer_example_withdraw_other.d.ts +0 -2
- package/build/esm/examples/transfer_example_withdraw_other.d.ts.map +0 -1
- package/build/esm/examples/transfer_example_withdraw_other.js +0 -37
- package/build/esm/examples/utility_endpoints.d.ts +0 -5
- package/build/esm/examples/utility_endpoints.d.ts.map +0 -1
- package/build/esm/examples/utility_endpoints.js +0 -40
- package/build/esm/examples/validator_get_example.d.ts +0 -2
- package/build/esm/examples/validator_get_example.d.ts.map +0 -1
- package/build/esm/examples/validator_get_example.js +0 -156
- package/build/esm/examples/validator_post_example.d.ts +0 -2
- package/build/esm/examples/validator_post_example.d.ts.map +0 -1
- package/build/esm/examples/validator_post_example.js +0 -71
- package/build/esm/examples/wallet_address.d.ts +0 -2
- package/build/esm/examples/wallet_address.d.ts.map +0 -1
- package/build/esm/examples/wallet_address.js +0 -17
- package/build/esm/examples/websocket_example.d.ts +0 -2
- package/build/esm/examples/websocket_example.d.ts.map +0 -1
- package/build/esm/examples/websocket_example.js +0 -34
- package/build/esm/examples/websocket_orderbook_example.d.ts +0 -2
- package/build/esm/examples/websocket_orderbook_example.d.ts.map +0 -1
- package/build/esm/examples/websocket_orderbook_example.js +0 -194
- package/commitlint.config.js +0 -8
- package/examples/account_endpoints.ts +0 -129
- package/examples/batch_cancel_orders_example.ts +0 -130
- package/examples/composite_example.ts +0 -65
- package/examples/constants.ts +0 -42
- package/examples/faucet_endpoint.ts +0 -24
- package/examples/gov_add_new_market.json +0 -64
- package/examples/gov_add_new_market.ts +0 -95
- package/examples/human_readable_orders.json +0 -86
- package/examples/human_readable_short_term_orders.json +0 -42
- package/examples/json-encoding.ts +0 -33
- package/examples/long_term_order_cancel_example.ts +0 -87
- package/examples/markets_endpoints.ts +0 -134
- package/examples/native_examples.ts +0 -151
- package/examples/noble_example.ts +0 -107
- package/examples/optimal_node.ts +0 -70
- package/examples/permissioned_keys_example.ts +0 -162
- package/examples/raw_orders.json +0 -130
- package/examples/short_term_order_cancel_example.ts +0 -68
- package/examples/short_term_order_composite_example.ts +0 -80
- package/examples/test.ts +0 -65
- package/examples/transfer_example_deposit.ts +0 -28
- package/examples/transfer_example_send.ts +0 -60
- package/examples/transfer_example_subaccount_transfer.ts +0 -29
- package/examples/transfer_example_withdraw.ts +0 -31
- package/examples/transfer_example_withdraw_other.ts +0 -60
- package/examples/utility_endpoints.ts +0 -42
- package/examples/validator_get_example.ts +0 -160
- package/examples/validator_post_example.ts +0 -81
- package/examples/wallet_address.ts +0 -18
- package/examples/websocket_example.ts +0 -44
- package/examples/websocket_orderbook_example.ts +0 -239
- package/jest.config.js +0 -12
- package/jest.globalSetup.js +0 -5
- package/jest.setup.js +0 -1
- package/ritbit-v4-client-js-2.2.6.tgz +0 -0
- package/scripts/bump_version.sh +0 -16
- package/scripts/generate-cctp-protos.sh +0 -41
- package/scripts/mobile_build_pack.sh +0 -5
- package/scripts/publish-if-not-exists.sh +0 -21
- package/src/clients/composite-client.ts +0 -1469
- package/src/clients/constants.ts +0 -361
- package/src/clients/faucet-client.ts +0 -48
- package/src/clients/helpers/chain-helpers.ts +0 -231
- package/src/clients/helpers/request-helpers.ts +0 -71
- package/src/clients/indexer-client.ts +0 -61
- package/src/clients/lib/axios/axiosRequest.ts +0 -41
- package/src/clients/lib/axios/errors.ts +0 -41
- package/src/clients/lib/axios/index.ts +0 -7
- package/src/clients/lib/axios/types.ts +0 -6
- package/src/clients/lib/cctpProto.ts +0 -4197
- package/src/clients/lib/errors.ts +0 -63
- package/src/clients/lib/registry.ts +0 -93
- package/src/clients/modules/account.ts +0 -438
- package/src/clients/modules/composer.ts +0 -669
- package/src/clients/modules/get.ts +0 -791
- package/src/clients/modules/local-wallet.ts +0 -79
- package/src/clients/modules/markets.ts +0 -76
- package/src/clients/modules/post.ts +0 -1043
- package/src/clients/modules/proto-includes.ts +0 -34
- package/src/clients/modules/rest.ts +0 -40
- package/src/clients/modules/signer.ts +0 -139
- package/src/clients/modules/tendermintClient.ts +0 -168
- package/src/clients/modules/utility.ts +0 -47
- package/src/clients/modules/vault.ts +0 -23
- package/src/clients/native.ts +0 -1689
- package/src/clients/noble-client.ts +0 -108
- package/src/clients/socket-client.ts +0 -331
- package/src/clients/subaccount.ts +0 -57
- package/src/clients/types.ts +0 -191
- package/src/clients/validator-client.ts +0 -106
- package/src/index.ts +0 -19
- package/src/lib/constants.ts +0 -28
- package/src/lib/errors.ts +0 -38
- package/src/lib/helpers.ts +0 -99
- package/src/lib/onboarding.ts +0 -96
- package/src/lib/trading-key-utils.ts +0 -136
- package/src/lib/utils.ts +0 -84
- package/src/lib/validation.ts +0 -197
- package/src/network_optimizer.ts +0 -132
- package/src/types.ts +0 -44
- package/tasks.json +0 -16
- package/tsconfig.base.json +0 -21
- package/tsconfig.cjs.json +0 -10
- package/tsconfig.eslint.json +0 -14
- package/tsconfig.esm.json +0 -11
- package/tsconfig.json +0 -6
- package/webpack.config.js +0 -56
package/src/lib/validation.ts
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { decode } from 'bech32';
|
|
2
|
-
import Long from 'long';
|
|
3
|
-
|
|
4
|
-
import { BECH32_PREFIX, MAX_SUBACCOUNT_NUMBER, MAX_UINT_32 } from '../clients/constants';
|
|
5
|
-
import {
|
|
6
|
-
MsgTransfer,
|
|
7
|
-
OrderFlags,
|
|
8
|
-
ICancelOrder,
|
|
9
|
-
IPlaceOrder,
|
|
10
|
-
IBatchCancelOrder,
|
|
11
|
-
} from '../clients/types';
|
|
12
|
-
import { UserError } from './errors';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @describe validatePlaceOrderMessage validates that an order to place has fields that would be
|
|
16
|
-
* valid on-chain.
|
|
17
|
-
*/
|
|
18
|
-
export function validatePlaceOrderMessage(
|
|
19
|
-
subaccountNumber: number,
|
|
20
|
-
order: IPlaceOrder,
|
|
21
|
-
): UserError | undefined {
|
|
22
|
-
if (!verifyNumberIsUint32(order.clientId)) {
|
|
23
|
-
return new UserError(`clientId: ${order.clientId} is not a valid uint32`);
|
|
24
|
-
}
|
|
25
|
-
if (order.quantums.lessThanOrEqual(Long.ZERO)) {
|
|
26
|
-
return new UserError(`quantums: ${order.quantums} cannot be <= 0`);
|
|
27
|
-
}
|
|
28
|
-
if (order.subticks.lessThanOrEqual(Long.ZERO)) {
|
|
29
|
-
return new UserError(`subticks: ${order.subticks} cannot be <= 0`);
|
|
30
|
-
}
|
|
31
|
-
if (!verifySubaccountNumber(subaccountNumber)) {
|
|
32
|
-
return new UserError(
|
|
33
|
-
`subaccountNumber: ${subaccountNumber} cannot be < 0 or > ${MAX_SUBACCOUNT_NUMBER}`,
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
if (!isStatefulOrder(order.orderFlags) && !verifyGoodTilBlock(order.goodTilBlock)) {
|
|
37
|
-
return new UserError(`goodTilBlock: ${order.goodTilBlock} is not a valid uint32 or is 0`);
|
|
38
|
-
}
|
|
39
|
-
if (isStatefulOrder(order.orderFlags) && !verifyGoodTilBlockTime(order.goodTilBlockTime)) {
|
|
40
|
-
return new UserError(
|
|
41
|
-
`goodTilBlockTime: ${order.goodTilBlockTime} is not a valid uint32 or is 0`,
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @describe validateCancelOrderMessage validates that an order to cancel has fields that would be
|
|
50
|
-
* valid on-chain.
|
|
51
|
-
*/
|
|
52
|
-
export function validateCancelOrderMessage(
|
|
53
|
-
subaccountNumber: number,
|
|
54
|
-
order: ICancelOrder,
|
|
55
|
-
): UserError | undefined {
|
|
56
|
-
if (!verifyNumberIsUint32(order.clientId)) {
|
|
57
|
-
return new UserError(`clientId: ${order.clientId} is not a valid uint32`);
|
|
58
|
-
}
|
|
59
|
-
if (!isStatefulOrder(order.orderFlags) && !verifyGoodTilBlock(order.goodTilBlock)) {
|
|
60
|
-
return new UserError(`goodTilBlock: ${order.goodTilBlock} is not a valid uint32 or is 0`);
|
|
61
|
-
}
|
|
62
|
-
if (!isStatefulOrder(order.orderFlags) && order.goodTilBlockTime !== undefined) {
|
|
63
|
-
return new UserError(
|
|
64
|
-
`goodTilBlockTime is ${order.goodTilBlockTime}, but should not be set for non-stateful orders`,
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
if (isStatefulOrder(order.orderFlags) && !verifyGoodTilBlockTime(order.goodTilBlockTime)) {
|
|
68
|
-
return new UserError(
|
|
69
|
-
`goodTilBlockTime: ${order.goodTilBlockTime} is not a valid uint32 or is 0`,
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
if (isStatefulOrder(order.orderFlags) && order.goodTilBlock !== undefined) {
|
|
73
|
-
return new UserError(
|
|
74
|
-
`goodTilBlock is ${order.goodTilBlock}, but should not be set for stateful orders`,
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
if (!verifySubaccountNumber(subaccountNumber)) {
|
|
78
|
-
return new UserError(
|
|
79
|
-
`subaccountNumber: ${subaccountNumber} cannot be < 0 or > ${MAX_SUBACCOUNT_NUMBER}`,
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @describe validateBatchCancelOrderMessage validates that orders to batch cancel have fields that would be
|
|
88
|
-
* valid on-chain.
|
|
89
|
-
*/
|
|
90
|
-
export function validateBatchCancelOrderMessage(
|
|
91
|
-
subaccountNumber: number,
|
|
92
|
-
orders: IBatchCancelOrder,
|
|
93
|
-
): UserError | undefined {
|
|
94
|
-
for (const orderBatch of orders.shortTermOrders) {
|
|
95
|
-
for (const clientId of orderBatch.clientIds) {
|
|
96
|
-
if (!verifyNumberIsUint32(clientId)) {
|
|
97
|
-
return new UserError(`clientId: ${clientId} is not a valid uint32`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (!verifyGoodTilBlock(orders.goodTilBlock)) {
|
|
103
|
-
return new UserError(`goodTilBlock: ${orders.goodTilBlock} is not a valid uint32 or is 0`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (!verifySubaccountNumber(subaccountNumber)) {
|
|
107
|
-
return new UserError(
|
|
108
|
-
`subaccountNumber: ${subaccountNumber} cannot be < 0 or > ${MAX_SUBACCOUNT_NUMBER}`,
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return undefined;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @describe validateTransferMessage validates that a transfer to place has fields that would be
|
|
117
|
-
* valid on-chain.
|
|
118
|
-
*/
|
|
119
|
-
export function validateTransferMessage(transfer: MsgTransfer): UserError | undefined {
|
|
120
|
-
if (!verifySubaccountNumber(transfer.sender!!.number || 0)) {
|
|
121
|
-
return new UserError(
|
|
122
|
-
`senderSubaccountNumber: ${
|
|
123
|
-
transfer.sender!!.number || 0
|
|
124
|
-
} cannot be < 0 or > ${MAX_SUBACCOUNT_NUMBER}`,
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
if (!verifySubaccountNumber(transfer.recipient!!.number || 0)) {
|
|
128
|
-
return new UserError(
|
|
129
|
-
`recipientSubaccountNumber: ${
|
|
130
|
-
transfer.recipient!!.number || 0
|
|
131
|
-
} cannot be < 0 or > ${MAX_SUBACCOUNT_NUMBER}`,
|
|
132
|
-
);
|
|
133
|
-
}
|
|
134
|
-
if (transfer.assetId !== 0) {
|
|
135
|
-
return new UserError(`asset id: ${transfer.assetId} not supported`);
|
|
136
|
-
}
|
|
137
|
-
if (transfer.amount.lessThanOrEqual(Long.ZERO)) {
|
|
138
|
-
return new UserError(`amount: ${transfer.amount} cannot be <= 0`);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const addressError: Error | undefined = verifyIsBech32(transfer.recipient!!.owner);
|
|
142
|
-
if (addressError !== undefined) {
|
|
143
|
-
return new UserError(addressError.toString());
|
|
144
|
-
}
|
|
145
|
-
return undefined;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function verifyGoodTilBlock(goodTilBlock: number | undefined): boolean {
|
|
149
|
-
if (goodTilBlock === undefined) {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return verifyNumberIsUint32(goodTilBlock) && goodTilBlock > 0;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function verifyGoodTilBlockTime(goodTilBlockTime: number | undefined): boolean {
|
|
157
|
-
if (goodTilBlockTime === undefined) {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return verifyNumberIsUint32(goodTilBlockTime) && goodTilBlockTime > 0;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
function verifySubaccountNumber(subaccountNumber: number): boolean {
|
|
165
|
-
return subaccountNumber >= 0 && subaccountNumber <= MAX_SUBACCOUNT_NUMBER;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function verifyNumberIsUint32(num: number): boolean {
|
|
169
|
-
return num >= 0 && num <= MAX_UINT_32;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export function verifyOrderFlags(orderFlags: OrderFlags): boolean {
|
|
173
|
-
return (
|
|
174
|
-
orderFlags === OrderFlags.SHORT_TERM ||
|
|
175
|
-
orderFlags === OrderFlags.LONG_TERM ||
|
|
176
|
-
orderFlags === OrderFlags.CONDITIONAL
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export function isStatefulOrder(orderFlags: OrderFlags): boolean {
|
|
181
|
-
return orderFlags === OrderFlags.LONG_TERM || orderFlags === OrderFlags.CONDITIONAL;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function verifyIsBech32(address: string): Error | undefined {
|
|
185
|
-
try {
|
|
186
|
-
decode(address);
|
|
187
|
-
} catch (error) {
|
|
188
|
-
return error;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
return undefined;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
export function isValidAddress(address: string): boolean {
|
|
195
|
-
// An address is valid if it starts with the BECH32 prefix and is Bech32 format.
|
|
196
|
-
return address.startsWith(BECH32_PREFIX + '1') && verifyIsBech32(address) === undefined;
|
|
197
|
-
}
|
package/src/network_optimizer.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { IndexerClient } from './clients/indexer-client';
|
|
2
|
-
import { ValidatorClient } from './clients/validator-client';
|
|
3
|
-
import { encodeJson } from './lib/helpers';
|
|
4
|
-
import { IndexerConfig, ValidatorConfig } from './types';
|
|
5
|
-
|
|
6
|
-
class PingResponse {
|
|
7
|
-
public readonly height: number;
|
|
8
|
-
public readonly responseTime: Date;
|
|
9
|
-
public endpoint?: string;
|
|
10
|
-
|
|
11
|
-
constructor(height: number) {
|
|
12
|
-
this.height = height;
|
|
13
|
-
this.responseTime = new Date();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const isTruthy = <T>(n?: T | false | null | undefined | 0): n is T => Boolean(n);
|
|
18
|
-
|
|
19
|
-
export class NetworkOptimizer {
|
|
20
|
-
private async validatorClients(
|
|
21
|
-
endpointUrls: string[],
|
|
22
|
-
chainId: string,
|
|
23
|
-
): Promise<ValidatorClient[]> {
|
|
24
|
-
return (
|
|
25
|
-
await Promise.all(
|
|
26
|
-
endpointUrls.map((endpointUrl) =>
|
|
27
|
-
ValidatorClient.connect(
|
|
28
|
-
new ValidatorConfig(endpointUrl, chainId, {
|
|
29
|
-
CHAINTOKEN_DENOM: 'placeholder',
|
|
30
|
-
CHAINTOKEN_DECIMALS: 18,
|
|
31
|
-
USDC_DENOM: 'uusdc',
|
|
32
|
-
USDC_DECIMALS: 6,
|
|
33
|
-
}),
|
|
34
|
-
).catch((_) => undefined),
|
|
35
|
-
),
|
|
36
|
-
)
|
|
37
|
-
).filter(isTruthy);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
private indexerClients(endpointUrls: string[]): IndexerClient[] {
|
|
41
|
-
return endpointUrls
|
|
42
|
-
.map(
|
|
43
|
-
(endpointUrl) =>
|
|
44
|
-
new IndexerClient(
|
|
45
|
-
// socket is not used for finding optimal indexer, but required as a parameter to the config
|
|
46
|
-
new IndexerConfig(
|
|
47
|
-
endpointUrl,
|
|
48
|
-
endpointUrl.replace('https://', 'wss://').replace('http://', 'ws://'),
|
|
49
|
-
),
|
|
50
|
-
),
|
|
51
|
-
)
|
|
52
|
-
.filter(isTruthy);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async findOptimalNode(endpointUrls: string[], chainId: string): Promise<string> {
|
|
56
|
-
if (endpointUrls.length === 0) {
|
|
57
|
-
const errorResponse = {
|
|
58
|
-
error: {
|
|
59
|
-
message: 'No nodes provided',
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
return encodeJson(errorResponse);
|
|
63
|
-
}
|
|
64
|
-
const clients = await this.validatorClients(endpointUrls, chainId);
|
|
65
|
-
const responses = (
|
|
66
|
-
await Promise.all(
|
|
67
|
-
clients
|
|
68
|
-
.map(async (client) => {
|
|
69
|
-
const block = await client.get.latestBlock();
|
|
70
|
-
const response = new PingResponse(block.header.height);
|
|
71
|
-
return {
|
|
72
|
-
endpoint: client.config.restEndpoint,
|
|
73
|
-
height: response.height,
|
|
74
|
-
time: response.responseTime.getTime(),
|
|
75
|
-
};
|
|
76
|
-
})
|
|
77
|
-
.map((promise) => promise.catch((_) => undefined)),
|
|
78
|
-
)
|
|
79
|
-
).filter(isTruthy);
|
|
80
|
-
|
|
81
|
-
if (responses.length === 0) {
|
|
82
|
-
throw new Error('Could not connect to endpoints');
|
|
83
|
-
}
|
|
84
|
-
const maxHeight = Math.max(...responses.map(({ height }) => height));
|
|
85
|
-
return (
|
|
86
|
-
responses
|
|
87
|
-
// Only consider nodes at `maxHeight` or `maxHeight - 1`
|
|
88
|
-
.filter(({ height }) => height === maxHeight || height === maxHeight - 1)
|
|
89
|
-
// Return the endpoint with the fastest response time
|
|
90
|
-
.sort((a, b) => a.time - b.time)[0].endpoint
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
async findOptimalIndexer(endpointUrls: string[]): Promise<string> {
|
|
95
|
-
if (endpointUrls.length === 0) {
|
|
96
|
-
const errorResponse = {
|
|
97
|
-
error: {
|
|
98
|
-
message: 'No URL provided',
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
return encodeJson(errorResponse);
|
|
102
|
-
}
|
|
103
|
-
const clients = this.indexerClients(endpointUrls);
|
|
104
|
-
const responses = (
|
|
105
|
-
await Promise.all(
|
|
106
|
-
clients
|
|
107
|
-
.map(async (client) => {
|
|
108
|
-
const block = await client.utility.getHeight();
|
|
109
|
-
const response = new PingResponse(+block.height);
|
|
110
|
-
return {
|
|
111
|
-
endpoint: client.config.restEndpoint,
|
|
112
|
-
height: response.height,
|
|
113
|
-
time: response.responseTime.getTime(),
|
|
114
|
-
};
|
|
115
|
-
})
|
|
116
|
-
.map((promise) => promise.catch((_) => undefined)),
|
|
117
|
-
)
|
|
118
|
-
).filter(isTruthy);
|
|
119
|
-
|
|
120
|
-
if (responses.length === 0) {
|
|
121
|
-
throw new Error('Could not connect to endpoints');
|
|
122
|
-
}
|
|
123
|
-
const maxHeight = Math.max(...responses.map(({ height }) => height));
|
|
124
|
-
return (
|
|
125
|
-
responses
|
|
126
|
-
// Only consider nodes at `maxHeight` or `maxHeight - 1`
|
|
127
|
-
.filter(({ height }) => height === maxHeight || height === maxHeight - 1)
|
|
128
|
-
// Return the endpoint with the fastest response time
|
|
129
|
-
.sort((a, b) => a.time - b.time)[0].endpoint
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
}
|
package/src/types.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { StdFee } from '@cosmjs/amino';
|
|
2
|
-
import { Method } from '@cosmjs/tendermint-rpc';
|
|
3
|
-
|
|
4
|
-
import { TransactionOptions } from './clients/types';
|
|
5
|
-
|
|
6
|
-
export * from './clients/types';
|
|
7
|
-
export * from './clients/constants';
|
|
8
|
-
|
|
9
|
-
// How long to wait and how often to check when calling Broadcast with
|
|
10
|
-
// Method.BroadcastTxCommit
|
|
11
|
-
export interface BroadcastOptions {
|
|
12
|
-
broadcastPollIntervalMs: number;
|
|
13
|
-
broadcastTimeoutMs: number;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Options for connecting to centralized APIs like indexer or faucet.
|
|
17
|
-
export interface ApiOptions {
|
|
18
|
-
faucetHost?: string;
|
|
19
|
-
indexerHost?: string;
|
|
20
|
-
timeout?: number;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Specify when a broadcast should return:
|
|
24
|
-
// 1. Immediately
|
|
25
|
-
// 2. Once the transaction is added to the memPool
|
|
26
|
-
// 3. Once the transaction is committed to a block
|
|
27
|
-
// See https://docs.cosmos.network/master/run-node/txs.html for more information
|
|
28
|
-
export type BroadcastMode =
|
|
29
|
-
| Method.BroadcastTxAsync
|
|
30
|
-
| Method.BroadcastTxSync
|
|
31
|
-
| Method.BroadcastTxCommit;
|
|
32
|
-
|
|
33
|
-
// Defines the options for a transaction.
|
|
34
|
-
export interface Options {
|
|
35
|
-
transactionOptions?: TransactionOptions;
|
|
36
|
-
memo?: string;
|
|
37
|
-
broadcastMode?: BroadcastMode;
|
|
38
|
-
fee?: StdFee;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export enum ClobPairId {
|
|
42
|
-
PERPETUAL_PAIR_BTC_USD = 0,
|
|
43
|
-
PERPETUAL_PAIR_ETH_USD = 1,
|
|
44
|
-
}
|
package/tasks.json
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
|
3
|
-
// for the documentation about the tasks.json format
|
|
4
|
-
"version": "0.1.0",
|
|
5
|
-
"command": "npm",
|
|
6
|
-
"isShellCommand": true,
|
|
7
|
-
"showOutput": "always",
|
|
8
|
-
"suppressTaskName": true,
|
|
9
|
-
"tasks": [
|
|
10
|
-
{
|
|
11
|
-
"isBuildCommand": true,
|
|
12
|
-
"taskName": "build",
|
|
13
|
-
"args": ["run", "build"]
|
|
14
|
-
}
|
|
15
|
-
]
|
|
16
|
-
}
|
package/tsconfig.base.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./node_modules/@dydxprotocol/node-service-base-dev/tsconfig.json",
|
|
3
|
-
"exclude": [
|
|
4
|
-
"src/codegen/**/*.ts",
|
|
5
|
-
"__native__/*.js",
|
|
6
|
-
"__native__/__ios__/*.js",
|
|
7
|
-
"node_modules/@ritbit/v4-proto/**/bundle.ts"
|
|
8
|
-
],
|
|
9
|
-
"include": [
|
|
10
|
-
"__tests__",
|
|
11
|
-
"examples",
|
|
12
|
-
"scripts",
|
|
13
|
-
"src",
|
|
14
|
-
"node_modules/@ritbit/v4-proto/**/**.ts"
|
|
15
|
-
],
|
|
16
|
-
"compilerOptions": {
|
|
17
|
-
"noFallthroughCasesInSwitch": false,
|
|
18
|
-
"target": "ES2019",
|
|
19
|
-
"skipLibCheck": true
|
|
20
|
-
}
|
|
21
|
-
}
|
package/tsconfig.cjs.json
DELETED
package/tsconfig.eslint.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.base.json",
|
|
3
|
-
"exclude": ["__native__/*.js", "__native__/__ios__/*.js"],
|
|
4
|
-
"include": [
|
|
5
|
-
// Repeat included files from tsconfig.json.
|
|
6
|
-
"__tests__",
|
|
7
|
-
"examples",
|
|
8
|
-
"scripts",
|
|
9
|
-
"src",
|
|
10
|
-
// Include e.g. configuration files.
|
|
11
|
-
"./.*.js",
|
|
12
|
-
"./*.js"
|
|
13
|
-
]
|
|
14
|
-
}
|
package/tsconfig.esm.json
DELETED
package/tsconfig.json
DELETED
package/webpack.config.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
|
|
3
|
-
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin');
|
|
4
|
-
const webpack = require('webpack');
|
|
5
|
-
|
|
6
|
-
module.exports = {
|
|
7
|
-
mode: 'development',
|
|
8
|
-
target: ['web', 'es5'], // Set the target to 'web' for browser environment
|
|
9
|
-
entry: './src/clients/native.ts',
|
|
10
|
-
devtool: 'source-map',
|
|
11
|
-
output: {
|
|
12
|
-
filename: 'v4-native-client.js',
|
|
13
|
-
path: path.resolve(__dirname, '__native__/__ios__'),
|
|
14
|
-
pathinfo: true,
|
|
15
|
-
libraryTarget: 'umd', // Set the libraryTarget to 'umd' for better compatibility
|
|
16
|
-
globalObject: 'this', // Ensure 'window' is not used in the UMD module for universal compatibility
|
|
17
|
-
},
|
|
18
|
-
module: {
|
|
19
|
-
rules: [
|
|
20
|
-
{
|
|
21
|
-
test: /\.tsx?$/,
|
|
22
|
-
use: {
|
|
23
|
-
loader: 'ts-loader',
|
|
24
|
-
options: {
|
|
25
|
-
configFile: 'tsconfig.cjs.json',
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
},
|
|
31
|
-
resolve: {
|
|
32
|
-
extensions: ['.tsx', '.ts', '.js'],
|
|
33
|
-
fallback: {
|
|
34
|
-
stream: require.resolve('stream-browserify'),
|
|
35
|
-
zlib: require.resolve('browserify-zlib'),
|
|
36
|
-
https: require.resolve('https-browserify'),
|
|
37
|
-
http: require.resolve('stream-http'),
|
|
38
|
-
path: require.resolve('path-browserify'),
|
|
39
|
-
crypto: require.resolve('crypto-browserify'),
|
|
40
|
-
util: require.resolve('util'),
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
plugins: [
|
|
44
|
-
new webpack.ProvidePlugin({
|
|
45
|
-
Buffer: ['buffer', 'Buffer'],
|
|
46
|
-
}),
|
|
47
|
-
new webpack.DefinePlugin({
|
|
48
|
-
process: {
|
|
49
|
-
env: {
|
|
50
|
-
NODE_ENV: JSON.stringify('production'),
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
}),
|
|
54
|
-
new NodePolyfillPlugin(),
|
|
55
|
-
],
|
|
56
|
-
};
|