@dydxprotocol/v4-client-js 0.38.1 → 0.38.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/examples/composite_example.js +2 -2
- package/build/examples/constants.d.ts +1 -0
- package/build/examples/constants.js +3 -2
- package/build/examples/long_term_order_cancel_example.js +62 -0
- package/build/examples/short_term_order_cancel_example.d.ts +1 -0
- package/build/examples/short_term_order_cancel_example.js +53 -0
- package/build/examples/short_term_order_composite_example.d.ts +1 -0
- package/build/examples/{short_term_composite_example.js → short_term_order_composite_example.js} +1 -1
- package/build/examples/test.d.ts +1 -0
- package/build/examples/test.js +49 -0
- package/build/src/clients/composite-client.d.ts +5 -5
- package/build/src/clients/composite-client.js +33 -7
- package/build/src/lib/utils.d.ts +6 -0
- package/build/src/lib/utils.js +11 -2
- package/build/src/lib/validation.d.ts +3 -1
- package/build/src/lib/validation.js +8 -2
- package/examples/composite_example.ts +2 -2
- package/examples/constants.ts +2 -0
- package/examples/long_term_order_cancel_example.ts +82 -0
- package/examples/short_term_order_cancel_example.ts +69 -0
- package/examples/test.ts +60 -0
- package/package.json +1 -1
- package/src/clients/composite-client.ts +39 -8
- package/src/lib/utils.ts +9 -0
- package/src/lib/validation.ts +6 -1
- /package/build/examples/{short_term_composite_example.d.ts → long_term_order_cancel_example.d.ts} +0 -0
- /package/examples/{short_term_composite_example.ts → short_term_order_composite_example.ts} +0 -0
|
@@ -32,7 +32,7 @@ async function test() {
|
|
|
32
32
|
const price = (_b = orderParams.price) !== null && _b !== void 0 ? _b : 1350;
|
|
33
33
|
const timeInForceSeconds = (timeInForce === constants_1.OrderTimeInForce.GTT) ? 60 : 0;
|
|
34
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)(
|
|
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
36
|
console.log('**Order Tx**');
|
|
37
37
|
console.log(tx);
|
|
38
38
|
}
|
|
@@ -46,4 +46,4 @@ test().then(() => {
|
|
|
46
46
|
}).catch((error) => {
|
|
47
47
|
console.log(error.message);
|
|
48
48
|
});
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlX2V4YW1wbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9leGFtcGxlcy9jb21wb3NpdGVfZXhhbXBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdDQUF1QztBQUN2QyxzRUFBa0U7QUFDbEUsd0RBRWtDO0FBQ2xDLHVGQUE4RDtBQUM5RCwwREFBdUQ7QUFDdkQsNENBQTZDO0FBQzdDLDJDQUFnRTtBQUNoRSw4RkFBd0Q7QUFFeEQsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUFVO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7O0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQVcsQ0FBQyxZQUFZLENBQUMsOEJBQWtCLEVBQUUsbUJBQWEsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEIsTUFBTSxPQUFPLEdBQUcsbUJBQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQUssTUFBTSxXQUFXLElBQUksb0NBQVksRUFBRTtRQUN0QyxJQUFJO1lBQ0YsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxXQUFXLENBQUMsSUFBOEIsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sSUFBSSxHQUFHLHFCQUFTLENBQUMsV0FBVyxDQUFDLElBQThCLENBQUMsQ0FBQztZQUNuRSxNQUFNLGlCQUFpQixHQUFHLE1BQUEsV0FBVyxDQUFDLFdBQVcsbUNBQUksS0FBSyxDQUFDO1lBQzNELE1BQU0sV0FBVyxHQUFHLDRCQUFnQixDQUFDLGlCQUFrRCxDQUFDLENBQUM7WUFDekYsTUFBTSxLQUFLLEdBQUcsTUFBQSxXQUFXLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUM7WUFDeEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFdBQVcsS0FBSyw0QkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0UsTUFBTSxRQUFRLEdBQUcsTUFBQSxXQUFXLENBQUMsUUFBUSxtQ0FBSSxLQUFLLENBQUM7WUFDL0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUNoQyxVQUFVLEVBQ1YsU0FBUyxFQUNULElBQUksRUFDSixJQUFJLEVBQ0osS0FBSyxFQUNMLElBQUksRUFDSixJQUFBLGlCQUFTLEVBQUMseUJBQWEsQ0FBQyxFQUN4QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLDBCQUFjLENBQUMsT0FBTyxFQUN0QixRQUFRLEVBQ1IsS0FBSyxDQUNOLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxrQ0FBa0M7S0FDdkQ7QUFDSCxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNqQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQyJ9
|
|
@@ -4,4 +4,5 @@ export declare const DYDX_TEST_PRIVATE_KEY = "e92a6595c934c991d3b3e987ea9b3125bf
|
|
|
4
4
|
export declare const DYDX_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";
|
|
5
5
|
export declare const MARKET_BTC_USD: string;
|
|
6
6
|
export declare const PERPETUAL_PAIR_BTC_USD: number;
|
|
7
|
+
export declare const MAX_CLIENT_ID: number;
|
|
7
8
|
export declare const defaultOrder: IPlaceOrder;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.defaultOrder = exports.PERPETUAL_PAIR_BTC_USD = exports.MARKET_BTC_USD = exports.DYDX_TEST_MNEMONIC = exports.DYDX_TEST_PRIVATE_KEY = exports.DYDX_TEST_ADDRESS = void 0;
|
|
6
|
+
exports.defaultOrder = exports.MAX_CLIENT_ID = exports.PERPETUAL_PAIR_BTC_USD = exports.MARKET_BTC_USD = exports.DYDX_TEST_MNEMONIC = exports.DYDX_TEST_PRIVATE_KEY = exports.DYDX_TEST_ADDRESS = void 0;
|
|
7
7
|
const order_1 = require("@dydxprotocol/v4-proto/src/codegen/dydxprotocol/clob/order");
|
|
8
8
|
const long_1 = __importDefault(require("long"));
|
|
9
9
|
const types_1 = require("../src/clients/types");
|
|
@@ -14,6 +14,7 @@ exports.MARKET_BTC_USD = 'BTC-USD';
|
|
|
14
14
|
exports.PERPETUAL_PAIR_BTC_USD = 0;
|
|
15
15
|
const quantums = new long_1.default(1000000000);
|
|
16
16
|
const subticks = new long_1.default(1000000000);
|
|
17
|
+
exports.MAX_CLIENT_ID = 2 ** 32 - 1;
|
|
17
18
|
// PlaceOrder variables
|
|
18
19
|
exports.defaultOrder = {
|
|
19
20
|
clientId: 0,
|
|
@@ -26,4 +27,4 @@ exports.defaultOrder = {
|
|
|
26
27
|
reduceOnly: false,
|
|
27
28
|
clientMetadata: 0,
|
|
28
29
|
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZXhhbXBsZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNGQUEyRztBQUMzRyxnREFBd0I7QUFFeEIsZ0RBQStEO0FBRWxELFFBQUEsaUJBQWlCLEdBQUcsNkNBQTZDLENBQUM7QUFDbEUsUUFBQSxxQkFBcUIsR0FBRyxrRUFBa0UsQ0FBQztBQUMzRixRQUFBLGtCQUFrQixHQUFHLHlKQUF5SixDQUFDO0FBRS9LLFFBQUEsY0FBYyxHQUFXLFNBQVMsQ0FBQztBQUNuQyxRQUFBLHNCQUFzQixHQUFXLENBQUMsQ0FBQztBQUVoRCxNQUFNLFFBQVEsR0FBUyxJQUFJLGNBQUksQ0FBQyxVQUFhLENBQUMsQ0FBQztBQUMvQyxNQUFNLFFBQVEsR0FBUyxJQUFJLGNBQUksQ0FBQyxVQUFhLENBQUMsQ0FBQztBQUVsQyxRQUFBLGFBQWEsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV6Qyx1QkFBdUI7QUFDVixRQUFBLFlBQVksR0FBZ0I7SUFDdkMsUUFBUSxFQUFFLENBQUM7SUFDWCxVQUFVLEVBQUUsa0JBQVUsQ0FBQyxVQUFVO0lBQ2pDLFVBQVUsRUFBRSw4QkFBc0I7SUFDbEMsSUFBSSxFQUFFLGtCQUFVLENBQUMsUUFBUTtJQUN6QixRQUFRO0lBQ1IsUUFBUTtJQUNSLFdBQVcsRUFBRSx5QkFBaUIsQ0FBQyx5QkFBeUI7SUFDeEQsVUFBVSxFQUFFLEtBQUs7SUFDakIsY0FBYyxFQUFFLENBQUM7Q0FDbEIsQ0FBQyJ9
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
async function sleep(ms) {
|
|
14
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
15
|
+
}
|
|
16
|
+
async function test() {
|
|
17
|
+
const wallet = await local_wallet_1.default.fromMnemonic(constants_2.DYDX_TEST_MNEMONIC, src_1.BECH32_PREFIX);
|
|
18
|
+
console.log(wallet);
|
|
19
|
+
const network = constants_1.Network.staging();
|
|
20
|
+
const client = await composite_client_1.CompositeClient.connect(network);
|
|
21
|
+
console.log('**Client**');
|
|
22
|
+
console.log(client);
|
|
23
|
+
const subaccount = new subaccount_1.Subaccount(wallet, 0);
|
|
24
|
+
/*
|
|
25
|
+
Note this example places a stateful order.
|
|
26
|
+
Programmatic traders should generally not use stateful orders for following reasons:
|
|
27
|
+
- Stateful orders received out of order by validators will fail sequence number validation
|
|
28
|
+
and be dropped.
|
|
29
|
+
- Stateful orders have worse time priority since they are only matched after they are included
|
|
30
|
+
on the block.
|
|
31
|
+
- Stateful order rate limits are more restrictive than Short-Term orders, specifically max 2 per
|
|
32
|
+
block / 20 per 100 blocks.
|
|
33
|
+
- Stateful orders can only be canceled after they’ve been included in a block.
|
|
34
|
+
*/
|
|
35
|
+
const longTermOrderClientId = (0, utils_1.randomInt)(constants_2.MAX_CLIENT_ID);
|
|
36
|
+
try {
|
|
37
|
+
// place a long term order
|
|
38
|
+
const tx = await client.placeOrder(subaccount, 'ETH-USD', constants_1.OrderType.LIMIT, constants_1.OrderSide.SELL, 40000, 0.01, longTermOrderClientId, constants_1.OrderTimeInForce.GTT, 60, constants_1.OrderExecution.DEFAULT, false, false);
|
|
39
|
+
console.log('**Long Term Order Tx**');
|
|
40
|
+
console.log(tx.hash);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.log('**Long Term Order Failed**');
|
|
44
|
+
console.log(error.message);
|
|
45
|
+
}
|
|
46
|
+
await sleep(5000); // wait for placeOrder to complete
|
|
47
|
+
try {
|
|
48
|
+
// cancel the long term order
|
|
49
|
+
const tx = await client.cancelOrder(subaccount, longTermOrderClientId, src_1.OrderFlags.LONG_TERM, 'ETH-USD', 0, 120);
|
|
50
|
+
console.log('**Cancel Long Term Order Tx**');
|
|
51
|
+
console.log(tx);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.log('**Cancel Long Term Order Failed**');
|
|
55
|
+
console.log(error.message);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
test().then(() => {
|
|
59
|
+
}).catch((error) => {
|
|
60
|
+
console.log(error.message);
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ190ZXJtX29yZGVyX2NhbmNlbF9leGFtcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZXhhbXBsZXMvbG9uZ190ZXJtX29yZGVyX2NhbmNlbF9leGFtcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0NBQW1EO0FBQ25ELHNFQUFrRTtBQUNsRSx3REFFa0M7QUFDbEMsdUZBQThEO0FBQzlELDBEQUF1RDtBQUN2RCw0Q0FBNkM7QUFDN0MsMkNBQWdFO0FBRWhFLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQVcsQ0FBQyxZQUFZLENBQUMsOEJBQWtCLEVBQUUsbUJBQWEsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEIsTUFBTSxPQUFPLEdBQUcsbUJBQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTdDOzs7Ozs7Ozs7O01BVUU7SUFDRixNQUFNLHFCQUFxQixHQUFHLElBQUEsaUJBQVMsRUFBQyx5QkFBYSxDQUFDLENBQUM7SUFDdkQsSUFBSTtRQUNGLDBCQUEwQjtRQUMxQixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQ2hDLFVBQVUsRUFDVixTQUFTLEVBQ1QscUJBQVMsQ0FBQyxLQUFLLEVBQ2YscUJBQVMsQ0FBQyxJQUFJLEVBQ2QsS0FBSyxFQUNMLElBQUksRUFDSixxQkFBcUIsRUFDckIsNEJBQWdCLENBQUMsR0FBRyxFQUNwQixFQUFFLEVBQ0YsMEJBQWMsQ0FBQyxPQUFPLEVBQ3RCLEtBQUssRUFDTCxLQUFLLENBQ04sQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCO0lBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxrQ0FBa0M7SUFFdEQsSUFBSTtRQUNGLDZCQUE2QjtRQUM3QixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ2pDLFVBQVUsRUFDVixxQkFBcUIsRUFDckIsZ0JBQVUsQ0FBQyxTQUFTLEVBQ3BCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsR0FBRyxDQUNKLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqQjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCO0FBQ0gsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDakIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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 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
|
+
async function test() {
|
|
14
|
+
const wallet = await local_wallet_1.default.fromMnemonic(constants_2.DYDX_TEST_MNEMONIC, src_1.BECH32_PREFIX);
|
|
15
|
+
console.log(wallet);
|
|
16
|
+
const network = constants_1.Network.staging();
|
|
17
|
+
const client = await composite_client_1.CompositeClient.connect(network);
|
|
18
|
+
console.log('**Client**');
|
|
19
|
+
console.log(client);
|
|
20
|
+
const subaccount = new subaccount_1.Subaccount(wallet, 0);
|
|
21
|
+
const currentBlock = await client.validatorClient.get.latestBlockHeight();
|
|
22
|
+
const nextValidBlockHeight = currentBlock + 1;
|
|
23
|
+
// Note, you can change this to any number between `next_valid_block_height`
|
|
24
|
+
// to `next_valid_block_height + SHORT_BLOCK_WINDOW`
|
|
25
|
+
const goodTilBlock = nextValidBlockHeight + 10;
|
|
26
|
+
const shortTermOrderClientId = (0, utils_1.randomInt)(constants_2.MAX_CLIENT_ID);
|
|
27
|
+
try {
|
|
28
|
+
// place a short term order
|
|
29
|
+
const tx = await client.placeShortTermOrder(subaccount, 'ETH-USD', constants_1.OrderSide.SELL, 40000, 0.01, shortTermOrderClientId, goodTilBlock, src_1.Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED, false);
|
|
30
|
+
console.log('**Short Term Order Tx**');
|
|
31
|
+
console.log(tx.hash);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.log('**Short Term Order Failed**');
|
|
35
|
+
console.log(error.message);
|
|
36
|
+
}
|
|
37
|
+
await (0, utils_1.sleep)(5000); // wait for placeOrder to complete
|
|
38
|
+
try {
|
|
39
|
+
// cancel the short term order
|
|
40
|
+
const tx = await client.cancelOrder(subaccount, shortTermOrderClientId, src_1.OrderFlags.SHORT_TERM, 'ETH-USD', goodTilBlock + 10, 0);
|
|
41
|
+
console.log('**Cancel Short Term Order Tx**');
|
|
42
|
+
console.log(tx);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.log('**Cancel Short Term Order Failed**');
|
|
46
|
+
console.log(error.message);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
test().then(() => {
|
|
50
|
+
}).catch((error) => {
|
|
51
|
+
console.log(error.message);
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRfdGVybV9vcmRlcl9jYW5jZWxfZXhhbXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2V4YW1wbGVzL3Nob3J0X3Rlcm1fb3JkZXJfY2FuY2VsX2V4YW1wbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnQ0FBc0U7QUFDdEUsc0VBQWtFO0FBQ2xFLHdEQUVrQztBQUNsQyx1RkFBOEQ7QUFDOUQsMERBQXVEO0FBQ3ZELDRDQUFvRDtBQUNwRCwyQ0FBZ0U7QUFFaEUsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBVyxDQUFDLFlBQVksQ0FBQyw4QkFBa0IsRUFBRSxtQkFBYSxDQUFDLENBQUM7SUFDakYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixNQUFNLE9BQU8sR0FBRyxtQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0NBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFN0MsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzFFLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUM5Qyw0RUFBNEU7SUFDNUUsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUMvQyxNQUFNLHNCQUFzQixHQUFHLElBQUEsaUJBQVMsRUFBQyx5QkFBYSxDQUFDLENBQUM7SUFDeEQsSUFBSTtRQUNGLDJCQUEyQjtRQUMzQixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDekMsVUFBVSxFQUNWLFNBQVMsRUFDVCxxQkFBUyxDQUFDLElBQUksRUFDZCxLQUFLLEVBQ0wsSUFBSSxFQUNKLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osdUJBQWlCLENBQUMseUJBQXlCLEVBQzNDLEtBQUssQ0FDTixDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDNUI7SUFFRCxNQUFNLElBQUEsYUFBSyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsa0NBQWtDO0lBRXRELElBQUk7UUFDRiw4QkFBOEI7UUFDOUIsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUNqQyxVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGdCQUFVLENBQUMsVUFBVSxFQUNyQixTQUFTLEVBQ1QsWUFBWSxHQUFHLEVBQUUsRUFDakIsQ0FBQyxDQUNGLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqQjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCO0FBQ0gsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDakIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/build/examples/{short_term_composite_example.js → short_term_order_composite_example.js}
RENAMED
|
@@ -64,4 +64,4 @@ test().then(() => {
|
|
|
64
64
|
}).catch((error) => {
|
|
65
65
|
console.log(error.message);
|
|
66
66
|
});
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRfdGVybV9vcmRlcl9jb21wb3NpdGVfZXhhbXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2V4YW1wbGVzL3Nob3J0X3Rlcm1fb3JkZXJfY29tcG9zaXRlX2V4YW1wbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzRkFBK0Y7QUFFL0YsZ0NBQXVDO0FBQ3ZDLHNFQUFrRTtBQUNsRSx3REFFa0M7QUFDbEMsdUZBQThEO0FBQzlELDBEQUF1RDtBQUN2RCw0Q0FBNkM7QUFDN0MsMkNBQWlEO0FBQ2pELG9IQUFtRTtBQUVuRSxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTs7SUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBVyxDQUFDLFlBQVksQ0FBQyw4QkFBa0IsRUFBRSxtQkFBYSxDQUFDLENBQUM7SUFDakYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixNQUFNLE9BQU8sR0FBRyxtQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0NBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsS0FBSyxNQUFNLFdBQVcsSUFBSSwrQ0FBWSxFQUFFO1FBQ3RDLElBQUk7WUFDRixNQUFNLElBQUksR0FBRyxxQkFBUyxDQUFDLFdBQVcsQ0FBQyxJQUE4QixDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLEdBQUcsTUFBQSxXQUFXLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUM7WUFFeEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFFLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUM5Qyw0RUFBNEU7WUFDNUUsb0RBQW9EO1lBQ3BELE1BQU0sWUFBWSxHQUFHLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztZQUUvQyxNQUFNLFdBQVcsR0FBRywyQkFBMkIsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFekUsU0FBUztZQUNULE1BQU0sUUFBUSxHQUFHLElBQUEsaUJBQVMsRUFBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXhDLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUN6QyxVQUFVLEVBQ1YsU0FBUyxFQUNULElBQUksRUFDSixLQUFLLEVBQ0wsSUFBSSxFQUNKLFFBQVEsRUFDUixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssQ0FDTixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNqQztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFFRCxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFFLGtDQUFrQztLQUN2RDtBQUNILENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUFDLGNBQXNCO0lBQ3pELFFBQVEsY0FBYyxFQUFFO1FBQ3RCLEtBQUssMEJBQWMsQ0FBQyxPQUFPO1lBQ3pCLE9BQU8seUJBQWlCLENBQUMseUJBQXlCLENBQUM7UUFDckQsS0FBSywwQkFBYyxDQUFDLEdBQUc7WUFDckIsT0FBTyx5QkFBaUIsQ0FBQywwQkFBMEIsQ0FBQztRQUN0RCxLQUFLLDBCQUFjLENBQUMsR0FBRztZQUNyQixPQUFPLHlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1FBQzdDLEtBQUssMEJBQWMsQ0FBQyxTQUFTO1lBQzNCLE9BQU8seUJBQWlCLENBQUMsdUJBQXVCLENBQUM7UUFDbkQ7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0FDbkQ7QUFDSCxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNqQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
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.DYDX_TEST_MNEMONIC, src_1.BECH32_PREFIX);
|
|
20
|
+
console.log(wallet);
|
|
21
|
+
const network = constants_1.Network.staging();
|
|
22
|
+
const client = await composite_client_1.CompositeClient.connect(network);
|
|
23
|
+
console.log('**Client**');
|
|
24
|
+
console.log(client);
|
|
25
|
+
const subaccount = new subaccount_1.Subaccount(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().then(() => {
|
|
46
|
+
}).catch((error) => {
|
|
47
|
+
console.log(error.message);
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2V4YW1wbGVzL3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnQ0FBdUM7QUFDdkMsc0VBQWtFO0FBQ2xFLHdEQUVrQztBQUNsQyx1RkFBOEQ7QUFDOUQsMERBQXVEO0FBQ3ZELDRDQUE2QztBQUM3QywyQ0FBZ0U7QUFDaEUsOEZBQXdEO0FBRXhELEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJOztJQUNqQixNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFXLENBQUMsWUFBWSxDQUFDLDhCQUFrQixFQUFFLG1CQUFhLENBQUMsQ0FBQztJQUNqRixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sT0FBTyxHQUFHLG1CQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQ0FBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxLQUFLLE1BQU0sV0FBVyxJQUFJLG9DQUFZLEVBQUU7UUFDdEMsSUFBSTtZQUNGLE1BQU0sSUFBSSxHQUFHLHFCQUFTLENBQUMsV0FBVyxDQUFDLElBQThCLENBQUMsQ0FBQztZQUNuRSxNQUFNLElBQUksR0FBRyxxQkFBUyxDQUFDLFdBQVcsQ0FBQyxJQUE4QixDQUFDLENBQUM7WUFDbkUsTUFBTSxpQkFBaUIsR0FBRyxNQUFBLFdBQVcsQ0FBQyxXQUFXLG1DQUFJLEtBQUssQ0FBQztZQUMzRCxNQUFNLFdBQVcsR0FBRyw0QkFBZ0IsQ0FBQyxpQkFBa0QsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sS0FBSyxHQUFHLE1BQUEsV0FBVyxDQUFDLEtBQUssbUNBQUksSUFBSSxDQUFDO1lBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxXQUFXLEtBQUssNEJBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sUUFBUSxHQUFHLE1BQUEsV0FBVyxDQUFDLFFBQVEsbUNBQUksS0FBSyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FDaEMsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBQSxpQkFBUyxFQUFDLHlCQUFhLENBQUMsRUFDeEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQiwwQkFBYyxDQUFDLE9BQU8sRUFDdEIsUUFBUSxFQUNSLEtBQUssQ0FDTixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtRQUVELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsa0NBQWtDO0tBQ3ZEO0FBQ0gsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDakIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -68,13 +68,13 @@ export declare class CompositeClient {
|
|
|
68
68
|
*/
|
|
69
69
|
private calculateGoodTilBlock;
|
|
70
70
|
/**
|
|
71
|
-
* @description
|
|
71
|
+
* @description Validate the goodTilBlock value for a SHORT_TERM order
|
|
72
72
|
*
|
|
73
73
|
* @param goodTilBlock Number of blocks from the current block height the order will
|
|
74
74
|
* be valid for.
|
|
75
75
|
*
|
|
76
|
-
* @throws
|
|
77
|
-
*
|
|
76
|
+
* @throws UserError if the goodTilBlock value is not valid given latest block height and
|
|
77
|
+
* SHORT_BLOCK_WINDOW.
|
|
78
78
|
*/
|
|
79
79
|
private validateGoodTilBlock;
|
|
80
80
|
/**
|
|
@@ -190,7 +190,7 @@ export declare class CompositeClient {
|
|
|
190
190
|
* @param subaccount The subaccount to cancel the order from
|
|
191
191
|
* @param clientId The client id of the order to cancel
|
|
192
192
|
* @param orderFlags The order flags of the order to cancel
|
|
193
|
-
* @param
|
|
193
|
+
* @param marketId The market to cancel the order on
|
|
194
194
|
* @param goodTilBlock The goodTilBlock of the order to cancel
|
|
195
195
|
* @param goodTilBlockTime The goodTilBlockTime of the order to cancel
|
|
196
196
|
*
|
|
@@ -198,7 +198,7 @@ export declare class CompositeClient {
|
|
|
198
198
|
* at any point.
|
|
199
199
|
* @returns The transaction hash.
|
|
200
200
|
*/
|
|
201
|
-
cancelOrder(subaccount: Subaccount, clientId: number, orderFlags: OrderFlags,
|
|
201
|
+
cancelOrder(subaccount: Subaccount, clientId: number, orderFlags: OrderFlags, marketId: string, goodTilBlock: number, goodTilTimeInSeconds: number): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx>;
|
|
202
202
|
/**
|
|
203
203
|
* @description Transfer from a subaccount to another subaccount
|
|
204
204
|
*
|
|
@@ -7,6 +7,7 @@ exports.CompositeClient = void 0;
|
|
|
7
7
|
const order_1 = require("@dydxprotocol/v4-proto/src/codegen/dydxprotocol/clob/order");
|
|
8
8
|
const long_1 = __importDefault(require("long"));
|
|
9
9
|
const protobufjs_1 = __importDefault(require("protobufjs"));
|
|
10
|
+
const validation_1 = require("../lib/validation");
|
|
10
11
|
const types_1 = require("../types");
|
|
11
12
|
const constants_1 = require("./constants");
|
|
12
13
|
const chain_helpers_1 = require("./helpers/chain-helpers");
|
|
@@ -106,13 +107,13 @@ class CompositeClient {
|
|
|
106
107
|
return height + 3;
|
|
107
108
|
}
|
|
108
109
|
/**
|
|
109
|
-
* @description
|
|
110
|
+
* @description Validate the goodTilBlock value for a SHORT_TERM order
|
|
110
111
|
*
|
|
111
112
|
* @param goodTilBlock Number of blocks from the current block height the order will
|
|
112
113
|
* be valid for.
|
|
113
114
|
*
|
|
114
|
-
* @throws
|
|
115
|
-
*
|
|
115
|
+
* @throws UserError if the goodTilBlock value is not valid given latest block height and
|
|
116
|
+
* SHORT_BLOCK_WINDOW.
|
|
116
117
|
*/
|
|
117
118
|
async validateGoodTilBlock(goodTilBlock) {
|
|
118
119
|
const height = await this.validatorClient.get.latestBlockHeight();
|
|
@@ -165,7 +166,7 @@ class CompositeClient {
|
|
|
165
166
|
*/
|
|
166
167
|
async placeShortTermOrder(subaccount, marketId, side, price, size, clientId, goodTilBlock, timeInForce, reduceOnly) {
|
|
167
168
|
const msgs = new Promise((resolve) => {
|
|
168
|
-
const msg = this.placeShortTermOrderMessage(subaccount, marketId, side, price, size, clientId,
|
|
169
|
+
const msg = this.placeShortTermOrderMessage(subaccount, marketId, side, price, size, clientId, goodTilBlock, timeInForce, reduceOnly);
|
|
169
170
|
msg.then((it) => resolve([it])).catch((err) => {
|
|
170
171
|
console.log(err);
|
|
171
172
|
});
|
|
@@ -309,7 +310,7 @@ class CompositeClient {
|
|
|
309
310
|
* @param subaccount The subaccount to cancel the order from
|
|
310
311
|
* @param clientId The client id of the order to cancel
|
|
311
312
|
* @param orderFlags The order flags of the order to cancel
|
|
312
|
-
* @param
|
|
313
|
+
* @param marketId The market to cancel the order on
|
|
313
314
|
* @param goodTilBlock The goodTilBlock of the order to cancel
|
|
314
315
|
* @param goodTilBlockTime The goodTilBlockTime of the order to cancel
|
|
315
316
|
*
|
|
@@ -317,7 +318,32 @@ class CompositeClient {
|
|
|
317
318
|
* at any point.
|
|
318
319
|
* @returns The transaction hash.
|
|
319
320
|
*/
|
|
320
|
-
async cancelOrder(subaccount, clientId, orderFlags,
|
|
321
|
+
async cancelOrder(subaccount, clientId, orderFlags, marketId, goodTilBlock, goodTilTimeInSeconds) {
|
|
322
|
+
const marketsResponse = await this.indexerClient.markets.getPerpetualMarkets(marketId);
|
|
323
|
+
const market = marketsResponse.markets[marketId];
|
|
324
|
+
const clobPairId = market.clobPairId;
|
|
325
|
+
if (!(0, validation_1.verifyOrderFlags)(orderFlags)) {
|
|
326
|
+
throw new Error(`Invalid order flags: ${orderFlags}`);
|
|
327
|
+
}
|
|
328
|
+
let goodTilBlockTime;
|
|
329
|
+
if ((0, validation_1.isStatefulOrder)(orderFlags)) {
|
|
330
|
+
if (goodTilTimeInSeconds === 0) {
|
|
331
|
+
throw new Error('goodTilTimeInSeconds must be set for LONG_TERM or CONDITIONAL order');
|
|
332
|
+
}
|
|
333
|
+
if (goodTilBlock !== 0) {
|
|
334
|
+
throw new Error('goodTilBlock should be zero since LONG_TERM or CONDITIONAL orders ' +
|
|
335
|
+
'use goodTilTimeInSeconds instead of goodTilBlock.');
|
|
336
|
+
}
|
|
337
|
+
goodTilBlockTime = this.calculateGoodTilBlockTime(goodTilTimeInSeconds);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
if (goodTilBlock === 0) {
|
|
341
|
+
throw new Error('goodTilBlock must be non-zero for SHORT_TERM orders');
|
|
342
|
+
}
|
|
343
|
+
if (goodTilTimeInSeconds !== 0) {
|
|
344
|
+
throw new Error('goodTilTimeInSeconds should be zero since SHORT_TERM orders use goodTilBlock instead of goodTilTimeInSeconds.');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
321
347
|
return this.validatorClient.post.cancelOrder(subaccount, clientId, orderFlags, clobPairId, goodTilBlock, goodTilBlockTime);
|
|
322
348
|
}
|
|
323
349
|
/**
|
|
@@ -461,4 +487,4 @@ class CompositeClient {
|
|
|
461
487
|
}
|
|
462
488
|
}
|
|
463
489
|
exports.CompositeClient = CompositeClient;
|
|
464
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnRzL2NvbXBvc2l0ZS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0Esc0ZBQW9IO0FBQ3BILGdEQUF3QjtBQUN4Qiw0REFBa0M7QUFFbEMsb0NBQXNDO0FBQ3RDLDJDQUlxQjtBQUNyQiwyREFTaUM7QUFDakMscURBQWlEO0FBQ2pELHlDQUF5QztBQUd6Qyx5REFBcUQ7QUFFckQsb0VBQW9FO0FBQ3BFLHFFQUFxRTtBQUNyRSx3RUFBd0U7QUFDeEUsa0VBQWtFO0FBQ2xFLG9CQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFJLENBQUM7QUFDMUIsb0JBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUVyQixNQUFhLGVBQWU7SUFXMUIsWUFDRSxPQUFnQixFQUNoQixVQUFtQjtRQUVuQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksOEJBQWEsQ0FDckMsT0FBTyxDQUFDLGFBQWEsRUFDckIsVUFBVSxDQUNYLENBQUM7SUFDSixDQUFDO0lBZkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZ0I7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQWFPLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLGtDQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmOztXQUVHO1FBQ0gsT0FBTyxJQUFJLENBQUMsY0FBZSxDQUFDO0lBQzlC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
|
|
490
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnRzL2NvbXBvc2l0ZS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0Esc0ZBQW9IO0FBQ3BILGdEQUF3QjtBQUN4Qiw0REFBa0M7QUFFbEMsa0RBQXNFO0FBQ3RFLG9DQUFzQztBQUN0QywyQ0FJcUI7QUFDckIsMkRBU2lDO0FBQ2pDLHFEQUFpRDtBQUNqRCx5Q0FBeUM7QUFHekMseURBQXFEO0FBRXJELG9FQUFvRTtBQUNwRSxxRUFBcUU7QUFDckUsd0VBQXdFO0FBQ3hFLGtFQUFrRTtBQUNsRSxvQkFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBSSxDQUFDO0FBQzFCLG9CQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7QUFFckIsTUFBYSxlQUFlO0lBVzFCLFlBQ0UsT0FBZ0IsRUFDaEIsVUFBbUI7UUFFbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLDhCQUFhLENBQ3JDLE9BQU8sQ0FBQyxhQUFhLEVBQ3JCLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQWZELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQWdCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFhTyxLQUFLLENBQUMsVUFBVTtRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxrQ0FBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZjs7V0FFRztRQUNILE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCOztXQUVHO1FBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7O1NBT0s7SUFDTCxLQUFLLENBQUMsSUFBSSxDQUNSLE1BQW1CLEVBQ25CLFNBQXdDLEVBQ3hDLE9BQWdCLEVBQ2hCLFdBQXFCLHFCQUFTLEVBQzlCLElBQWE7UUFFYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7Ozs7O1NBT0s7SUFDTCxLQUFLLENBQUMsSUFBSSxDQUNSLE1BQW1CLEVBQ25CLFNBQXdDLEVBQ3hDLE9BQWdCLEVBQ2hCLFdBQXFCLHFCQUFTLEVBQzlCLElBQWE7UUFFYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7Ozs7OztTQVFLO0lBQ0wsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixpQkFBNkI7UUFFN0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O1NBWUs7SUFDTCxLQUFLLENBQUMsUUFBUSxDQUNaLE1BQW1CLEVBQ25CLFNBQXdDLEVBQ3hDLFdBQXFCLHFCQUFTLEVBQzlCLElBQWE7UUFFYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7Ozs7OztTQU1LO0lBQ0csS0FBSyxDQUFDLHFCQUFxQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbEUsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxZQUFvQjtRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbEUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixHQUFHLDhCQUFrQixDQUFDO1FBQzdELElBQUksWUFBWSxHQUFHLFVBQVUsSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFO1lBQzFELE1BQU0sSUFBSSxrQkFBUyxDQUFDOzZDQUNtQixVQUFVLDhCQUE4QixVQUFVO21DQUM1RCxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7U0FTSztJQUNHLHlCQUF5QixDQUFDLG9CQUE0QjtRQUM1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixHQUFHLHFCQUFxQixDQUFDO1FBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLElBQWUsRUFDZixLQUFhLEVBQ2IsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLFlBQW9CLEVBQ3BCLFdBQThCLEVBQzlCLFVBQW1CO1FBRW5CLE1BQU0sSUFBSSxHQUE0QixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDekMsVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLEVBQ0osS0FBSyxFQUNMLElBQUksRUFDSixRQUFRLEVBQ1IsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLENBQ1gsQ0FBQztZQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLFVBQVUsQ0FBQyxNQUFNLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixJQUFJLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBd0JLO0lBQ0wsS0FBSyxDQUFDLFVBQVUsQ0FDZCxVQUFzQixFQUN0QixRQUFnQixFQUNoQixJQUFlLEVBQ2YsSUFBZSxFQUNmLEtBQWEsRUFDYixJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsV0FBOEIsRUFDOUIsb0JBQTZCLEVBQzdCLFNBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFVBQW9CLEVBQ3BCLFlBQXFCO1FBRXJCLE1BQU0sSUFBSSxHQUE0QixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDaEMsVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUs7WUFDTCw0REFBNEQ7WUFDNUQsSUFBSSxFQUNKLFFBQVEsRUFDUixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksQ0FDYixDQUFDO1lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QsVUFBVSxDQUFDLE1BQU0sRUFDakIsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUNWLElBQUksQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0F3Qks7SUFDRyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLElBQWUsRUFDZixJQUFlLEVBQ2YsS0FBYTtJQUNiLDREQUE0RDtJQUM1RCxJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsV0FBOEIsRUFDOUIsb0JBQTZCLEVBQzdCLFNBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFVBQW9CLEVBQ3BCLFlBQXFCO1FBRXJCLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkYsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pELE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDO1FBQ25FLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBQSw2QkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUEsaUNBQWlCLEVBQ2hDLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFBLGlDQUFpQixFQUNoQyxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixlQUFlLENBQ2hCLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFBLG1DQUFtQixFQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRCxNQUFNLGdCQUFnQixHQUFHLElBQUEsb0NBQW9CLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLEtBQUssa0JBQVUsQ0FBQyxVQUFVLENBQUM7WUFDekQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLFVBQVUsS0FBSyxrQkFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLEtBQUssa0JBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDaEYsSUFBSSxvQkFBb0IsSUFBSSxJQUFJLEVBQUU7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQzthQUN4RjtpQkFBTTtnQkFDTCxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQy9FO1NBQ0Y7UUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFBLHVDQUF1QixFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sZUFBZSxHQUFHLElBQUEsc0NBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSwrQkFBK0IsR0FBRyxJQUFBLHdEQUF3QyxFQUM5RSxJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsWUFBWSxDQUFDLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQzVELFVBQVUsQ0FBQyxPQUFPLEVBQ2xCLFVBQVUsQ0FBQyxnQkFBZ0IsRUFDM0IsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsVUFBVSxhQUFWLFVBQVUsY0FBVixVQUFVLEdBQUksS0FBSyxFQUNuQixjQUFjLEVBQ2QsZUFBZSxFQUNmLCtCQUErQixDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQW9CSztJQUNHLEtBQUssQ0FBQywwQkFBMEIsQ0FDdEMsVUFBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsSUFBZSxFQUNmLEtBQWEsRUFDYixJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsV0FBOEIsRUFDOUIsVUFBbUI7UUFFbkIsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFOUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDakQsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUM7UUFDbkUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFBLDZCQUFhLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBQSxpQ0FBaUIsRUFDaEMsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLElBQUEsaUNBQWlCLEVBQ2hDLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLGtCQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUM1RCxVQUFVLENBQUMsT0FBTyxFQUNsQixVQUFVLENBQUMsZ0JBQWdCLEVBQzNCLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixDQUFDLEVBQUUsc0NBQXNDO1FBQ3pDLFNBQVMsRUFDVCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFdBQVcsRUFDWCxVQUFVLEVBQ1YsQ0FBQyxFQUFFLDhDQUE4QztRQUNqRCwyQkFBbUIsQ0FBQywwQkFBMEIsRUFBRSwyQ0FBMkM7UUFDM0YsY0FBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztTQWFLO0lBQ0wsS0FBSyxDQUFDLFdBQVcsQ0FDZixVQUFzQixFQUN0QixRQUFnQixFQUNoQixVQUFzQixFQUN0QixRQUFnQixFQUNoQixZQUFvQixFQUNwQixvQkFBNEI7UUFHNUIsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFckMsSUFBSSxDQUFDLElBQUEsNkJBQWdCLEVBQUMsVUFBVSxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxJQUFBLDRCQUFlLEVBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQzthQUN4RjtZQUNELElBQUksWUFBWSxLQUFLLENBQUMsRUFBRTtnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYixvRUFBb0U7b0JBQ3BFLG1EQUFtRCxDQUNwRCxDQUFDO2FBQ0g7WUFDRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6RTthQUFNO1lBQ0wsSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7YUFDeEU7WUFDRCxJQUFJLG9CQUFvQixLQUFLLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrR0FBK0csQ0FBQyxDQUFDO2FBQ2xJO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FDMUMsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixnQkFBZ0IsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7U0FXSztJQUNMLEtBQUssQ0FBQyxvQkFBb0IsQ0FDeEIsVUFBc0IsRUFDdEIsZ0JBQXdCLEVBQ3hCLHlCQUFpQyxFQUNqQyxNQUFjO1FBRWQsTUFBTSxJQUFJLEdBQTRCLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUMxQyxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixNQUFNLENBQ1AsQ0FBQztZQUNGLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QsVUFBVSxDQUFDLE1BQU0sRUFDakIsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUNWLElBQUksQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7U0FZSztJQUNMLDJCQUEyQixDQUN6QixVQUFzQixFQUN0QixnQkFBd0IsRUFDeEIseUJBQWlDLEVBQ2pDLE1BQWM7UUFFZCxNQUFNLFFBQVEsR0FBUyxjQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUMxRCxVQUFVLENBQUMsT0FBTyxFQUNsQixVQUFVLENBQUMsZ0JBQWdCLEVBQzNCLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsQ0FBQyxFQUNELFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7U0FTSztJQUNMLEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsVUFBc0IsRUFDdEIsTUFBYztRQUVkLE1BQU0sSUFBSSxHQUE0QixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDekMsVUFBVSxFQUNWLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQ3JELEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7Ozs7Ozs7O1NBU0s7SUFDTCwwQkFBMEIsQ0FDeEIsVUFBc0IsRUFDdEIsTUFBYztRQUVkLE1BQU0sUUFBUSxHQUFTLGNBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQ3JFLFVBQVUsQ0FBQyxPQUFPLEVBQ2xCLFVBQVUsQ0FBQyxnQkFBZ0IsRUFDM0IsQ0FBQyxFQUNELFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7O1NBVUs7SUFDTCxLQUFLLENBQUMsc0JBQXNCLENBQzFCLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZCxTQUFrQjtRQUVsQixNQUFNLElBQUksR0FBNEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQzVDLFVBQVUsRUFDVixNQUFNLEVBQ04sU0FBUyxDQUNWLENBQUM7WUFDRixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLFVBQVUsQ0FBQyxNQUFNLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7U0FXSztJQUNMLDZCQUE2QixDQUMzQixVQUFzQixFQUN0QixNQUFjLEVBQ2QsU0FBa0I7UUFFbEIsTUFBTSxRQUFRLEdBQVMsY0FBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FDeEUsVUFBVSxDQUFDLE9BQU8sRUFDbEIsVUFBVSxDQUFDLGdCQUFnQixFQUMzQixDQUFDLEVBQ0QsUUFBUSxFQUNSLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7OztTQVdLO0lBQ0wsZ0JBQWdCLENBQ2QsVUFBc0IsRUFDdEIsTUFBYyxFQUNkLFNBQWlCO1FBRWpCLE1BQU0sUUFBUSxHQUFTLGNBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQzNELFVBQVUsQ0FBQyxPQUFPLEVBQ2xCLFNBQVMsRUFDVCxzQkFBVSxFQUNWLFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLElBQWUsRUFDZixJQUFlLEVBQ2YsS0FBYTtJQUNiLDREQUE0RDtJQUM1RCxJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsV0FBNkIsRUFDN0Isb0JBQTRCLEVBQzVCLFNBQXlCLEVBQ3pCLFFBQWlCLEVBQ2pCLFVBQW1CO1FBRW5CLE1BQU0sSUFBSSxHQUE0QixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDaEMsVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUs7WUFDTCw0REFBNEQ7WUFDNUQsSUFBSSxFQUNKLFFBQVEsRUFDUixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxDQUNYLENBQUM7WUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDL0IsTUFBTSxFQUNOLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixJQUFJLENBQUMsQ0FBQztRQUVSLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLFVBQXNCLEVBQ3RCLFVBQWtCLEVBQ2xCLFlBQW9CLEVBQ3BCLGdCQUF3QjtRQUV4QixNQUFNLElBQUksR0FBNEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQ2xFLFVBQVUsQ0FBQyxPQUFPLEVBQ2xCLFVBQVUsQ0FBQyxnQkFBZ0IsRUFDM0IsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLGdCQUFnQixDQUNqQixDQUFDO1lBQ0YsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQTd3QkQsMENBNndCQyJ9
|
package/build/src/lib/utils.d.ts
CHANGED
|
@@ -11,3 +11,9 @@ export declare function generateRandomClientId(): number;
|
|
|
11
11
|
* quick hashing function on the string.
|
|
12
12
|
*/
|
|
13
13
|
export declare function clientIdFromString(input: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* Pauses the execution of the program for a specified time.
|
|
16
|
+
* @param ms - The number of milliseconds to pause the program.
|
|
17
|
+
* @returns A promise that resolves after the specified number of milliseconds.
|
|
18
|
+
*/
|
|
19
|
+
export declare function sleep(ms: number): Promise<void>;
|
package/build/src/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clientIdFromString = exports.generateRandomClientId = exports.randomInt = void 0;
|
|
3
|
+
exports.sleep = exports.clientIdFromString = exports.generateRandomClientId = exports.randomInt = void 0;
|
|
4
4
|
const constants_1 = require("../clients/constants");
|
|
5
5
|
/**
|
|
6
6
|
* Returns a random integer value between 0 and (n-1).
|
|
@@ -33,4 +33,13 @@ function clientIdFromString(input) {
|
|
|
33
33
|
return hash + (2 ** 31);
|
|
34
34
|
}
|
|
35
35
|
exports.clientIdFromString = clientIdFromString;
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Pauses the execution of the program for a specified time.
|
|
38
|
+
* @param ms - The number of milliseconds to pause the program.
|
|
39
|
+
* @returns A promise that resolves after the specified number of milliseconds.
|
|
40
|
+
*/
|
|
41
|
+
async function sleep(ms) {
|
|
42
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
43
|
+
}
|
|
44
|
+
exports.sleep = sleep;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUFtRDtBQUVuRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsQ0FBUztJQUVULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUpELDhCQUlDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0I7SUFDcEMsT0FBTyxTQUFTLENBQUMsdUJBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsd0RBRUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsS0FBYTtJQUViLElBQUksSUFBSSxHQUFXLENBQUMsQ0FBQztJQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFDcEYsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztLQUM3QztJQUVELDBEQUEwRDtJQUMxRCxzREFBc0Q7SUFDdEQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQWJELGdEQWFDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUZELHNCQUVDIn0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transfer, ICancelOrder, IPlaceOrder } from '../clients/types';
|
|
1
|
+
import { Transfer, OrderFlags, ICancelOrder, IPlaceOrder } from '../clients/types';
|
|
2
2
|
import { UserError } from './errors';
|
|
3
3
|
/**
|
|
4
4
|
* @describe validatePlaceOrderMessage validates that an order to place has fields that would be
|
|
@@ -15,4 +15,6 @@ export declare function validateCancelOrderMessage(subaccountNumber: number, ord
|
|
|
15
15
|
* valid on-chain.
|
|
16
16
|
*/
|
|
17
17
|
export declare function validateTransferMessage(transfer: Transfer): UserError | undefined;
|
|
18
|
+
export declare function verifyOrderFlags(orderFlags: OrderFlags): boolean;
|
|
19
|
+
export declare function isStatefulOrder(orderFlags: OrderFlags): boolean;
|
|
18
20
|
export declare function isValidAddress(address: string): boolean;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isValidAddress = exports.validateTransferMessage = exports.validateCancelOrderMessage = exports.validatePlaceOrderMessage = void 0;
|
|
6
|
+
exports.isValidAddress = exports.isStatefulOrder = exports.verifyOrderFlags = exports.validateTransferMessage = exports.validateCancelOrderMessage = exports.validatePlaceOrderMessage = void 0;
|
|
7
7
|
const bech32_1 = require("bech32");
|
|
8
8
|
const long_1 = __importDefault(require("long"));
|
|
9
9
|
const constants_1 = require("../clients/constants");
|
|
@@ -103,9 +103,15 @@ function verifySubaccountNumber(subaccountNumber) {
|
|
|
103
103
|
function verifyNumberIsUint32(num) {
|
|
104
104
|
return num >= 0 && num <= constants_1.MAX_UINT_32;
|
|
105
105
|
}
|
|
106
|
+
function verifyOrderFlags(orderFlags) {
|
|
107
|
+
return orderFlags === types_1.OrderFlags.SHORT_TERM ||
|
|
108
|
+
orderFlags === types_1.OrderFlags.LONG_TERM || orderFlags === types_1.OrderFlags.CONDITIONAL;
|
|
109
|
+
}
|
|
110
|
+
exports.verifyOrderFlags = verifyOrderFlags;
|
|
106
111
|
function isStatefulOrder(orderFlags) {
|
|
107
112
|
return orderFlags === types_1.OrderFlags.LONG_TERM || orderFlags === types_1.OrderFlags.CONDITIONAL;
|
|
108
113
|
}
|
|
114
|
+
exports.isStatefulOrder = isStatefulOrder;
|
|
109
115
|
function verifyIsBech32(address) {
|
|
110
116
|
try {
|
|
111
117
|
(0, bech32_1.decode)(address);
|
|
@@ -120,4 +126,4 @@ function isValidAddress(address) {
|
|
|
120
126
|
return address.startsWith('dydx1') && (verifyIsBech32(address) === undefined);
|
|
121
127
|
}
|
|
122
128
|
exports.isValidAddress = isValidAddress;
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBZ0M7QUFDaEMsZ0RBQXdCO0FBRXhCLG9EQUEwRTtBQUMxRSw0Q0FLMEI7QUFDMUIscUNBQXFDO0FBRXJDOzs7R0FHRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxnQkFBd0IsRUFDeEIsS0FBa0I7SUFFbEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN6QyxPQUFPLElBQUksa0JBQVMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxRQUFRLHdCQUF3QixDQUFDLENBQUM7S0FDM0U7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QyxPQUFPLElBQUksa0JBQVMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxRQUFRLGlCQUFpQixDQUFDLENBQUM7S0FDcEU7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QyxPQUFPLElBQUksa0JBQVMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxRQUFRLGlCQUFpQixDQUFDLENBQUM7S0FDcEU7SUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUM3QyxPQUFPLElBQUksa0JBQVMsQ0FDbEIscUJBQXFCLGdCQUFnQix1QkFBdUIsaUNBQXFCLEVBQUUsQ0FDcEYsQ0FBQztLQUNIO0lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDakYsT0FBTyxJQUFJLGtCQUFTLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxZQUFZ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
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import LocalWallet from '../src/clients/modules/local-wallet';
|
|
7
7
|
import { Subaccount } from '../src/clients/subaccount';
|
|
8
8
|
import { randomInt } from '../src/lib/utils';
|
|
9
|
-
import { DYDX_TEST_MNEMONIC } from './constants';
|
|
9
|
+
import { DYDX_TEST_MNEMONIC, MAX_CLIENT_ID } from './constants';
|
|
10
10
|
import ordersParams from './human_readable_orders.json';
|
|
11
11
|
|
|
12
12
|
async function sleep(ms: number): Promise<void> {
|
|
@@ -37,7 +37,7 @@ async function test(): Promise<void> {
|
|
|
37
37
|
side,
|
|
38
38
|
price,
|
|
39
39
|
0.01,
|
|
40
|
-
randomInt(
|
|
40
|
+
randomInt(MAX_CLIENT_ID),
|
|
41
41
|
timeInForce,
|
|
42
42
|
timeInForceSeconds,
|
|
43
43
|
OrderExecution.DEFAULT,
|
package/examples/constants.ts
CHANGED
|
@@ -13,6 +13,8 @@ export const PERPETUAL_PAIR_BTC_USD: number = 0;
|
|
|
13
13
|
const quantums: Long = new Long(1_000_000_000);
|
|
14
14
|
const subticks: Long = new Long(1_000_000_000);
|
|
15
15
|
|
|
16
|
+
export const MAX_CLIENT_ID = 2 ** 32 - 1;
|
|
17
|
+
|
|
16
18
|
// PlaceOrder variables
|
|
17
19
|
export const defaultOrder: IPlaceOrder = {
|
|
18
20
|
clientId: 0,
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { BECH32_PREFIX, OrderFlags } from '../src';
|
|
2
|
+
import { CompositeClient } from '../src/clients/composite-client';
|
|
3
|
+
import {
|
|
4
|
+
Network, OrderExecution, OrderSide, OrderTimeInForce, OrderType,
|
|
5
|
+
} from '../src/clients/constants';
|
|
6
|
+
import LocalWallet from '../src/clients/modules/local-wallet';
|
|
7
|
+
import { Subaccount } from '../src/clients/subaccount';
|
|
8
|
+
import { randomInt } from '../src/lib/utils';
|
|
9
|
+
import { DYDX_TEST_MNEMONIC, MAX_CLIENT_ID } from './constants';
|
|
10
|
+
|
|
11
|
+
async function sleep(ms: number): Promise<void> {
|
|
12
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function test(): Promise<void> {
|
|
16
|
+
const wallet = await LocalWallet.fromMnemonic(DYDX_TEST_MNEMONIC, BECH32_PREFIX);
|
|
17
|
+
console.log(wallet);
|
|
18
|
+
const network = Network.staging();
|
|
19
|
+
const client = await CompositeClient.connect(network);
|
|
20
|
+
console.log('**Client**');
|
|
21
|
+
console.log(client);
|
|
22
|
+
const subaccount = new Subaccount(wallet, 0);
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
Note this example places a stateful order.
|
|
26
|
+
Programmatic traders should generally not use stateful orders for following reasons:
|
|
27
|
+
- Stateful orders received out of order by validators will fail sequence number validation
|
|
28
|
+
and be dropped.
|
|
29
|
+
- Stateful orders have worse time priority since they are only matched after they are included
|
|
30
|
+
on the block.
|
|
31
|
+
- Stateful order rate limits are more restrictive than Short-Term orders, specifically max 2 per
|
|
32
|
+
block / 20 per 100 blocks.
|
|
33
|
+
- Stateful orders can only be canceled after they’ve been included in a block.
|
|
34
|
+
*/
|
|
35
|
+
const longTermOrderClientId = randomInt(MAX_CLIENT_ID);
|
|
36
|
+
try {
|
|
37
|
+
// place a long term order
|
|
38
|
+
const tx = await client.placeOrder(
|
|
39
|
+
subaccount,
|
|
40
|
+
'ETH-USD',
|
|
41
|
+
OrderType.LIMIT,
|
|
42
|
+
OrderSide.SELL,
|
|
43
|
+
40000,
|
|
44
|
+
0.01,
|
|
45
|
+
longTermOrderClientId,
|
|
46
|
+
OrderTimeInForce.GTT,
|
|
47
|
+
60,
|
|
48
|
+
OrderExecution.DEFAULT,
|
|
49
|
+
false,
|
|
50
|
+
false,
|
|
51
|
+
);
|
|
52
|
+
console.log('**Long Term Order Tx**');
|
|
53
|
+
console.log(tx.hash);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.log('**Long Term Order Failed**');
|
|
56
|
+
console.log(error.message);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
await sleep(5000); // wait for placeOrder to complete
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
// cancel the long term order
|
|
63
|
+
const tx = await client.cancelOrder(
|
|
64
|
+
subaccount,
|
|
65
|
+
longTermOrderClientId,
|
|
66
|
+
OrderFlags.LONG_TERM,
|
|
67
|
+
'ETH-USD',
|
|
68
|
+
0,
|
|
69
|
+
120,
|
|
70
|
+
);
|
|
71
|
+
console.log('**Cancel Long Term Order Tx**');
|
|
72
|
+
console.log(tx);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.log('**Cancel Long Term Order Failed**');
|
|
75
|
+
console.log(error.message);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
test().then(() => {
|
|
80
|
+
}).catch((error) => {
|
|
81
|
+
console.log(error.message);
|
|
82
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { BECH32_PREFIX, OrderFlags, Order_TimeInForce } from '../src';
|
|
2
|
+
import { CompositeClient } from '../src/clients/composite-client';
|
|
3
|
+
import {
|
|
4
|
+
Network, OrderSide,
|
|
5
|
+
} from '../src/clients/constants';
|
|
6
|
+
import LocalWallet from '../src/clients/modules/local-wallet';
|
|
7
|
+
import { Subaccount } from '../src/clients/subaccount';
|
|
8
|
+
import { randomInt, sleep } from '../src/lib/utils';
|
|
9
|
+
import { DYDX_TEST_MNEMONIC, MAX_CLIENT_ID } from './constants';
|
|
10
|
+
|
|
11
|
+
async function test(): Promise<void> {
|
|
12
|
+
const wallet = await LocalWallet.fromMnemonic(DYDX_TEST_MNEMONIC, BECH32_PREFIX);
|
|
13
|
+
console.log(wallet);
|
|
14
|
+
const network = Network.staging();
|
|
15
|
+
const client = await CompositeClient.connect(network);
|
|
16
|
+
console.log('**Client**');
|
|
17
|
+
console.log(client);
|
|
18
|
+
const subaccount = new Subaccount(wallet, 0);
|
|
19
|
+
|
|
20
|
+
const currentBlock = await client.validatorClient.get.latestBlockHeight();
|
|
21
|
+
const nextValidBlockHeight = currentBlock + 1;
|
|
22
|
+
// Note, you can change this to any number between `next_valid_block_height`
|
|
23
|
+
// to `next_valid_block_height + SHORT_BLOCK_WINDOW`
|
|
24
|
+
const goodTilBlock = nextValidBlockHeight + 10;
|
|
25
|
+
const shortTermOrderClientId = randomInt(MAX_CLIENT_ID);
|
|
26
|
+
try {
|
|
27
|
+
// place a short term order
|
|
28
|
+
const tx = await client.placeShortTermOrder(
|
|
29
|
+
subaccount,
|
|
30
|
+
'ETH-USD',
|
|
31
|
+
OrderSide.SELL,
|
|
32
|
+
40000,
|
|
33
|
+
0.01,
|
|
34
|
+
shortTermOrderClientId,
|
|
35
|
+
goodTilBlock,
|
|
36
|
+
Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED,
|
|
37
|
+
false,
|
|
38
|
+
);
|
|
39
|
+
console.log('**Short Term Order Tx**');
|
|
40
|
+
console.log(tx.hash);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.log('**Short Term Order Failed**');
|
|
43
|
+
console.log(error.message);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await sleep(5000); // wait for placeOrder to complete
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
// cancel the short term order
|
|
50
|
+
const tx = await client.cancelOrder(
|
|
51
|
+
subaccount,
|
|
52
|
+
shortTermOrderClientId,
|
|
53
|
+
OrderFlags.SHORT_TERM,
|
|
54
|
+
'ETH-USD',
|
|
55
|
+
goodTilBlock + 10,
|
|
56
|
+
0,
|
|
57
|
+
);
|
|
58
|
+
console.log('**Cancel Short Term Order Tx**');
|
|
59
|
+
console.log(tx);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.log('**Cancel Short Term Order Failed**');
|
|
62
|
+
console.log(error.message);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
test().then(() => {
|
|
67
|
+
}).catch((error) => {
|
|
68
|
+
console.log(error.message);
|
|
69
|
+
});
|
package/examples/test.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { BECH32_PREFIX } from '../src';
|
|
2
|
+
import { CompositeClient } from '../src/clients/composite-client';
|
|
3
|
+
import {
|
|
4
|
+
Network, OrderExecution, OrderSide, OrderTimeInForce, OrderType,
|
|
5
|
+
} from '../src/clients/constants';
|
|
6
|
+
import LocalWallet from '../src/clients/modules/local-wallet';
|
|
7
|
+
import { Subaccount } from '../src/clients/subaccount';
|
|
8
|
+
import { randomInt } from '../src/lib/utils';
|
|
9
|
+
import { DYDX_TEST_MNEMONIC, MAX_CLIENT_ID } from './constants';
|
|
10
|
+
import ordersParams from './human_readable_orders.json';
|
|
11
|
+
|
|
12
|
+
async function sleep(ms: number): Promise<void> {
|
|
13
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function test(): Promise<void> {
|
|
17
|
+
const wallet = await LocalWallet.fromMnemonic(DYDX_TEST_MNEMONIC, BECH32_PREFIX);
|
|
18
|
+
console.log(wallet);
|
|
19
|
+
const network = Network.staging();
|
|
20
|
+
const client = await CompositeClient.connect(network);
|
|
21
|
+
console.log('**Client**');
|
|
22
|
+
console.log(client);
|
|
23
|
+
const subaccount = new Subaccount(wallet, 0);
|
|
24
|
+
for (const orderParams of ordersParams) {
|
|
25
|
+
try {
|
|
26
|
+
const type = OrderType[orderParams.type as keyof typeof OrderType];
|
|
27
|
+
const side = OrderSide[orderParams.side as keyof typeof OrderSide];
|
|
28
|
+
const timeInForceString = orderParams.timeInForce ?? 'GTT';
|
|
29
|
+
const timeInForce = OrderTimeInForce[timeInForceString as keyof typeof OrderTimeInForce];
|
|
30
|
+
const price = orderParams.price ?? 1350;
|
|
31
|
+
const timeInForceSeconds = (timeInForce === OrderTimeInForce.GTT) ? 60 : 0;
|
|
32
|
+
const postOnly = orderParams.postOnly ?? false;
|
|
33
|
+
const tx = await client.placeOrder(
|
|
34
|
+
subaccount,
|
|
35
|
+
'ETH-USD',
|
|
36
|
+
type,
|
|
37
|
+
side,
|
|
38
|
+
price,
|
|
39
|
+
0.01,
|
|
40
|
+
randomInt(MAX_CLIENT_ID),
|
|
41
|
+
timeInForce,
|
|
42
|
+
timeInForceSeconds,
|
|
43
|
+
OrderExecution.DEFAULT,
|
|
44
|
+
postOnly,
|
|
45
|
+
false,
|
|
46
|
+
);
|
|
47
|
+
console.log('**Order Tx**');
|
|
48
|
+
console.log(tx);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.log(error.message);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
await sleep(5000); // wait for placeOrder to complete
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
test().then(() => {
|
|
58
|
+
}).catch((error) => {
|
|
59
|
+
console.log(error.message);
|
|
60
|
+
});
|
package/package.json
CHANGED
|
@@ -5,6 +5,7 @@ import { Order_ConditionType, Order_TimeInForce } from '@dydxprotocol/v4-proto/s
|
|
|
5
5
|
import Long from 'long';
|
|
6
6
|
import protobuf from 'protobufjs';
|
|
7
7
|
|
|
8
|
+
import { isStatefulOrder, verifyOrderFlags } from '../lib/validation';
|
|
8
9
|
import { OrderFlags } from '../types';
|
|
9
10
|
import {
|
|
10
11
|
DYDX_DENOM,
|
|
@@ -160,13 +161,13 @@ export class CompositeClient {
|
|
|
160
161
|
}
|
|
161
162
|
|
|
162
163
|
/**
|
|
163
|
-
* @description
|
|
164
|
+
* @description Validate the goodTilBlock value for a SHORT_TERM order
|
|
164
165
|
*
|
|
165
166
|
* @param goodTilBlock Number of blocks from the current block height the order will
|
|
166
167
|
* be valid for.
|
|
167
168
|
*
|
|
168
|
-
* @throws
|
|
169
|
-
*
|
|
169
|
+
* @throws UserError if the goodTilBlock value is not valid given latest block height and
|
|
170
|
+
* SHORT_BLOCK_WINDOW.
|
|
170
171
|
*/
|
|
171
172
|
private async validateGoodTilBlock(goodTilBlock: number): Promise<void> {
|
|
172
173
|
const height = await this.validatorClient.get.latestBlockHeight();
|
|
@@ -238,8 +239,8 @@ export class CompositeClient {
|
|
|
238
239
|
price,
|
|
239
240
|
size,
|
|
240
241
|
clientId,
|
|
241
|
-
timeInForce,
|
|
242
242
|
goodTilBlock,
|
|
243
|
+
timeInForce,
|
|
243
244
|
reduceOnly,
|
|
244
245
|
);
|
|
245
246
|
msg.then((it) => resolve([it])).catch((err) => {
|
|
@@ -497,7 +498,7 @@ export class CompositeClient {
|
|
|
497
498
|
* @param subaccount The subaccount to cancel the order from
|
|
498
499
|
* @param clientId The client id of the order to cancel
|
|
499
500
|
* @param orderFlags The order flags of the order to cancel
|
|
500
|
-
* @param
|
|
501
|
+
* @param marketId The market to cancel the order on
|
|
501
502
|
* @param goodTilBlock The goodTilBlock of the order to cancel
|
|
502
503
|
* @param goodTilBlockTime The goodTilBlockTime of the order to cancel
|
|
503
504
|
*
|
|
@@ -509,10 +510,40 @@ export class CompositeClient {
|
|
|
509
510
|
subaccount: Subaccount,
|
|
510
511
|
clientId: number,
|
|
511
512
|
orderFlags: OrderFlags,
|
|
512
|
-
|
|
513
|
-
goodTilBlock
|
|
514
|
-
|
|
513
|
+
marketId: string,
|
|
514
|
+
goodTilBlock: number,
|
|
515
|
+
goodTilTimeInSeconds: number,
|
|
515
516
|
): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
|
|
517
|
+
|
|
518
|
+
const marketsResponse = await this.indexerClient.markets.getPerpetualMarkets(marketId);
|
|
519
|
+
const market = marketsResponse.markets[marketId];
|
|
520
|
+
const clobPairId = market.clobPairId;
|
|
521
|
+
|
|
522
|
+
if (!verifyOrderFlags(orderFlags)) {
|
|
523
|
+
throw new Error(`Invalid order flags: ${orderFlags}`);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
let goodTilBlockTime;
|
|
527
|
+
if (isStatefulOrder(orderFlags)) {
|
|
528
|
+
if (goodTilTimeInSeconds === 0) {
|
|
529
|
+
throw new Error('goodTilTimeInSeconds must be set for LONG_TERM or CONDITIONAL order');
|
|
530
|
+
}
|
|
531
|
+
if (goodTilBlock !== 0) {
|
|
532
|
+
throw new Error(
|
|
533
|
+
'goodTilBlock should be zero since LONG_TERM or CONDITIONAL orders ' +
|
|
534
|
+
'use goodTilTimeInSeconds instead of goodTilBlock.',
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
goodTilBlockTime = this.calculateGoodTilBlockTime(goodTilTimeInSeconds);
|
|
538
|
+
} else {
|
|
539
|
+
if (goodTilBlock === 0) {
|
|
540
|
+
throw new Error('goodTilBlock must be non-zero for SHORT_TERM orders');
|
|
541
|
+
}
|
|
542
|
+
if (goodTilTimeInSeconds !== 0) {
|
|
543
|
+
throw new Error('goodTilTimeInSeconds should be zero since SHORT_TERM orders use goodTilBlock instead of goodTilTimeInSeconds.');
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
516
547
|
return this.validatorClient.post.cancelOrder(
|
|
517
548
|
subaccount,
|
|
518
549
|
clientId,
|
package/src/lib/utils.ts
CHANGED
|
@@ -34,3 +34,12 @@ export function clientIdFromString(
|
|
|
34
34
|
// We must coerce this into a 32-bit unsigned integer.
|
|
35
35
|
return hash + (2 ** 31);
|
|
36
36
|
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Pauses the execution of the program for a specified time.
|
|
40
|
+
* @param ms - The number of milliseconds to pause the program.
|
|
41
|
+
* @returns A promise that resolves after the specified number of milliseconds.
|
|
42
|
+
*/
|
|
43
|
+
export async function sleep(ms: number): Promise<void> {
|
|
44
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
45
|
+
}
|
package/src/lib/validation.ts
CHANGED
|
@@ -131,7 +131,12 @@ function verifyNumberIsUint32(num: number): boolean {
|
|
|
131
131
|
return num >= 0 && num <= MAX_UINT_32;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
function
|
|
134
|
+
export function verifyOrderFlags(orderFlags: OrderFlags): boolean {
|
|
135
|
+
return orderFlags === OrderFlags.SHORT_TERM ||
|
|
136
|
+
orderFlags === OrderFlags.LONG_TERM || orderFlags === OrderFlags.CONDITIONAL;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function isStatefulOrder(orderFlags: OrderFlags): boolean {
|
|
135
140
|
return orderFlags === OrderFlags.LONG_TERM || orderFlags === OrderFlags.CONDITIONAL;
|
|
136
141
|
}
|
|
137
142
|
|
/package/build/examples/{short_term_composite_example.d.ts → long_term_order_cancel_example.d.ts}
RENAMED
|
File without changes
|
|
File without changes
|