@d8x/perpetuals-sdk 0.1.12 → 0.2.0

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 (165) hide show
  1. package/dist/cjs/abi/testnet/IPerpetualManager.json +5215 -0
  2. package/dist/cjs/abi/testnet/LimitOrderBook.json +1075 -0
  3. package/dist/cjs/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
  4. package/dist/cjs/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
  5. package/dist/cjs/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
  6. package/dist/cjs/accountTrade.js +441 -0
  7. package/dist/cjs/accountTrade.js.map +1 -0
  8. package/dist/{src → cjs}/brokerTool.js +31 -84
  9. package/dist/cjs/brokerTool.js.map +1 -0
  10. package/dist/cjs/config/defaultConfig.json +47 -0
  11. package/dist/cjs/config/mockSwap.json +4 -0
  12. package/dist/cjs/config/priceFeedConfig.json +104 -0
  13. package/dist/cjs/config/symbolList.json +13 -0
  14. package/dist/cjs/d8XMath.js.map +1 -0
  15. package/dist/cjs/index.js +29 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/liquidatorTool.js +287 -0
  18. package/dist/cjs/liquidatorTool.js.map +1 -0
  19. package/dist/{src → cjs}/liquidityProviderTool.js +12 -65
  20. package/dist/cjs/liquidityProviderTool.js.map +1 -0
  21. package/dist/{src → cjs}/marketData.js +52 -134
  22. package/dist/cjs/marketData.js.map +1 -0
  23. package/dist/{src → cjs}/nodeSDKTypes.d.ts +5 -5
  24. package/dist/cjs/nodeSDKTypes.js +64 -0
  25. package/dist/cjs/nodeSDKTypes.js.map +1 -0
  26. package/dist/{src → cjs}/orderReferrerTool.d.ts +12 -5
  27. package/dist/{src → cjs}/orderReferrerTool.js +114 -112
  28. package/dist/cjs/orderReferrerTool.js.map +1 -0
  29. package/dist/{src → cjs}/perpetualDataHandler.d.ts +1 -1
  30. package/dist/{src → cjs}/perpetualDataHandler.js +47 -109
  31. package/dist/cjs/perpetualDataHandler.js.map +1 -0
  32. package/dist/{src → cjs}/perpetualEventHandler.d.ts +3 -3
  33. package/dist/{src → cjs}/perpetualEventHandler.js +12 -74
  34. package/dist/cjs/perpetualEventHandler.js.map +1 -0
  35. package/dist/cjs/priceFeeds.js +466 -0
  36. package/dist/cjs/priceFeeds.js.map +1 -0
  37. package/dist/{src → cjs}/traderDigests.js +7 -43
  38. package/dist/cjs/traderDigests.js.map +1 -0
  39. package/dist/{src → cjs}/traderInterface.js +13 -66
  40. package/dist/cjs/traderInterface.js.map +1 -0
  41. package/dist/{src → cjs}/triangulator.js +2 -17
  42. package/dist/cjs/triangulator.js.map +1 -0
  43. package/dist/{src → cjs}/utils.js +3 -29
  44. package/dist/cjs/utils.js.map +1 -0
  45. package/dist/cjs/version.d.ts +1 -0
  46. package/dist/{src → cjs}/version.js +1 -1
  47. package/dist/cjs/version.js.map +1 -0
  48. package/dist/{src → cjs}/writeAccessHandler.js +12 -65
  49. package/dist/cjs/writeAccessHandler.js.map +1 -0
  50. package/dist/esm/abi/ERC20.json +288 -0
  51. package/dist/esm/abi/MockTokenSwap.json +186 -0
  52. package/dist/{abi/testnet → esm/abi/central-park}/IPerpetualManager.json +404 -214
  53. package/dist/{abi/testnet → esm/abi/central-park}/LimitOrderBook.json +197 -15
  54. package/dist/esm/abi/central-park/LimitOrderBookFactory.json +135 -0
  55. package/dist/esm/abi/testnet/IPerpetualManager.json +5215 -0
  56. package/dist/esm/abi/testnet/LimitOrderBook.json +1075 -0
  57. package/dist/esm/abi/testnet/LimitOrderBookFactory.json +135 -0
  58. package/dist/esm/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
  59. package/dist/esm/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
  60. package/dist/esm/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
  61. package/dist/esm/accountTrade.d.ts +221 -0
  62. package/dist/{src → esm}/accountTrade.js +22 -93
  63. package/dist/esm/accountTrade.js.map +1 -0
  64. package/dist/esm/brokerTool.d.ts +318 -0
  65. package/dist/esm/brokerTool.js +572 -0
  66. package/dist/esm/brokerTool.js.map +1 -0
  67. package/dist/esm/config/defaultConfig.json +47 -0
  68. package/dist/esm/config/mockSwap.json +4 -0
  69. package/dist/esm/config/priceFeedConfig.json +104 -0
  70. package/dist/esm/config/symbolList.json +13 -0
  71. package/dist/esm/d8XMath.d.ts +122 -0
  72. package/dist/esm/d8XMath.js +247 -0
  73. package/dist/esm/d8XMath.js.map +1 -0
  74. package/{src/index.ts → dist/esm/index.d.ts} +1 -15
  75. package/dist/esm/index.js +16 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/liquidatorTool.d.ts +158 -0
  78. package/dist/{src → esm}/liquidatorTool.js +10 -65
  79. package/dist/esm/liquidatorTool.js.map +1 -0
  80. package/dist/esm/liquidityProviderTool.d.ts +126 -0
  81. package/dist/esm/liquidityProviderTool.js +218 -0
  82. package/dist/esm/liquidityProviderTool.js.map +1 -0
  83. package/dist/esm/marketData.d.ts +309 -0
  84. package/dist/esm/marketData.js +1007 -0
  85. package/dist/esm/marketData.js.map +1 -0
  86. package/dist/esm/nodeSDKTypes.d.ts +266 -0
  87. package/dist/esm/nodeSDKTypes.js +60 -0
  88. package/dist/esm/nodeSDKTypes.js.map +1 -0
  89. package/dist/esm/orderReferrerTool.d.ts +196 -0
  90. package/dist/esm/orderReferrerTool.js +491 -0
  91. package/dist/esm/orderReferrerTool.js.map +1 -0
  92. package/dist/esm/perpetualDataHandler.d.ts +220 -0
  93. package/dist/esm/perpetualDataHandler.js +1060 -0
  94. package/dist/esm/perpetualDataHandler.js.map +1 -0
  95. package/dist/esm/perpetualEventHandler.d.ts +179 -0
  96. package/dist/esm/perpetualEventHandler.js +435 -0
  97. package/dist/esm/perpetualEventHandler.js.map +1 -0
  98. package/dist/esm/priceFeeds.d.ts +115 -0
  99. package/dist/{src → esm}/priceFeeds.js +16 -83
  100. package/dist/esm/priceFeeds.js.map +1 -0
  101. package/dist/esm/traderDigests.d.ts +21 -0
  102. package/dist/esm/traderDigests.js +80 -0
  103. package/dist/esm/traderDigests.js.map +1 -0
  104. package/dist/esm/traderInterface.d.ts +79 -0
  105. package/dist/esm/traderInterface.js +196 -0
  106. package/dist/esm/traderInterface.js.map +1 -0
  107. package/dist/esm/triangulator.d.ts +27 -0
  108. package/dist/esm/triangulator.js +110 -0
  109. package/dist/esm/triangulator.js.map +1 -0
  110. package/dist/esm/utils.d.ts +59 -0
  111. package/dist/esm/utils.js +138 -0
  112. package/dist/esm/utils.js.map +1 -0
  113. package/dist/esm/version.d.ts +1 -0
  114. package/dist/esm/version.js +2 -0
  115. package/dist/esm/version.js.map +1 -0
  116. package/dist/esm/writeAccessHandler.d.ts +50 -0
  117. package/dist/esm/writeAccessHandler.js +157 -0
  118. package/dist/esm/writeAccessHandler.js.map +1 -0
  119. package/package.json +16 -26
  120. package/dist/bundle.js +0 -36793
  121. package/dist/config/defaultConfig.json +0 -47
  122. package/dist/config/mockSwap.json +0 -4
  123. package/dist/config/priceFeedConfig.json +0 -104
  124. package/dist/config/symbolList.json +0 -13
  125. package/dist/src/index.js +0 -45
  126. package/dist/src/nodeSDKTypes.js +0 -115
  127. package/dist/src/version.d.ts +0 -1
  128. package/module.d.ts +0 -1
  129. package/src/accountTrade.ts +0 -392
  130. package/src/brokerTool.ts +0 -507
  131. package/src/d8XMath.ts +0 -319
  132. package/src/liquidatorTool.ts +0 -258
  133. package/src/liquidityProviderTool.ts +0 -186
  134. package/src/marketData.ts +0 -946
  135. package/src/nodeSDKTypes.ts +0 -293
  136. package/src/orderReferrerTool.ts +0 -389
  137. package/src/perpetualDataHandler.ts +0 -1061
  138. package/src/perpetualEventHandler.ts +0 -455
  139. package/src/priceFeeds.ts +0 -381
  140. package/src/traderDigests.ts +0 -91
  141. package/src/traderInterface.ts +0 -159
  142. package/src/triangulator.ts +0 -105
  143. package/src/utils.ts +0 -134
  144. package/src/version.ts +0 -1
  145. package/src/writeAccessHandler.ts +0 -127
  146. /package/dist/{abi → cjs/abi}/ERC20.json +0 -0
  147. /package/dist/{abi → cjs/abi}/MockTokenSwap.json +0 -0
  148. /package/dist/{abi → cjs/abi}/central-park/IPerpetualManager.json +0 -0
  149. /package/dist/{abi → cjs/abi}/central-park/LimitOrderBook.json +0 -0
  150. /package/dist/{abi → cjs/abi}/central-park/LimitOrderBookFactory.json +0 -0
  151. /package/dist/{abi → cjs/abi}/testnet/LimitOrderBookFactory.json +0 -0
  152. /package/dist/{src → cjs}/accountTrade.d.ts +0 -0
  153. /package/dist/{src → cjs}/brokerTool.d.ts +0 -0
  154. /package/dist/{src → cjs}/d8XMath.d.ts +0 -0
  155. /package/dist/{src → cjs}/d8XMath.js +0 -0
  156. /package/dist/{src → cjs}/index.d.ts +0 -0
  157. /package/dist/{src → cjs}/liquidatorTool.d.ts +0 -0
  158. /package/dist/{src → cjs}/liquidityProviderTool.d.ts +0 -0
  159. /package/dist/{src → cjs}/marketData.d.ts +0 -0
  160. /package/dist/{src → cjs}/priceFeeds.d.ts +0 -0
  161. /package/dist/{src → cjs}/traderDigests.d.ts +0 -0
  162. /package/dist/{src → cjs}/traderInterface.d.ts +0 -0
  163. /package/dist/{src → cjs}/triangulator.d.ts +0 -0
  164. /package/dist/{src → cjs}/utils.d.ts +0 -0
  165. /package/dist/{src → cjs}/writeAccessHandler.d.ts +0 -0
@@ -0,0 +1,220 @@
1
+ import { ethers, BigNumber } from "ethers";
2
+ import { NodeSDKConfig, Order, SmartContractOrder, PerpetualStaticInfo, MarginAccount, PoolStaticInfo, PerpetualState, PriceFeedSubmission, ClientOrder } from "./nodeSDKTypes";
3
+ import PriceFeeds from "./priceFeeds";
4
+ /**
5
+ * Parent class for MarketData and WriteAccessHandler that handles
6
+ * common data and chain operations.
7
+ */
8
+ export default class PerpetualDataHandler {
9
+ PRICE_UPDATE_FEE_GWEI: number;
10
+ protected symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>;
11
+ protected poolStaticInfos: Array<PoolStaticInfo>;
12
+ protected symbolList: Map<string, string>;
13
+ protected symbolToTokenAddrMap: Map<string, string>;
14
+ protected chainId: number;
15
+ protected proxyContract: ethers.Contract | null;
16
+ protected proxyABI: ethers.ContractInterface;
17
+ protected proxyAddr: string;
18
+ protected lobFactoryContract: ethers.Contract | null;
19
+ protected lobFactoryABI: ethers.ContractInterface;
20
+ protected lobFactoryAddr: string | undefined;
21
+ protected lobABI: ethers.ContractInterface;
22
+ protected nodeURL: string;
23
+ protected provider: ethers.providers.Provider | null;
24
+ private signerOrProvider;
25
+ protected priceFeedGetter: PriceFeeds;
26
+ protected nestedPerpetualIDs: number[][];
27
+ constructor(config: NodeSDKConfig);
28
+ protected initContractsAndData(signerOrProvider: ethers.Signer | ethers.providers.Provider): Promise<void>;
29
+ /**
30
+ * Returns the order-book contract for the symbol if found or fails
31
+ * @param symbol symbol of the form ETH-USD-MATIC
32
+ * @returns order book contract for the perpetual
33
+ */
34
+ getOrderBookContract(symbol: string): ethers.Contract;
35
+ /**
36
+ * Called when initializing. This function fills this.symbolToTokenAddrMap,
37
+ * and this.nestedPerpetualIDs and this.symbolToPerpStaticInfo
38
+ *
39
+ */
40
+ protected _fillSymbolMaps(proxyContract: ethers.Contract): Promise<void>;
41
+ /**
42
+ * Get pool symbol given a pool Id.
43
+ * @param {number} poolId Pool Id.
44
+ * @returns {symbol} Pool symbol, e.g. "USDC".
45
+ */
46
+ getSymbolFromPoolId(poolId: number): string;
47
+ /**
48
+ * Get pool Id given a pool symbol.
49
+ * @param {string} symbol Pool symbol.
50
+ * @returns {number} Pool Id.
51
+ */
52
+ getPoolIdFromSymbol(symbol: string): number;
53
+ /**
54
+ * Get perpetual Id given a perpetual symbol.
55
+ * @param {string} symbol Perpetual symbol, e.g. "BTC-USD-MATIC".
56
+ * @returns {number} Perpetual Id.
57
+ */
58
+ getPerpIdFromSymbol(symbol: string): number;
59
+ /**
60
+ * Get the symbol in long format of the perpetual id
61
+ * @param perpId perpetual id
62
+ */
63
+ getSymbolFromPerpId(perpId: number): string | undefined;
64
+ symbol4BToLongSymbol(sym: string): string;
65
+ /**
66
+ * Get PriceFeedSubmission data required for blockchain queries that involve price data, and the corresponding
67
+ * triangulated prices for the indices S2 and S3
68
+ * @param symbol pool symbol of the form "ETH-USD-MATIC"
69
+ * @returns PriceFeedSubmission and prices for S2 and S3. [S2price, 0] if S3 not defined.
70
+ */
71
+ fetchPriceSubmissionInfoForPerpetual(symbol: string): Promise<{
72
+ submission: PriceFeedSubmission;
73
+ pxS2S3: [number, number];
74
+ }>;
75
+ /**
76
+ * Get the symbols required as indices for the given perpetual
77
+ * @param symbol of the form ETH-USD-MATIC, specifying the perpetual
78
+ * @returns name of underlying index prices, e.g. ["MATIC-USD", ""]
79
+ */
80
+ getIndexSymbols(symbol: string): [string, string];
81
+ /**
82
+ * Get the latest prices for a given perpetual from the offchain oracle
83
+ * networks
84
+ * @param symbol perpetual symbol of the form BTC-USD-MATIC
85
+ * @returns array of price feed updates that can be submitted to the smart contract
86
+ * and corresponding price information
87
+ */
88
+ fetchLatestFeedPriceInfo(symbol: string): Promise<PriceFeedSubmission>;
89
+ /**
90
+ * Get list of required pyth price source IDs for given perpetual
91
+ * @param symbol perpetual symbol, e.g., BTC-USD-MATIC
92
+ * @returns list of required pyth price sources for this perpetual
93
+ */
94
+ getPriceIds(symbol: string): string[];
95
+ protected static _getSymbolFromPoolId(poolId: number, staticInfos: PoolStaticInfo[]): string;
96
+ protected static _getPoolIdFromSymbol(symbol: string, staticInfos: PoolStaticInfo[]): number;
97
+ static getNestedPerpetualIds(_proxyContract: ethers.Contract): Promise<number[][]>;
98
+ static buildMarginAccountFromState(symbol: string, traderState: ethers.BigNumber[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _pxS2S3: [number, number]): MarginAccount;
99
+ static getMarginAccount(traderAddr: string, symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: ethers.Contract, _pxS2S3: [number, number]): Promise<MarginAccount>;
100
+ protected static _queryPerpetualPrice(symbol: string, tradeAmount: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: ethers.Contract, indexPrices: [number, number]): Promise<number>;
101
+ protected static _queryPerpetualMarkPrice(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: ethers.Contract, indexPrices: [number, number]): Promise<number>;
102
+ protected static _queryPerpetualState(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: ethers.Contract, indexPrices: [number, number, boolean, boolean]): Promise<PerpetualState>;
103
+ /**
104
+ * Liquidation price
105
+ * @param symbol symbol of the form BTC-USD-MATIC
106
+ * @param traderState BigInt array according to smart contract
107
+ * @param S2 number, index price S2
108
+ * @param symbolToPerpStaticInfo mapping symbol->PerpStaticInfo
109
+ * @returns liquidation mark-price, corresponding collateral/quote conversion
110
+ */
111
+ protected static _calculateLiquidationPrice(symbol: string, traderState: BigNumber[], S2: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): [number, number, number, number, number];
112
+ /**
113
+ * Finds the perpetual id for a symbol of the form
114
+ * <base>-<quote>-<collateral>. The function first converts the
115
+ * token names into bytes4 representation
116
+ * @param symbol symbol (e.g., BTC-USD-MATC)
117
+ * @param symbolToPerpStaticInfo map that contains the bytes4-symbol to PerpetualStaticInfo
118
+ * including id mapping
119
+ * @returns perpetual id or it fails
120
+ */
121
+ protected static symbolToPerpetualId(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): number;
122
+ /**
123
+ * Find the long symbol ("ETH-USD-MATIC") of the given perpetual id
124
+ * @param id perpetual id
125
+ * @param symbolToPerpStaticInfo map that contains the bytes4-symbol to PerpetualStaticInfo
126
+ * @returns symbol string or undefined
127
+ */
128
+ protected static perpetualIdToSymbol(id: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): string | undefined;
129
+ protected static symbolToBytes4Symbol(symbol: string): string;
130
+ private static _getByValue;
131
+ protected static fromSmartContractOrder(order: SmartContractOrder, symbolToPerpInfoMap: Map<string, PerpetualStaticInfo>): Order;
132
+ /**
133
+ * Transform the convenient form of the order into a smart-contract accepted type of order
134
+ * @param order order type
135
+ * @param traderAddr address of the trader
136
+ * @param symbolToPerpetualMap mapping of symbol to perpetual Id
137
+ * @returns SmartContractOrder
138
+ */
139
+ protected static toSmartContractOrder(order: Order, traderAddr: string, perpStaticInfo: Map<string, PerpetualStaticInfo>): SmartContractOrder;
140
+ /**
141
+ * Converts a smart contract order to a client order
142
+ * @param scOrder Smart contract order
143
+ * @param parentChildIds Optional parent-child dependency
144
+ * @returns Client order that can be submitted to the corresponding LOB
145
+ */
146
+ static fromSmartContratOrderToClientOrder(scOrder: SmartContractOrder, parentChildIds?: [string, string]): ClientOrder;
147
+ /**
148
+ * Converts a user-friendly order to a client order
149
+ * @param order Order
150
+ * @param parentChildIds Optional parent-child dependency
151
+ * @returns Client order that can be submitted to the corresponding LOB
152
+ */
153
+ static toClientOrder(order: Order, traderAddr: string, perpStaticInfo: Map<string, PerpetualStaticInfo>, parentChildIds?: [string, string]): ClientOrder;
154
+ /**
155
+ * Converts an order as stored in the LOB smart contract into a user-friendly order type
156
+ * @param obOrder Order-book contract order type
157
+ * @returns User friendly order struct
158
+ */
159
+ static fromClientOrder(obOrder: ClientOrder, perpStaticInfo: Map<string, PerpetualStaticInfo>): Order;
160
+ private static _flagToOrderType;
161
+ /**
162
+ * Determine the correct order flags based on the order-properties.
163
+ * Checks for some misspecifications.
164
+ * @param order order type
165
+ * @returns BigNumber flags
166
+ */
167
+ private static _orderTypeToFlag;
168
+ protected static _getLotSize(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): number;
169
+ protected static _getMinimalPositionSize(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): number;
170
+ /**
171
+ * Get NodeSDKConfig from a chain ID, known config name, or custom file location..
172
+ * @param configNameOrfileLocation Name of a known default config, or chain ID, or json-file with required variables for config
173
+ * @param version Config version number. Defaults to highest version if name or chain ID are not unique
174
+ * @returns NodeSDKConfig
175
+ */
176
+ static readSDKConfig(configNameOrChainIdOrFileLocation: string | number, version?: number): NodeSDKConfig;
177
+ /**
178
+ * Get a NodeSDKConfig from its name
179
+ * @param name Name of the known config
180
+ * @param version Version of the config. Defaults to highest available.
181
+ * @returns NodeSDKConfig
182
+ */
183
+ protected static getConfigByName(name: string, version?: number): NodeSDKConfig | undefined;
184
+ /**
185
+ * Get a NodeSDKConfig from a json file.
186
+ * @param filename Location of the file
187
+ * @param version Version of the config. Defaults to highest available.
188
+ * @returns NodeSDKConfig
189
+ */
190
+ protected static getConfigByLocation(filename: string): NodeSDKConfig;
191
+ /**
192
+ * Get a NodeSDKConfig from its chain Id
193
+ * @param chainId Chain Id
194
+ * @param version Version of the config. Defaults to highest available.
195
+ * @returns NodeSDKConfig
196
+ */
197
+ protected static getConfigByChainId(chainId: number, version?: number): NodeSDKConfig | undefined;
198
+ /**
199
+ * Get the ABI of a function in a given contract
200
+ * @param contract A contract instance, e.g. this.proxyContract
201
+ * @param functionName Name of the function whose ABI we want
202
+ * @returns Function ABI as a single JSON string
203
+ */
204
+ protected static _getABIFromContract(contract: ethers.Contract, functionName: string): string;
205
+ /**
206
+ * Gets the pool index (in exchangeInfo) corresponding to a given symbol.
207
+ * @param symbol Symbol of the form ETH-USD-MATIC
208
+ * @returns Pool index
209
+ */
210
+ getPoolIndexFromSymbol(symbol: string): number;
211
+ getMarginTokenFromSymbol(symbol: string): string | undefined;
212
+ getABI(contract: string): ethers.ContractInterface | undefined;
213
+ /**
214
+ * Performs basic validity checks on a given order
215
+ * @param order Order struct
216
+ * @param traderAccount Trader account
217
+ * @param perpStaticInfo Symbol to perpetual info map
218
+ */
219
+ protected static checkOrder(order: Order, perpStaticInfo: Map<string, PerpetualStaticInfo>): void;
220
+ }