UNPKG

@gateway.fm/gtw-dvf-client-js

Version:

DVF client js lib with gateway.fm rpc endpoints

175 lines (152 loc) 5.41 kB
const nock = require('nock') const instance = require('./test/helpers/instance') const mockGetConf = require('./test/fixtures/getConf') let dvf describe('dvf.submitOrder', () => { beforeAll(async () => { mockGetConf() dvf = await instance() }) it('Submits market buy order and receives valid payload', async () => { mockGetConf() const symbol = 'ETH:USDT' const amountToSell = 100 const tokenToSell = 'USDT' const worstCasePrice = 250 const worstCaseAmountToReceive = amountToSell / worstCasePrice const expectedBody = { type: 'EXCHANGE MARKET', symbol, amount: worstCaseAmountToReceive.toString(), price: worstCasePrice.toString(), meta: { starkPublicKey: { x: '07a83d131fe965ad7e70f259e3cf1e785dcfacf319a64115faeabb64a2fd8af0', y: '4de195d61296b6ac602ab5db8d190b90cd1e767fe9d47d4c9d96ab62cf7ad41' } }, protocol: 'stark', feeRate: 0.002 } const starkPrivateKey = process.env.PRIVATE_STARK_KEY const payloadValidator = jest.fn(body => { expect(body).toMatchObject(expectedBody) expect(body.meta.ethAddress).toMatch(/[\da-f]/i) expect(body.meta.starkMessage).toMatch(/[\da-f]/i) expect(body.meta.starkSignature.r).toMatch(/[\da-f]/i) expect(body.meta.starkSignature.s).toMatch(/[\da-f]/i) expect(typeof body.meta.starkOrder.expirationTimestamp).toBe('number') expect(typeof body.meta.starkOrder.nonce).toBe('number') expect(body.meta.starkOrder.amountBuy).toBe('39920000') expect(body.meta.starkOrder.amountSell).toBe('100000000') return true }) nock(dvf.config.api) .post('/v1/trading/w/submitOrder', payloadValidator) .reply(200) await dvf.submitMarketOrder({ symbol, amountToSell, tokenToSell, worstCasePrice, feeRate: 0.002, starkPrivateKey }) expect(payloadValidator).toBeCalled() }) it('Submits market sell order and receives valid payload', async () => { mockGetConf() const symbol = 'ETH:USDT' const amountToSell = 2 const tokenToSell = 'ETH' const worstCasePrice = 125 const expectedBody = { type: 'EXCHANGE MARKET', symbol, amount: (-amountToSell).toString(), price: worstCasePrice.toString(), meta: { starkPublicKey: { x: '07a83d131fe965ad7e70f259e3cf1e785dcfacf319a64115faeabb64a2fd8af0', y: '4de195d61296b6ac602ab5db8d190b90cd1e767fe9d47d4c9d96ab62cf7ad41' } }, protocol: 'stark', feeRate: 0.002 } const starkPrivateKey = process.env.PRIVATE_STARK_KEY const payloadValidator = jest.fn(body => { expect(body).toMatchObject(expectedBody) expect(body.meta.ethAddress).toMatch(/[\da-f]/i) expect(body.meta.starkMessage).toMatch(/[\da-f]/i) expect(body.meta.starkSignature.r).toMatch(/[\da-f]/i) expect(body.meta.starkSignature.s).toMatch(/[\da-f]/i) expect(typeof body.meta.starkOrder.expirationTimestamp).toBe('number') expect(typeof body.meta.starkOrder.nonce).toBe('number') expect(body.meta.starkOrder.amountBuy).toBe('249500000') expect(body.meta.starkOrder.amountSell).toBe('200000000') return true }) nock(dvf.config.api) .post('/v1/trading/w/submitOrder', payloadValidator) .reply(200) await dvf.submitMarketOrder({ symbol, amountToSell, tokenToSell, worstCasePrice, feeRate: 0.002, starkPrivateKey }) expect(payloadValidator).toBeCalled() }) it('Adjust price and amount to match bfx precision', async () => { mockGetConf() const symbol = 'ETH:USDT' const amountToSell = 99.999999999 const amountToSellAdjusted = 100 const tokenToSell = 'USDT' const worstCasePrice = 3.00001 const worstCasePriceAdjusted = 3 const worstCaseAmountToReceive = amountToSellAdjusted / worstCasePriceAdjusted const expectedBody = { type: 'EXCHANGE MARKET', symbol, amount: worstCaseAmountToReceive.toFixed(8), price: worstCasePriceAdjusted.toString(), meta: { starkPublicKey: { x: '07a83d131fe965ad7e70f259e3cf1e785dcfacf319a64115faeabb64a2fd8af0', y: '4de195d61296b6ac602ab5db8d190b90cd1e767fe9d47d4c9d96ab62cf7ad41' } }, protocol: 'stark', feeRate: 0.002 } const starkPrivateKey = process.env.PRIVATE_STARK_KEY const payloadValidator = jest.fn(body => { expect(body).toMatchObject(expectedBody) expect(body.meta.ethAddress).toMatch(/[\da-f]/i) expect(body.meta.starkMessage).toMatch(/[\da-f]/i) expect(body.meta.starkSignature.r).toMatch(/[\da-f]/i) expect(body.meta.starkSignature.s).toMatch(/[\da-f]/i) expect(typeof body.meta.starkOrder.expirationTimestamp).toBe('number') expect(typeof body.meta.starkOrder.nonce).toBe('number') expect(body.meta.starkOrder.amountBuy).toBe('3326666666') expect(body.meta.starkOrder.amountSell).toBe('99999999') return true }) nock(dvf.config.api) .post('/v1/trading/w/submitOrder', payloadValidator) .reply(200) await dvf.submitMarketOrder({ symbol, amountToSell, tokenToSell, worstCasePrice, feeRate: 0.002, starkPrivateKey }) expect(payloadValidator).toBeCalled() }) })