From 5942d1ba367af6ef32c63840429a4faf2906eef3 Mon Sep 17 00:00:00 2001 From: Will Liu Date: Wed, 20 Dec 2023 07:56:48 -0800 Subject: [PATCH] first --- e2e-testing/__tests__/helpers/constants.ts | 12 +++ e2e-testing/__tests__/orders.test.ts | 108 +++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 e2e-testing/__tests__/orders.test.ts diff --git a/e2e-testing/__tests__/helpers/constants.ts b/e2e-testing/__tests__/helpers/constants.ts index 37b2d4f20c..7302762715 100644 --- a/e2e-testing/__tests__/helpers/constants.ts +++ b/e2e-testing/__tests__/helpers/constants.ts @@ -1,2 +1,14 @@ export const DYDX_LOCAL_ADDRESS = 'dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4'; export const DYDX_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'; +export const DYDX_LOCAL_ADDRESS_2 = 'dydx10fx7sy6ywd5senxae9dwytf8jxek3t2gcen2vs'; +export const DYDX_LOCAL_MNEMONIC_2 = 'color habit donor nurse dinosaur stable wonder process post perfect raven gold census inside worth inquiry mammal panic olive toss shadow strong name drum'; + +export const MNEMONIC_TO_ADDRESS: Record = { + [DYDX_LOCAL_MNEMONIC]: DYDX_LOCAL_ADDRESS, + [DYDX_LOCAL_MNEMONIC_2]: DYDX_LOCAL_ADDRESS_2, +}; + +export const ADDRESS_TO_MNEMONIC: Record = { + [DYDX_LOCAL_ADDRESS]: DYDX_LOCAL_MNEMONIC, + [DYDX_LOCAL_ADDRESS_2]: DYDX_LOCAL_MNEMONIC_2, +}; diff --git a/e2e-testing/__tests__/orders.test.ts b/e2e-testing/__tests__/orders.test.ts new file mode 100644 index 0000000000..f086462e31 --- /dev/null +++ b/e2e-testing/__tests__/orders.test.ts @@ -0,0 +1,108 @@ +import Long from 'long'; +import { + BECH32_PREFIX, + IPlaceOrder, + LocalWallet, + Network, + Order_Side, + Order_TimeInForce, + OrderFlags, + SubaccountInfo, + ValidatorClient, +} from '@dydxprotocol/v4-client-js'; +import { DYDX_LOCAL_MNEMONIC, DYDX_LOCAL_MNEMONIC_2 } from './helpers/constants'; + +const PERPETUAL_PAIR_BTC_USD: number = 0; +const PERPETUAL_PAIR_ETH_USD: number = 1; +const quantums: Long = new Long(1_000_000_000); +const subticks: Long = new Long(1_000_000_000); + +const defaultOrder: IPlaceOrder = { + clientId: 0, + orderFlags: OrderFlags.SHORT_TERM, + clobPairId: PERPETUAL_PAIR_BTC_USD, + side: Order_Side.SIDE_BUY, + quantums, + subticks, + timeInForce: Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED, + reduceOnly: false, + clientMetadata: 0, +}; + +type OrderDetails = { + mnemonic: string; + timeInForce: number; + orderFlags: number; + side: number; + clobPairId: number; + quantums: number; + subticks: number; +}; + +const orderDetails: OrderDetails[] = [ + { + mnemonic: DYDX_LOCAL_MNEMONIC, + timeInForce: 2, + orderFlags: 64, + side: 1, + clobPairId: PERPETUAL_PAIR_BTC_USD, + quantums: 10000000, + subticks: 40000000000, + }, + { + mnemonic: DYDX_LOCAL_MNEMONIC_2, + timeInForce: 2, + orderFlags: 64, + side: 1, + clobPairId: PERPETUAL_PAIR_ETH_USD, + quantums: 10000000, + subticks: 40000000000, + }, +]; + +async function placeOrder( + mnemonic: string, + order: IPlaceOrder, +): Promise { + const wallet = await LocalWallet.fromMnemonic(mnemonic, BECH32_PREFIX); + const client = await ValidatorClient.connect(Network.testnet().validatorConfig); + + const subaccount = new SubaccountInfo(wallet, 0); + const modifiedOrder: IPlaceOrder = order; + if (order.orderFlags !== 0) { + modifiedOrder.goodTilBlock = 0; + const now = new Date(); + const millisecondsPerSecond = 1000; + const interval = 60 * millisecondsPerSecond; + const future = new Date(now.valueOf() + interval); + modifiedOrder.goodTilBlockTime = Math.round(future.getTime() / 1000); + } else { + modifiedOrder.goodTilBlockTime = 0; + } + + await client.post.placeOrderObject( + subaccount, + modifiedOrder, + ); +} + +describe('orders', () => { + it('test orders', async () => { + // place all orders + for (const order of orderDetails) { + const modifiedOrder: IPlaceOrder = defaultOrder; + modifiedOrder.clientId = Math.floor(Math.random() * 1000000000); + modifiedOrder.goodTilBlock = 0; + modifiedOrder.clobPairId = order.clobPairId; + modifiedOrder.timeInForce = order.timeInForce; + modifiedOrder.reduceOnly = false; // reduceOnly is currently disabled + modifiedOrder.orderFlags = order.orderFlags; + modifiedOrder.side = order.side; + modifiedOrder.quantums = Long.fromNumber(order.quantums); + modifiedOrder.subticks = Long.fromNumber(order.subticks); + + await placeOrder(order.mnemonic, modifiedOrder); + } + + }); +});