@ritbit/v4-client-js 2.1.0 → 2.1.1

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 (96) hide show
  1. package/__tests__/lib/helpers.test.ts +2 -0
  2. package/build/cjs/__tests__/clients/composite-client.test.js +130 -0
  3. package/build/cjs/__tests__/helpers/baseClients.js +29 -0
  4. package/build/cjs/__tests__/helpers/constants.js +110 -0
  5. package/build/cjs/__tests__/lib/helpers.test.js +46 -0
  6. package/build/cjs/__tests__/lib/util.test.js +67 -0
  7. package/build/cjs/__tests__/lib/validation.test.js +254 -0
  8. package/build/cjs/__tests__/modules/client/AccountEndpoints.test.js +171 -0
  9. package/build/cjs/__tests__/modules/client/FaucetEndpoint.test.js +15 -0
  10. package/build/cjs/__tests__/modules/client/MarketsEndpoints.test.js +69 -0
  11. package/build/cjs/__tests__/modules/client/Transfers.test.js +44 -0
  12. package/build/cjs/__tests__/modules/client/UtilityEndpoints.test.js +28 -0
  13. package/build/cjs/__tests__/modules/client/ValidatorGetEndpoints.test.js +46 -0
  14. package/build/cjs/__tests__/modules/client/ValidatorPostEndpoints.test.js +53 -0
  15. package/build/cjs/__tests__/modules/client/constants.js +7 -0
  16. package/build/cjs/__tests__/modules/onboarding.test.js +50 -0
  17. package/build/cjs/examples/account_endpoints.js +129 -0
  18. package/build/cjs/examples/batch_cancel_orders_example.js +93 -0
  19. package/build/cjs/examples/composite_example.js +50 -0
  20. package/build/cjs/examples/constants.js +35 -0
  21. package/build/cjs/examples/faucet_endpoint.js +23 -0
  22. package/build/cjs/examples/gov_add_new_market.js +77 -0
  23. package/build/cjs/examples/human_readable_orders.json +86 -0
  24. package/build/cjs/examples/human_readable_short_term_orders.json +42 -0
  25. package/build/cjs/examples/json-encoding.js +32 -0
  26. package/build/cjs/examples/long_term_order_cancel_example.js +63 -0
  27. package/build/cjs/examples/markets_endpoints.js +134 -0
  28. package/build/cjs/examples/native_examples.js +112 -0
  29. package/build/cjs/examples/noble_example.js +88 -0
  30. package/build/cjs/examples/optimal_node.js +70 -0
  31. package/build/cjs/examples/permissioned_keys_example.js +104 -0
  32. package/build/cjs/examples/raw_orders.json +130 -0
  33. package/build/cjs/examples/short_term_order_cancel_example.js +54 -0
  34. package/build/cjs/examples/short_term_order_composite_example.js +68 -0
  35. package/build/cjs/examples/test.js +50 -0
  36. package/build/cjs/examples/transfer_example_deposit.js +29 -0
  37. package/build/cjs/examples/transfer_example_send.js +42 -0
  38. package/build/cjs/examples/transfer_example_subaccount_transfer.js +29 -0
  39. package/build/cjs/examples/transfer_example_withdraw.js +30 -0
  40. package/build/cjs/examples/transfer_example_withdraw_other.js +42 -0
  41. package/build/cjs/examples/utility_endpoints.js +42 -0
  42. package/build/cjs/examples/validator_get_example.js +158 -0
  43. package/build/cjs/examples/validator_post_example.js +76 -0
  44. package/build/cjs/examples/wallet_address.js +22 -0
  45. package/build/cjs/examples/websocket_example.js +36 -0
  46. package/build/cjs/examples/websocket_orderbook_example.js +196 -0
  47. package/build/cjs/{clients → src/clients}/composite-client.js +1 -1
  48. package/build/cjs/{clients → src/clients}/constants.js +1 -1
  49. package/build/cjs/{clients → src/clients}/faucet-client.js +1 -1
  50. package/build/cjs/{clients → src/clients}/helpers/chain-helpers.js +1 -1
  51. package/build/cjs/src/clients/helpers/request-helpers.js +65 -0
  52. package/build/cjs/{clients → src/clients}/indexer-client.js +1 -1
  53. package/build/cjs/{clients → src/clients}/lib/axios/axiosRequest.js +1 -1
  54. package/build/cjs/{clients → src/clients}/lib/axios/errors.js +1 -1
  55. package/build/cjs/{clients → src/clients}/lib/axios/index.js +1 -1
  56. package/build/cjs/{clients → src/clients}/lib/axios/types.js +1 -1
  57. package/build/cjs/{clients → src/clients}/lib/cctpProto.js +1 -1
  58. package/build/cjs/{clients → src/clients}/lib/errors.js +1 -1
  59. package/build/cjs/{clients → src/clients}/lib/registry.js +1 -1
  60. package/build/cjs/{clients → src/clients}/modules/account.js +1 -1
  61. package/build/cjs/{clients → src/clients}/modules/composer.js +1 -1
  62. package/build/cjs/{clients → src/clients}/modules/get.js +1 -1
  63. package/build/cjs/{clients → src/clients}/modules/local-wallet.js +1 -1
  64. package/build/cjs/{clients → src/clients}/modules/markets.js +1 -1
  65. package/build/cjs/{clients → src/clients}/modules/post.js +1 -1
  66. package/build/cjs/{clients → src/clients}/modules/proto-includes.js +1 -1
  67. package/build/cjs/{clients → src/clients}/modules/rest.js +1 -1
  68. package/build/cjs/{clients → src/clients}/modules/signer.js +1 -1
  69. package/build/cjs/{clients → src/clients}/modules/tendermintClient.js +1 -1
  70. package/build/cjs/{clients → src/clients}/modules/utility.js +1 -1
  71. package/build/cjs/{clients → src/clients}/modules/vault.js +1 -1
  72. package/build/cjs/src/clients/native.js +1330 -0
  73. package/build/cjs/{clients → src/clients}/noble-client.js +1 -1
  74. package/build/cjs/{clients → src/clients}/socket-client.js +1 -1
  75. package/build/cjs/{clients → src/clients}/subaccount.js +1 -1
  76. package/build/cjs/{clients → src/clients}/types.js +1 -1
  77. package/build/cjs/{clients → src/clients}/validator-client.js +1 -1
  78. package/build/cjs/{index.js → src/index.js} +1 -1
  79. package/build/cjs/{lib → src/lib}/constants.js +1 -1
  80. package/build/cjs/{lib → src/lib}/errors.js +1 -1
  81. package/build/cjs/{lib → src/lib}/helpers.js +1 -1
  82. package/build/cjs/{lib → src/lib}/onboarding.js +1 -1
  83. package/build/cjs/{lib → src/lib}/trading-key-utils.js +1 -1
  84. package/build/cjs/{lib → src/lib}/utils.js +1 -1
  85. package/build/cjs/{lib → src/lib}/validation.js +1 -1
  86. package/build/cjs/src/network_optimizer.js +96 -0
  87. package/build/cjs/{types.js → src/types.js} +1 -1
  88. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  89. package/build/esm/__tests__/lib/helpers.test.js +2 -1
  90. package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
  91. package/package.json +10 -10
  92. package/tsconfig.cjs.json +3 -13
  93. package/tsconfig.eslint.json +1 -4
  94. package/tsconfig.esm.json +1 -2
  95. package/build/cjs/clients/helpers/request-helpers.js +0 -65
  96. package/build/cjs/network_optimizer.js +0 -96
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const validator_client_1 = require("../../../src/clients/validator-client");
4
+ const constants_1 = require("../../../src/clients/constants");
5
+ const constants_2 = require("./constants");
6
+ describe('Validator Client', () => {
7
+ let client;
8
+ describe('Get', () => {
9
+ beforeEach(async () => {
10
+ client = await validator_client_1.ValidatorClient.connect(constants_1.Network.testnet().validatorConfig);
11
+ });
12
+ it('Account', async () => {
13
+ const account = await client.get.getAccount(constants_2.TEST_ADDRESS);
14
+ expect(account.address).toBe(constants_2.TEST_ADDRESS);
15
+ });
16
+ it('Balance', async () => {
17
+ const balances = await client.get.getAccountBalances(constants_2.TEST_ADDRESS);
18
+ expect(balances).not.toBeUndefined();
19
+ });
20
+ it('All Subaccounts', async () => {
21
+ const subaccounts = await client.get.getSubaccounts();
22
+ expect(subaccounts.subaccount).not.toBeUndefined();
23
+ });
24
+ it('Subaccount', async () => {
25
+ const subaccount = await client.get.getSubaccount(constants_2.TEST_ADDRESS, 0);
26
+ expect(subaccount.subaccount).not.toBeUndefined();
27
+ });
28
+ it('Clob pairs', async () => {
29
+ const clobpairs = await client.get.getAllClobPairs();
30
+ expect(clobpairs.clobPair).not.toBeUndefined();
31
+ expect(clobpairs.clobPair[0].id).toBe(0);
32
+ });
33
+ it('Prices', async () => {
34
+ const prices = await client.get.getAllPrices();
35
+ expect(prices.marketPrices).not.toBeUndefined();
36
+ expect(prices.marketPrices[0].id).toBe(0);
37
+ });
38
+ it('Equity tier limit configuration', async () => {
39
+ var _a;
40
+ const response = await client.get.getEquityTierLimitConfiguration();
41
+ expect(response.equityTierLimitConfig).not.toBeUndefined();
42
+ expect((_a = response.equityTierLimitConfig) === null || _a === void 0 ? void 0 : _a.shortTermOrderEquityTiers[0].limit).toBe(0);
43
+ });
44
+ });
45
+ });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yR2V0RW5kcG9pbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9fX3Rlc3RzX18vbW9kdWxlcy9jbGllbnQvVmFsaWRhdG9yR2V0RW5kcG9pbnRzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0RUFBd0U7QUFDeEUsOERBQXlEO0FBQ3pELDJDQUEyQztBQUUzQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksTUFBdUIsQ0FBQztJQUM1QixRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNuQixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsTUFBTSxHQUFHLE1BQU0sa0NBQWUsQ0FBQyxPQUFPLENBQUMsbUJBQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyx3QkFBWSxDQUFDLENBQUM7WUFDMUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQVksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsd0JBQVksQ0FBQyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxQixNQUFNLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFCLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyRCxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7O1lBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0QsTUFBTSxDQUFDLE1BQUEsUUFBUSxDQUFDLHFCQUFxQiwwQ0FBRSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const order_1 = require("@ritbit/v4-proto/src/codegen/ritbit/clob/order");
7
+ const constants_1 = require("../../../src/clients/constants");
8
+ const local_wallet_1 = __importDefault(require("../../../src/clients/modules/local-wallet"));
9
+ const subaccount_1 = require("../../../src/clients/subaccount");
10
+ const validator_client_1 = require("../../../src/clients/validator-client");
11
+ const utils_1 = require("../../../src/lib/utils");
12
+ const constants_2 = require("../../../examples/constants");
13
+ const src_1 = require("../../../src");
14
+ function dummyOrder(height) {
15
+ const placeOrder = constants_2.defaultOrder;
16
+ placeOrder.clientId = (0, utils_1.randomInt)(1000000000);
17
+ placeOrder.goodTilBlock = height + 3;
18
+ // placeOrder.goodTilBlockTime = height + 3;
19
+ const random = (0, utils_1.randomInt)(1000);
20
+ if (random % 2 === 0) {
21
+ placeOrder.side = order_1.Order_Side.SIDE_BUY;
22
+ }
23
+ else {
24
+ placeOrder.side = order_1.Order_Side.SIDE_SELL;
25
+ }
26
+ return placeOrder;
27
+ }
28
+ describe('Validator Client', () => {
29
+ let wallet;
30
+ let client;
31
+ describe('Post', () => {
32
+ beforeEach(async () => {
33
+ wallet = await local_wallet_1.default.fromMnemonic(constants_2.TEST_MNEMONIC, src_1.BECH32_PREFIX);
34
+ client = await validator_client_1.ValidatorClient.connect(constants_1.Network.testnet().validatorConfig);
35
+ });
36
+ it('PlaceOrder', async () => {
37
+ console.log('**Client**');
38
+ console.log(client);
39
+ const address = wallet.address;
40
+ const account = await client.get.getAccount(address);
41
+ console.log('**Account**');
42
+ console.log(account);
43
+ const height = await client.get.latestBlockHeight();
44
+ const subaccount = subaccount_1.SubaccountInfo.forLocalWallet(wallet, 0);
45
+ const placeOrder = dummyOrder(height);
46
+ placeOrder.clientId = (0, utils_1.randomInt)(1000000000);
47
+ const tx = await client.post.placeOrderObject(subaccount, placeOrder);
48
+ console.log('**Order Tx**');
49
+ console.log(tx);
50
+ });
51
+ });
52
+ });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yUG9zdEVuZHBvaW50cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vX190ZXN0c19fL21vZHVsZXMvY2xpZW50L1ZhbGlkYXRvclBvc3RFbmRwb2ludHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBFQUE0RTtBQUU1RSw4REFBeUQ7QUFDekQsNkZBQW9FO0FBQ3BFLGdFQUFpRTtBQUVqRSw0RUFBd0U7QUFDeEUsa0RBQW1EO0FBQ25ELDJEQUEwRTtBQUMxRSxzQ0FBNkM7QUFFN0MsU0FBUyxVQUFVLENBQUMsTUFBYztJQUNoQyxNQUFNLFVBQVUsR0FBRyx3QkFBWSxDQUFDO0lBQ2hDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBQSxpQkFBUyxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyw0Q0FBNEM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixVQUFVLENBQUMsSUFBSSxHQUFHLGtCQUFVLENBQUMsUUFBUSxDQUFDO0lBQ3hDLENBQUM7U0FBTSxDQUFDO1FBQ04sVUFBVSxDQUFDLElBQUksR0FBRyxrQkFBVSxDQUFDLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsSUFBSSxNQUFtQixDQUFDO0lBQ3hCLElBQUksTUFBdUIsQ0FBQztJQUU1QixRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNwQixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsTUFBTSxHQUFHLE1BQU0sc0JBQVcsQ0FBQyxZQUFZLENBQUMseUJBQWEsRUFBRSxtQkFBYSxDQUFDLENBQUM7WUFDdEUsTUFBTSxHQUFHLE1BQU0sa0NBQWUsQ0FBQyxPQUFPLENBQUMsbUJBQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFRLENBQUM7WUFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsMkJBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUEsaUJBQVMsRUFBQyxVQUFhLENBQUMsQ0FBQztZQUMvQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEST_MNEMONIC = exports.TEST_PRIVATE_KEY = exports.TEST_ADDRESS = void 0;
4
+ exports.TEST_ADDRESS = 'rit14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art';
5
+ exports.TEST_PRIVATE_KEY = 'e92a6595c934c991d3b3e987ea9b3125bf61a076deab3a9cb519787b7b3e8d77';
6
+ exports.TEST_MNEMONIC = 'mirror actor skill push coach wait confirm orchard lunch mobile athlete gossip awake miracle matter bus reopen team ladder lazy list timber render wait';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vX190ZXN0c19fL21vZHVsZXMvY2xpZW50L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFlBQVksR0FBRyw0Q0FBNEMsQ0FBQztBQUM1RCxRQUFBLGdCQUFnQixHQUMzQixrRUFBa0UsQ0FBQztBQUN4RCxRQUFBLGFBQWEsR0FDeEIseUpBQXlKLENBQUMifQ==
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const onboarding_1 = require("../../src/lib/onboarding");
4
+ const proto_signing_1 = require("@cosmjs/proto-signing");
5
+ const constants_1 = require("../helpers/constants");
6
+ describe('Onboarding', () => {
7
+ describe('exportMnemonicAndPrivateKey', () => {
8
+ it('Successfully creates HDKey', () => {
9
+ expect((0, onboarding_1.exportMnemonicAndPrivateKey)(constants_1.ENTROPY_FROM_SIGNATURE_RESULT)).toEqual({
10
+ mnemonic: constants_1.MNEMONIC_FROM_SIGNATURE_RESULT,
11
+ privateKey: constants_1.PRIVATE_KEY_FROM_SIGNATURE_RESULT,
12
+ publicKey: constants_1.PUBLIC_KEY_FROM_SIGNATURE_RESULT,
13
+ });
14
+ });
15
+ it('Expect mnemonic and private key to generate the same address', async () => {
16
+ const { mnemonic, privateKey } = (0, onboarding_1.exportMnemonicAndPrivateKey)(constants_1.ENTROPY_FROM_SIGNATURE_RESULT);
17
+ const wallet = await proto_signing_1.DirectSecp256k1HdWallet.fromMnemonic(mnemonic, {
18
+ prefix: 'dydx',
19
+ });
20
+ const pkWallet = await proto_signing_1.DirectSecp256k1Wallet.fromKey(privateKey, 'dydx');
21
+ const mnemonicAddress = (await wallet.getAccounts())[0].address;
22
+ const pkAddress = (await pkWallet.getAccounts())[0].address;
23
+ expect(mnemonicAddress).toEqual(pkAddress);
24
+ });
25
+ });
26
+ describe('deriveHDKeyFromEthereumSignature', () => {
27
+ it('Throw error if signature not valid', () => {
28
+ expect(() => (0, onboarding_1.deriveHDKeyFromEthereumSignature)('0x04db21dfsa321b')).toThrow();
29
+ });
30
+ it('Successfully creates HDKey', () => {
31
+ expect((0, onboarding_1.deriveHDKeyFromEthereumSignature)(constants_1.SIGNATURE_RESULT)).toEqual({
32
+ mnemonic: constants_1.MNEMONIC_FROM_SIGNATURE_RESULT,
33
+ privateKey: constants_1.PRIVATE_KEY_FROM_SIGNATURE_RESULT,
34
+ publicKey: constants_1.PUBLIC_KEY_FROM_SIGNATURE_RESULT,
35
+ });
36
+ });
37
+ it('Successfully creates HDKey from signature with different v values', () => {
38
+ const suffixes = ['00', '1b', '01', '1c'];
39
+ const testSignatures = suffixes.map((suffix) => constants_1.SIGNATURE_RESULT.slice(0, -2) + suffix);
40
+ testSignatures.forEach((sig) => {
41
+ expect((0, onboarding_1.deriveHDKeyFromEthereumSignature)(sig)).toEqual({
42
+ mnemonic: constants_1.MNEMONIC_FROM_SIGNATURE_RESULT,
43
+ privateKey: constants_1.PRIVATE_KEY_FROM_SIGNATURE_RESULT,
44
+ publicKey: constants_1.PUBLIC_KEY_FROM_SIGNATURE_RESULT,
45
+ });
46
+ });
47
+ });
48
+ });
49
+ });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZGluZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vX190ZXN0c19fL21vZHVsZXMvb25ib2FyZGluZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseURBR2tDO0FBQ2xDLHlEQUkrQjtBQUMvQixvREFNOEI7QUFFOUIsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsUUFBUSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUMzQyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxJQUFBLHdDQUEyQixFQUFDLHlDQUE2QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pFLFFBQVEsRUFBRSwwQ0FBOEI7Z0JBQ3hDLFVBQVUsRUFBRSw2Q0FBaUM7Z0JBQzdDLFNBQVMsRUFBRSw0Q0FBZ0M7YUFDNUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFBLHdDQUEyQixFQUFDLHlDQUE2QixDQUFDLENBQUM7WUFFNUYsTUFBTSxNQUFNLEdBQWtCLE1BQU0sdUNBQXVCLENBQUMsWUFBWSxDQUFDLFFBQVMsRUFBRTtnQkFDbEYsTUFBTSxFQUFFLE1BQU07YUFDZixDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLHFDQUFxQixDQUFDLE9BQU8sQ0FBQyxVQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoRSxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw2Q0FBZ0MsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxJQUFBLDZDQUFnQyxFQUFDLDRCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pFLFFBQVEsRUFBRSwwQ0FBOEI7Z0JBQ3hDLFVBQVUsRUFBRSw2Q0FBaUM7Z0JBQzdDLFNBQVMsRUFBRSw0Q0FBZ0M7YUFDNUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsR0FBRyxFQUFFO1lBQzNFLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFMUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsNEJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3hGLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLElBQUEsNkNBQWdDLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQ3BELFFBQVEsRUFBRSwwQ0FBOEI7b0JBQ3hDLFVBQVUsRUFBRSw2Q0FBaUM7b0JBQzdDLFNBQVMsRUFBRSw0Q0FBZ0M7aUJBQzVDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Simple JS example demostrating accessing subaccount data with Indexer REST endpoints
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const constants_1 = require("../src/clients/constants");
7
+ const indexer_client_1 = require("../src/clients/indexer-client");
8
+ const constants_2 = require("./constants");
9
+ async function test() {
10
+ const client = new indexer_client_1.IndexerClient(constants_1.Network.testnet().indexerConfig);
11
+ const address = constants_2.TEST_ADDRESS;
12
+ // Get subaccounts
13
+ try {
14
+ const response = await client.account.getSubaccounts(address);
15
+ console.log(response);
16
+ const subaccounts = response.subaccounts;
17
+ console.log(subaccounts);
18
+ const subaccount = subaccounts[0];
19
+ const subaccountNumber = subaccount.subaccountNumber;
20
+ console.log(subaccountNumber);
21
+ }
22
+ catch (error) {
23
+ console.log(error.message);
24
+ }
25
+ // Get subaccount 0
26
+ try {
27
+ const response = await client.account.getSubaccount(address, 0);
28
+ console.log(response);
29
+ const subaccount = response.subaccount;
30
+ console.log(subaccount);
31
+ const subaccountNumber = subaccount.subaccountNumber;
32
+ console.log(subaccountNumber);
33
+ }
34
+ catch (error) {
35
+ console.log(error.message);
36
+ }
37
+ // Get asset positions
38
+ try {
39
+ const response = await client.account.getSubaccountAssetPositions(address, 0);
40
+ console.log(response);
41
+ const positions = response.positions;
42
+ console.log(positions);
43
+ if (positions.length > 0) {
44
+ const positions0 = positions[0];
45
+ console.log(positions0);
46
+ }
47
+ }
48
+ catch (error) {
49
+ console.log(error.message);
50
+ }
51
+ // Get perp positions
52
+ try {
53
+ const response = await client.account.getSubaccountPerpetualPositions(address, 0);
54
+ console.log(response);
55
+ const positions = response.positions;
56
+ console.log(positions);
57
+ if (positions.length > 0) {
58
+ const positions0 = positions[0];
59
+ console.log(positions0);
60
+ }
61
+ }
62
+ catch (error) {
63
+ console.log(error.message);
64
+ }
65
+ // Get transfers
66
+ try {
67
+ const response = await client.account.getSubaccountTransfers(address, 0);
68
+ console.log(response);
69
+ const transfers = response.transfers;
70
+ console.log(transfers);
71
+ if (transfers.length > 0) {
72
+ const transfer0 = transfers[0];
73
+ console.log(transfer0);
74
+ }
75
+ }
76
+ catch (error) {
77
+ console.log(error.message);
78
+ }
79
+ // Get orders
80
+ try {
81
+ const response = await client.account.getSubaccountOrders(address, 0);
82
+ console.log(response);
83
+ const orders = response;
84
+ console.log(orders);
85
+ if (orders.length > 0) {
86
+ const order0 = orders[0];
87
+ console.log(order0);
88
+ const order0Id = order0.id;
89
+ console.log(order0Id);
90
+ }
91
+ }
92
+ catch (error) {
93
+ console.log(error.message);
94
+ }
95
+ // Get fills
96
+ try {
97
+ const response = await client.account.getSubaccountFills(address, 0);
98
+ console.log(response);
99
+ const fills = response.fills;
100
+ console.log(fills);
101
+ if (fills.length > 0) {
102
+ const fill0 = fills[0];
103
+ console.log(fill0);
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.log(error.message);
108
+ }
109
+ // Get historical pnl
110
+ try {
111
+ const response = await client.account.getSubaccountHistoricalPNLs(address, 0);
112
+ console.log(response);
113
+ const historicalPnl = response.historicalPnl;
114
+ console.log(historicalPnl);
115
+ if (historicalPnl.length > 0) {
116
+ const historicalPnl0 = historicalPnl[0];
117
+ console.log(historicalPnl0);
118
+ }
119
+ }
120
+ catch (error) {
121
+ console.log(error.message);
122
+ }
123
+ }
124
+ test()
125
+ .then(() => { })
126
+ .catch((error) => {
127
+ console.log(error.message);
128
+ });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9lbmRwb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9leGFtcGxlcy9hY2NvdW50X2VuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7O0FBRUgsd0RBQW1EO0FBQ25ELGtFQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSw4QkFBYSxDQUFDLG1CQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsd0JBQVksQ0FBQztJQUU3QixrQkFBa0I7SUFDbEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYTtJQUNiLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO0lBQ1osSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNCLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQUksRUFBRTtLQUNILElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7S0FDZCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const lodash_1 = __importDefault(require("lodash"));
7
+ const src_1 = require("../src");
8
+ const composite_client_1 = require("../src/clients/composite-client");
9
+ const constants_1 = require("../src/clients/constants");
10
+ const local_wallet_1 = __importDefault(require("../src/clients/modules/local-wallet"));
11
+ const subaccount_1 = require("../src/clients/subaccount");
12
+ const utils_1 = require("../src/lib/utils");
13
+ const constants_2 = require("./constants");
14
+ const generateShortTermOrdersInfo = () => [
15
+ {
16
+ marketId: 'ETH-USD',
17
+ clientId: (0, utils_1.randomInt)(constants_2.MAX_CLIENT_ID),
18
+ side: constants_1.OrderSide.SELL,
19
+ price: 4000,
20
+ size: 0.01,
21
+ },
22
+ {
23
+ marketId: 'ETH-USD',
24
+ clientId: (0, utils_1.randomInt)(constants_2.MAX_CLIENT_ID),
25
+ side: constants_1.OrderSide.SELL,
26
+ price: 4200,
27
+ size: 0.02,
28
+ },
29
+ {
30
+ marketId: 'BTC-USD',
31
+ clientId: (0, utils_1.randomInt)(constants_2.MAX_CLIENT_ID),
32
+ side: constants_1.OrderSide.BUY,
33
+ price: 40000,
34
+ size: 0.01,
35
+ },
36
+ ];
37
+ const generateBatchCancelShortTermOrders = (ordersInfo) => {
38
+ const ordersGroupedByMarketIds = lodash_1.default.groupBy(ordersInfo, (info) => info.marketId);
39
+ return Object.keys(ordersGroupedByMarketIds).map((marketId) => ({
40
+ marketId,
41
+ clientIds: ordersGroupedByMarketIds[marketId].map((info) => info.clientId),
42
+ }));
43
+ };
44
+ async function test() {
45
+ try {
46
+ const wallet = await local_wallet_1.default.fromMnemonic(constants_2.TEST_MNEMONIC, src_1.BECH32_PREFIX);
47
+ console.log('**Wallet**', wallet);
48
+ const network = constants_1.Network.testnet();
49
+ const client = await composite_client_1.CompositeClient.connect(network);
50
+ console.log('**Client**', client);
51
+ const subaccount = subaccount_1.SubaccountInfo.forLocalWallet(wallet, 0);
52
+ const currentBlock = await client.validatorClient.get.latestBlockHeight();
53
+ const goodTilBlock = currentBlock + 10;
54
+ const shortTermOrdersInfo = generateShortTermOrdersInfo();
55
+ await placeShortTermOrders(client, subaccount, shortTermOrdersInfo, goodTilBlock);
56
+ await (0, utils_1.sleep)(5000);
57
+ await batchCancelOrders(client, subaccount, shortTermOrdersInfo, goodTilBlock);
58
+ }
59
+ catch (error) {
60
+ console.error('**Test Failed**', error.message);
61
+ }
62
+ }
63
+ const placeShortTermOrders = async (client, subaccount, shortTermOrdersInfo, goodTilBlock) => {
64
+ const orderPromises = shortTermOrdersInfo.map(async (order) => {
65
+ try {
66
+ const tx = await client.placeShortTermOrder(subaccount, order.marketId, order.side, order.price, order.size, order.clientId, goodTilBlock, src_1.Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED, false);
67
+ console.log('**Short Term Order Tx**', tx.hash);
68
+ }
69
+ catch (error) {
70
+ console.error(`**Short Term Order Failed for Market ${order.marketId}, Client ID ${order.clientId}**`, error.message);
71
+ }
72
+ });
73
+ // Wait for all order placements to complete
74
+ await Promise.all(orderPromises);
75
+ };
76
+ const batchCancelOrders = async (client, subaccount, shortTermOrdersInfo, goodTilBlock) => {
77
+ const shortTermOrdersPayload = generateBatchCancelShortTermOrders(shortTermOrdersInfo);
78
+ try {
79
+ const tx = await client.batchCancelShortTermOrdersWithMarketId(subaccount, shortTermOrdersPayload, goodTilBlock + 10);
80
+ console.log('**Batch Cancel Short Term Orders Tx**', tx);
81
+ }
82
+ catch (error) {
83
+ console.error('**Batch Cancel Short Term Orders Failed**', error.message);
84
+ }
85
+ };
86
+ test()
87
+ .then(() => {
88
+ console.log('**Batch Cancel Test Completed Successfully**');
89
+ })
90
+ .catch((error) => {
91
+ console.error('**Batch Cancel Test Execution Error**', error.message);
92
+ });
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfY2FuY2VsX29yZGVyc19leGFtcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXhhbXBsZXMvYmF0Y2hfY2FuY2VsX29yZGVyc19leGFtcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQXVCO0FBRXZCLGdDQUEwRDtBQUMxRCxzRUFBMEY7QUFDMUYsd0RBQThEO0FBQzlELHVGQUE4RDtBQUM5RCwwREFBMkQ7QUFDM0QsNENBQW9EO0FBQ3BELDJDQUEyRDtBQVUzRCxNQUFNLDJCQUEyQixHQUFHLEdBQWdCLEVBQUUsQ0FBQztJQUNyRDtRQUNFLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFFBQVEsRUFBRSxJQUFBLGlCQUFTLEVBQUMseUJBQWEsQ0FBQztRQUNsQyxJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJO1FBQ3BCLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLElBQUk7S0FDWDtJQUNEO1FBQ0UsUUFBUSxFQUFFLFNBQVM7UUFDbkIsUUFBUSxFQUFFLElBQUEsaUJBQVMsRUFBQyx5QkFBYSxDQUFDO1FBQ2xDLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUk7UUFDcEIsS0FBSyxFQUFFLElBQUk7UUFDWCxJQUFJLEVBQUUsSUFBSTtLQUNYO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsU0FBUztRQUNuQixRQUFRLEVBQUUsSUFBQSxpQkFBUyxFQUFDLHlCQUFhLENBQUM7UUFDbEMsSUFBSSxFQUFFLHFCQUFTLENBQUMsR0FBRztRQUNuQixLQUFLLEVBQUUsS0FBSztRQUNaLElBQUksRUFBRSxJQUFJO0tBQ1g7Q0FDRixDQUFDO0FBRUYsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLFVBQXVCLEVBQTRCLEVBQUU7SUFDL0YsTUFBTSx3QkFBd0IsR0FBRyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsUUFBUTtRQUNSLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDM0UsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixLQUFLLFVBQVUsSUFBSTtJQUNqQixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFXLENBQUMsWUFBWSxDQUFDLHlCQUFhLEVBQUUsbUJBQWEsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLG1CQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQ0FBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsQyxNQUFNLFVBQVUsR0FBRywyQkFBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFFLE1BQU0sWUFBWSxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFdkMsTUFBTSxtQkFBbUIsR0FBRywyQkFBMkIsRUFBRSxDQUFDO1FBQzFELE1BQU0sb0JBQW9CLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNsRixNQUFNLElBQUEsYUFBSyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLE1BQU0saUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ2hDLE1BQXVCLEVBQ3ZCLFVBQTBCLEVBQzFCLG1CQUFnQyxFQUNoQyxZQUFvQixFQUNMLEVBQUU7SUFDakIsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM1RCxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDekMsVUFBVSxFQUNWLEtBQUssQ0FBQyxRQUFRLEVBQ2QsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsS0FBSyxFQUNYLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFDZCxZQUFZLEVBQ1osdUJBQWlCLENBQUMseUJBQXlCLEVBQzNDLEtBQUssQ0FDTixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUNYLHdDQUF3QyxLQUFLLENBQUMsUUFBUSxlQUFlLEtBQUssQ0FBQyxRQUFRLElBQUksRUFDdkYsS0FBSyxDQUFDLE9BQU8sQ0FDZCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsNENBQTRDO0lBQzVDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFDN0IsTUFBdUIsRUFDdkIsVUFBMEIsRUFDMUIsbUJBQWdDLEVBQ2hDLFlBQW9CLEVBQ0wsRUFBRTtJQUNqQixNQUFNLHNCQUFzQixHQUFHLGtDQUFrQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsc0NBQXNDLENBQzVELFVBQVUsRUFDVixzQkFBc0IsRUFDdEIsWUFBWSxHQUFHLEVBQUUsQ0FDbEIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsSUFBSSxFQUFFO0tBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUM7S0FDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const src_1 = require("../src");
7
+ const composite_client_1 = require("../src/clients/composite-client");
8
+ const constants_1 = require("../src/clients/constants");
9
+ const local_wallet_1 = __importDefault(require("../src/clients/modules/local-wallet"));
10
+ const subaccount_1 = require("../src/clients/subaccount");
11
+ const utils_1 = require("../src/lib/utils");
12
+ const constants_2 = require("./constants");
13
+ const human_readable_orders_json_1 = __importDefault(require("./human_readable_orders.json"));
14
+ async function sleep(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ async function test() {
18
+ var _a, _b, _c;
19
+ const wallet = await local_wallet_1.default.fromMnemonic(constants_2.TEST_MNEMONIC, src_1.BECH32_PREFIX);
20
+ console.log(wallet);
21
+ const network = constants_1.Network.testnet();
22
+ const client = await composite_client_1.CompositeClient.connect(network);
23
+ console.log('**Client**');
24
+ console.log(client);
25
+ const subaccount = subaccount_1.SubaccountInfo.forLocalWallet(wallet, 0);
26
+ for (const orderParams of human_readable_orders_json_1.default) {
27
+ try {
28
+ const type = constants_1.OrderType[orderParams.type];
29
+ const side = constants_1.OrderSide[orderParams.side];
30
+ const timeInForceString = (_a = orderParams.timeInForce) !== null && _a !== void 0 ? _a : 'GTT';
31
+ const timeInForce = constants_1.OrderTimeInForce[timeInForceString];
32
+ const price = (_b = orderParams.price) !== null && _b !== void 0 ? _b : 1350;
33
+ const timeInForceSeconds = timeInForce === constants_1.OrderTimeInForce.GTT ? 60 : 0;
34
+ const postOnly = (_c = orderParams.postOnly) !== null && _c !== void 0 ? _c : false;
35
+ const tx = await client.placeOrder(subaccount, 'ETH-USD', type, side, price, 0.01, (0, utils_1.randomInt)(constants_2.MAX_CLIENT_ID), timeInForce, timeInForceSeconds, constants_1.OrderExecution.DEFAULT, postOnly, false);
36
+ console.log('**Order Tx**');
37
+ console.log(tx);
38
+ }
39
+ catch (error) {
40
+ console.log(error.message);
41
+ }
42
+ await sleep(5000); // wait for placeOrder to complete
43
+ }
44
+ }
45
+ test()
46
+ .then(() => { })
47
+ .catch((error) => {
48
+ console.log(error.message);
49
+ });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlX2V4YW1wbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9leGFtcGxlcy9jb21wb3NpdGVfZXhhbXBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdDQUF1QztBQUN2QyxzRUFBa0U7QUFDbEUsd0RBTWtDO0FBQ2xDLHVGQUE4RDtBQUM5RCwwREFBMkQ7QUFDM0QsNENBQTZDO0FBQzdDLDJDQUEyRDtBQUMzRCw4RkFBd0Q7QUFFeEQsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUFVO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7O0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQVcsQ0FBQyxZQUFZLENBQUMseUJBQWEsRUFBRSxtQkFBYSxDQUFDLENBQUM7SUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixNQUFNLE9BQU8sR0FBRyxtQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0NBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sVUFBVSxHQUFHLDJCQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxLQUFLLE1BQU0sV0FBVyxJQUFJLG9DQUFZLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxxQkFBUyxDQUFDLFdBQVcsQ0FBQyxJQUE4QixDQUFDLENBQUM7WUFDbkUsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxXQUFXLENBQUMsSUFBOEIsQ0FBQyxDQUFDO1lBQ25FLE1BQU0saUJBQWlCLEdBQUcsTUFBQSxXQUFXLENBQUMsV0FBVyxtQ0FBSSxLQUFLLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsNEJBQWdCLENBQUMsaUJBQWtELENBQUMsQ0FBQztZQUN6RixNQUFNLEtBQUssR0FBRyxNQUFBLFdBQVcsQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQztZQUN4QyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsS0FBSyw0QkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sUUFBUSxHQUFHLE1BQUEsV0FBVyxDQUFDLFFBQVEsbUNBQUksS0FBSyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FDaEMsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBQSxpQkFBUyxFQUFDLHlCQUFhLENBQUMsRUFDeEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQiwwQkFBYyxDQUFDLE9BQU8sRUFDdEIsUUFBUSxFQUNSLEtBQUssQ0FDTixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0NBQWtDO0lBQ3ZELENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBSSxFQUFFO0tBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztLQUNkLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.defaultOrder = exports.MAX_CLIENT_ID = exports.PERPETUAL_PAIR_BTC_USD = exports.MARKET_BTC_USD = exports.TEST_MNEMONIC_3 = exports.TEST_MNEMONIC_2 = exports.LOCAL_MNEMONIC = exports.RITBIT_LOCAL_ADDRESS = exports.TEST_MNEMONIC = exports.TEST_PRIVATE_KEY = exports.TEST_ADDRESS = void 0;
7
+ const order_1 = require("@ritbit/v4-proto/src/codegen/ritbit/clob/order");
8
+ const long_1 = __importDefault(require("long"));
9
+ const types_1 = require("../src/clients/types");
10
+ exports.TEST_ADDRESS = 'ritbit14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art';
11
+ exports.TEST_PRIVATE_KEY = 'e92a6595c934c991d3b3e987ea9b3125bf61a076deab3a9cb519787b7b3e8d77';
12
+ exports.TEST_MNEMONIC = 'mirror actor skill push coach wait confirm orchard lunch mobile athlete gossip awake miracle matter bus reopen team ladder lazy list timber render wait';
13
+ exports.RITBIT_LOCAL_ADDRESS = 'ritbit199tqg4wdlnu4qjlxchpd7seg454937hjrknju4';
14
+ exports.LOCAL_MNEMONIC = 'merge panther lobster crazy road hollow amused security before critic about cliff exhibit cause coyote talent happy where lion river tobacco option coconut small';
15
+ exports.TEST_MNEMONIC_2 = 'movie yard still copper exile wear brisk chest ride dizzy novel future menu finish radar lunar claim hub middle force turtle mouse frequent embark';
16
+ // ritbit1fxu2ndxwju2evh28js0cflkxn5wxzvlhw4gec5
17
+ exports.TEST_MNEMONIC_3 = 'crane poverty boil edit response weasel quick almost fringe able upon benefit boil boat narrow innocent enter cradle tongue toward luggage awful mention column';
18
+ exports.MARKET_BTC_USD = 'BTC-USD';
19
+ exports.PERPETUAL_PAIR_BTC_USD = 0;
20
+ const quantums = new long_1.default(1000000000);
21
+ const subticks = new long_1.default(1000000000);
22
+ exports.MAX_CLIENT_ID = 2 ** 32 - 1;
23
+ // PlaceOrder variables
24
+ exports.defaultOrder = {
25
+ clientId: 0,
26
+ orderFlags: types_1.OrderFlags.SHORT_TERM,
27
+ clobPairId: exports.PERPETUAL_PAIR_BTC_USD,
28
+ side: order_1.Order_Side.SIDE_BUY,
29
+ quantums,
30
+ subticks,
31
+ timeInForce: order_1.Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED,
32
+ reduceOnly: false,
33
+ clientMetadata: 0,
34
+ };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXhhbXBsZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBFQUd3RDtBQUN4RCxnREFBd0I7QUFFeEIsZ0RBQStEO0FBRWxELFFBQUEsWUFBWSxHQUFHLCtDQUErQyxDQUFDO0FBQy9ELFFBQUEsZ0JBQWdCLEdBQzNCLGtFQUFrRSxDQUFDO0FBQ3hELFFBQUEsYUFBYSxHQUN4Qix5SkFBeUosQ0FBQztBQUMvSSxRQUFBLG9CQUFvQixHQUFHLCtDQUErQyxDQUFDO0FBQ3ZFLFFBQUEsY0FBYyxHQUN6QixtS0FBbUssQ0FBQztBQUV6SixRQUFBLGVBQWUsR0FBRyxvSkFBb0osQ0FBQztBQUVwTCxnREFBZ0Q7QUFDbkMsUUFBQSxlQUFlLEdBQUcsaUtBQWlLLENBQUM7QUFFcEwsUUFBQSxjQUFjLEdBQVcsU0FBUyxDQUFDO0FBQ25DLFFBQUEsc0JBQXNCLEdBQVcsQ0FBQyxDQUFDO0FBRWhELE1BQU0sUUFBUSxHQUFTLElBQUksY0FBSSxDQUFDLFVBQWEsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sUUFBUSxHQUFTLElBQUksY0FBSSxDQUFDLFVBQWEsQ0FBQyxDQUFDO0FBRWxDLFFBQUEsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRXpDLHVCQUF1QjtBQUNWLFFBQUEsWUFBWSxHQUFnQjtJQUN2QyxRQUFRLEVBQUUsQ0FBQztJQUNYLFVBQVUsRUFBRSxrQkFBVSxDQUFDLFVBQVU7SUFDakMsVUFBVSxFQUFFLDhCQUFzQjtJQUNsQyxJQUFJLEVBQUUsa0JBQVUsQ0FBQyxRQUFRO0lBQ3pCLFFBQVE7SUFDUixRQUFRO0lBQ1IsV0FBVyxFQUFFLHlCQUFpQixDQUFDLHlCQUF5QjtJQUN4RCxVQUFVLEVBQUUsS0FBSztJQUNqQixjQUFjLEVBQUUsQ0FBQztDQUNsQixDQUFDIn0=
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Simple JS example demostrating filling subaccount with Faucet API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const constants_1 = require("../src/clients/constants");
7
+ const faucet_client_1 = require("../src/clients/faucet-client");
8
+ const constants_2 = require("./constants");
9
+ async function test() {
10
+ const client = new faucet_client_1.FaucetClient(constants_1.FaucetApiHost.TESTNET);
11
+ const address = constants_2.TEST_ADDRESS;
12
+ // Use faucet to fill subaccount
13
+ const faucetResponse = await (client === null || client === void 0 ? void 0 : client.fill(address, 0, 2000));
14
+ console.log(faucetResponse);
15
+ const status = faucetResponse.status;
16
+ console.log(status);
17
+ }
18
+ test()
19
+ .then(() => { })
20
+ .catch((error) => {
21
+ console.log(error.message);
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmF1Y2V0X2VuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXhhbXBsZXMvZmF1Y2V0X2VuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFFSCx3REFBeUQ7QUFDekQsZ0VBQTREO0FBQzVELDJDQUEyQztBQUUzQyxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLDRCQUFZLENBQUMseUJBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxNQUFNLE9BQU8sR0FBRyx3QkFBWSxDQUFDO0lBRTdCLGdDQUFnQztJQUNoQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUM7SUFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELElBQUksRUFBRTtLQUNILElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7S0FDZCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const perpetual_1 = require("@ritbit/v4-proto/src/codegen/ritbit/perpetuals/perpetual");
7
+ const long_1 = __importDefault(require("long"));
8
+ const src_1 = require("../src");
9
+ const composite_client_1 = require("../src/clients/composite-client");
10
+ const constants_1 = require("../src/clients/constants");
11
+ const utils_1 = require("../src/lib/utils");
12
+ const constants_2 = require("./constants");
13
+ const INITIAL_DEPOSIT_AMOUNT = 10000000000000; // 10,000 whole native tokens.
14
+ const MOCK_DATA = {
15
+ // common
16
+ id: 34,
17
+ ticker: 'BONK-USD',
18
+ // x/prices
19
+ priceExponent: -14,
20
+ minExchanges: 3,
21
+ minPriceChange: 4000,
22
+ exchangeConfigJson: JSON.stringify({
23
+ exchanges: [
24
+ { exchangeName: 'Binance', ticker: 'BONKUSDT', adjustByMarket: 'USDT-USD' },
25
+ { exchangeName: 'Bybit', ticker: 'BONKUSDT', adjustByMarket: 'USDT-USD' },
26
+ { exchangeName: 'CoinbasePro', ticker: 'BONK-USD' },
27
+ { exchangeName: 'Kucoin', ticker: 'BONK-USDT', adjustByMarket: 'USDT-USD' },
28
+ { exchangeName: 'Okx', ticker: 'BONK-USDT', adjustByMarket: 'USDT-USD' },
29
+ { exchangeName: 'Mexc', ticker: 'BONK_USDT', adjustByMarket: 'USDT-USD' },
30
+ ],
31
+ }),
32
+ // x/perpetuals
33
+ liquidityTier: 2,
34
+ atomicResolution: -1,
35
+ marketType: perpetual_1.PerpetualMarketType.PERPETUAL_MARKET_TYPE_CROSS,
36
+ // x/clob
37
+ quantumConversionExponent: -9,
38
+ stepBaseQuantums: long_1.default.fromNumber(1000000),
39
+ subticksPerTick: 1000000,
40
+ // x/delaymsg
41
+ delayBlocks: 5,
42
+ };
43
+ // To run this test:
44
+ // npm run build && node build/examples/gov_add_new_market.js
45
+ //
46
+ // Confirmed that the proposals have the exact same content.
47
+ // 1. submit using an example json file
48
+ // ritbitd tx gov submit-proposal gov_add_new_market.json \
49
+ // --from alice --keyring-backend test --gas auto --fees 9553225000000000adv4tnt
50
+ // ritbitd query gov proposals
51
+ // 2. submit using the file's mock data
52
+ // npm run build && node build/examples/gov_add_new_market.js
53
+ // ritbitd query gov proposals
54
+ // 3. then compare the two proposals and ensure they match
55
+ async function test() {
56
+ console.log('**Start**');
57
+ const wallet = await src_1.LocalWallet.fromMnemonic(constants_2.LOCAL_MNEMONIC, constants_1.BECH32_PREFIX);
58
+ console.log(wallet);
59
+ const network = constants_1.Network.local();
60
+ const client = await composite_client_1.CompositeClient.connect(network);
61
+ console.log('**Client**');
62
+ console.log(client);
63
+ const tx = await client.submitGovAddNewMarketProposal(wallet, MOCK_DATA, (0, utils_1.getGovAddNewMarketTitle)(MOCK_DATA.ticker), (0, utils_1.getGovAddNewMarketSummary)(MOCK_DATA.ticker, MOCK_DATA.delayBlocks), BigInt(INITIAL_DEPOSIT_AMOUNT).toString());
64
+ console.log('**Tx**');
65
+ console.log(tx);
66
+ await (0, utils_1.sleep)(5000);
67
+ const depositProposals = await client.validatorClient.get.getAllGovProposals(src_1.ProposalStatus.PROPOSAL_STATUS_DEPOSIT_PERIOD);
68
+ console.log('**Deposit Proposals**');
69
+ console.log(depositProposals);
70
+ const votingProposals = await client.validatorClient.get.getAllGovProposals(src_1.ProposalStatus.PROPOSAL_STATUS_VOTING_PERIOD);
71
+ console.log('**Voting Proposals**');
72
+ console.log(votingProposals);
73
+ }
74
+ test().catch((error) => {
75
+ console.error(error);
76
+ });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292X2FkZF9uZXdfbWFya2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXhhbXBsZXMvZ292X2FkZF9uZXdfbWFya2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0ZBQStGO0FBQy9GLGdEQUF3QjtBQUV4QixnQ0FBNEU7QUFDNUUsc0VBQWtFO0FBQ2xFLHdEQUFrRTtBQUNsRSw0Q0FBNkY7QUFDN0YsMkNBQTZDO0FBRTdDLE1BQU0sc0JBQXNCLEdBQUcsY0FBa0IsQ0FBQyxDQUFDLDhCQUE4QjtBQUNqRixNQUFNLFNBQVMsR0FBMEI7SUFDdkMsU0FBUztJQUNULEVBQUUsRUFBRSxFQUFFO0lBQ04sTUFBTSxFQUFFLFVBQVU7SUFFbEIsV0FBVztJQUNYLGFBQWEsRUFBRSxDQUFDLEVBQUU7SUFDbEIsWUFBWSxFQUFFLENBQUM7SUFDZixjQUFjLEVBQUUsSUFBSztJQUNyQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLFNBQVMsRUFBRTtZQUNULEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUU7WUFDM0UsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRTtZQUN6RSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtZQUNuRCxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFO1lBQzNFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUU7WUFDeEUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRTtTQUMxRTtLQUNGLENBQUM7SUFFRixlQUFlO0lBQ2YsYUFBYSxFQUFFLENBQUM7SUFDaEIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLFVBQVUsRUFBRSwrQkFBbUIsQ0FBQywyQkFBMkI7SUFFM0QsU0FBUztJQUNULHlCQUF5QixFQUFFLENBQUMsQ0FBQztJQUM3QixnQkFBZ0IsRUFBRSxjQUFJLENBQUMsVUFBVSxDQUFDLE9BQVMsQ0FBQztJQUM1QyxlQUFlLEVBQUUsT0FBUztJQUUxQixhQUFhO0lBQ2IsV0FBVyxFQUFFLENBQUM7Q0FDZixDQUFDO0FBRUYsb0JBQW9CO0FBQ3BCLDhEQUE4RDtBQUM5RCxFQUFFO0FBQ0YsNERBQTREO0FBQzVELHdDQUF3QztBQUN4Qyw2REFBNkQ7QUFDN0QscUZBQXFGO0FBQ3JGLGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsK0RBQStEO0FBQy9ELGdDQUFnQztBQUNoQywyREFBMkQ7QUFDM0QsS0FBSyxVQUFVLElBQUk7SUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QixNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFXLENBQUMsWUFBWSxDQUFDLDBCQUFjLEVBQUUseUJBQWEsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEIsTUFBTSxPQUFPLEdBQUcsbUJBQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwQixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FDbkQsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFBLCtCQUF1QixFQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFDekMsSUFBQSxpQ0FBeUIsRUFBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFDbEUsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQzFDLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEIsTUFBTSxJQUFBLGFBQUssRUFBQyxJQUFJLENBQUMsQ0FBQztJQUVsQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQzFFLG9CQUFjLENBQUMsOEJBQThCLENBQzlDLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sZUFBZSxHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQ3pFLG9CQUFjLENBQUMsNkJBQTZCLENBQzdDLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyJ9