aboutsummaryrefslogtreecommitdiffstats
path: root/packages/sra-api
diff options
context:
space:
mode:
Diffstat (limited to 'packages/sra-api')
-rw-r--r--packages/sra-api/src/api.ts36
-rw-r--r--packages/sra-api/src/examples/index.ts2
-rw-r--r--packages/sra-api/src/examples/relayerApiOrderBookResponse.ts54
3 files changed, 92 insertions, 0 deletions
diff --git a/packages/sra-api/src/api.ts b/packages/sra-api/src/api.ts
index 2cc15b297..5289a31f3 100644
--- a/packages/sra-api/src/api.ts
+++ b/packages/sra-api/src/api.ts
@@ -205,6 +205,42 @@ export const api: OpenApiSpec = {
),
},
},
+ '/v2/orderbook': {
+ get: {
+ description: `Retrieves the orderbook for a given asset pair. This endpoint should be [paginated](#section/Pagination). Bids will be sorted in descending order by price, and asks will be sorted in ascending order by price. Within the price sorted orders, the orders are further sorted by _taker fee price_ which is defined as the **takerFee** divided by **takerTokenAmount**. After _taker fee price_, orders are to be sorted by expiration in ascending order. The way pagination works for this endpoint is that the **page** and **per_page** query params apply to both \`bids\` and \`asks\` collections, and if \`page\` * \`per_page\` > \`total\` for a certain collection, the \`records\` for that collection should just be empty. `,
+ operationId: 'getOrderBook',
+ parameters: generateParameters(
+ [
+ {
+ name: 'baseAssetData',
+ in: 'query',
+ description: `assetData (makerAssetData or takerAssetData) designated as the base currency in the [currency pair calculation](https://en.wikipedia.org/wiki/Currency_pair) of price.`,
+ required: true,
+ example: '0xf47261b04c32345ced77393b3530b1eed0f346429d',
+ schema: {
+ $ref: '#/components/schemas/hexSchema',
+ },
+ },
+ {
+ name: 'quoteAssetData',
+ in: 'query',
+ description: `assetData (makerAssetData or takerAssetData) designated as the quote currency in the currency pair calculation of price (required).`,
+ required: true,
+ example: '0xf47261b04c32345ced77393b3530b1eed0f346429d',
+ schema: {
+ $ref: '#/components/schemas/hexSchema',
+ },
+ },
+ ],
+ true,
+ ),
+ responses: generateResponses(
+ 'relayerApiOrderBookResponseSchema',
+ examples.relayerApiOrderBookResponse,
+ `The sorted order book for the specified asset pair.`,
+ ),
+ },
+ },
},
components: {
schemas: openApiSchemas,
diff --git a/packages/sra-api/src/examples/index.ts b/packages/sra-api/src/examples/index.ts
index d99c0469b..51d979fe4 100644
--- a/packages/sra-api/src/examples/index.ts
+++ b/packages/sra-api/src/examples/index.ts
@@ -1,11 +1,13 @@
import { validationError } from './errors';
import { relayerApiAssetDataPairsResponse } from './relayerApiAssetDataPairsResponse';
import { relayerApiOrder } from './relayerApiOrder';
+import { relayerApiOrderBookResponse } from './relayerApiOrderBookResponse';
import { relayerApiOrdersResponse } from './relayerApiOrdersResponse';
export const examples = {
validationError,
relayerApiAssetDataPairsResponse,
relayerApiOrder,
+ relayerApiOrderBookResponse,
relayerApiOrdersResponse,
};
diff --git a/packages/sra-api/src/examples/relayerApiOrderBookResponse.ts b/packages/sra-api/src/examples/relayerApiOrderBookResponse.ts
new file mode 100644
index 000000000..4e1e7a8eb
--- /dev/null
+++ b/packages/sra-api/src/examples/relayerApiOrderBookResponse.ts
@@ -0,0 +1,54 @@
+export const relayerApiOrderBookResponse = {
+ bids: {
+ total: 325,
+ page: 2,
+ perPage: 100,
+ records: [
+ {
+ order: {
+ makerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
+ takerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
+ feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da',
+ senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
+ makerAssetAmount: '10000000000000000',
+ takerAssetAmount: '20000000000000000',
+ makerFee: '100000000000000',
+ takerFee: '200000000000000',
+ expirationTimeSeconds: '1532560590',
+ salt: '1532559225',
+ makerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d',
+ takerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990',
+ exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
+ signature: '0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
+ },
+ metaData: {},
+ },
+ ],
+ },
+ asks: {
+ total: 500,
+ page: 2,
+ perPage: 100,
+ records: [
+ {
+ order: {
+ makerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
+ takerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b',
+ feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da',
+ senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
+ makerAssetAmount: '20000000000000000',
+ takerAssetAmount: '10000000000000000',
+ makerFee: '200000000000000',
+ takerFee: '100000000000000',
+ expirationTimeSeconds: '1532560590',
+ salt: '1532559225',
+ makerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990',
+ takerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d',
+ exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093',
+ signature: '0x013842a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b3518891',
+ },
+ metaData: {},
+ },
+ ],
+ },
+};