@d8x/perpetuals-sdk 2.1.0-alpha2 → 2.1.1-alpha2
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/dist/cjs/abi/IPerpetualManager.json +30 -1
- package/dist/cjs/accountTrade.d.ts +3 -3
- package/dist/cjs/accountTrade.js +1 -1
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.js +7 -7
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/config/defaultConfig.json +0 -12
- package/dist/cjs/config/priceFeedConfig.json +1 -1
- package/dist/cjs/constants.d.ts +0 -1
- package/dist/cjs/constants.js +2 -3
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts/IPerpetualManager.d.ts +20 -4
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +23 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +30 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +16 -1
- package/dist/cjs/d8XMath.js +28 -5
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.js +2 -2
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +3 -3
- package/dist/cjs/marketData.js +38 -16
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +3 -2
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +9 -8
- package/dist/cjs/perpetualDataHandler.js +17 -6
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/polyMktsPxFeed.d.ts +1 -1
- package/dist/cjs/polyMktsPxFeed.js +15 -4
- package/dist/cjs/polyMktsPxFeed.js.map +1 -1
- package/dist/cjs/priceFeeds.js +2 -2
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/writeAccessHandler.js +1 -1
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/abi/IPerpetualManager.json +30 -1
- package/dist/esm/accountTrade.d.ts +3 -3
- package/dist/esm/accountTrade.js +1 -1
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.js +7 -7
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/config/defaultConfig.json +0 -12
- package/dist/esm/config/priceFeedConfig.json +1 -1
- package/dist/esm/constants.d.ts +0 -1
- package/dist/esm/constants.js +1 -2
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/contracts/IPerpetualManager.d.ts +20 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +23 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +30 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +16 -1
- package/dist/esm/d8XMath.js +26 -4
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.js +2 -2
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +3 -3
- package/dist/esm/marketData.js +39 -17
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +3 -2
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +9 -8
- package/dist/esm/perpetualDataHandler.js +19 -8
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/polyMktsPxFeed.d.ts +1 -1
- package/dist/esm/polyMktsPxFeed.js +15 -4
- package/dist/esm/polyMktsPxFeed.js.map +1 -1
- package/dist/esm/priceFeeds.js +2 -2
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/writeAccessHandler.js +3 -3
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/doc/brokerTool.md +3 -1
- package/doc/d8x-perpetuals-sdk.md +804 -132
- package/doc/marketData.md +813 -0
- package/doc/perpetualDataHandler.md +76 -7
- package/package.json +1 -1
- package/src/abi/IPerpetualManager.json +30 -1
- package/src/accountTrade.ts +3 -3
- package/src/brokerTool.ts +7 -7
- package/src/config/defaultConfig.json +0 -13
- package/src/config/priceFeedConfig.json +1 -1
- package/src/constants.ts +1 -2
- package/src/contracts/IPerpetualManager.ts +33 -3
- package/src/contracts/factories/IPerpetualManager__factory.ts +30 -1
- package/src/d8XMath.ts +27 -4
- package/src/liquidatorTool.ts +2 -2
- package/src/marketData.ts +41 -20
- package/src/nodeSDKTypes.ts +3 -2
- package/src/perpetualDataHandler.ts +26 -15
- package/src/polyMktsPxFeed.ts +15 -4
- package/src/priceFeeds.ts +2 -2
- package/src/version.ts +1 -1
- package/src/writeAccessHandler.ts +2 -2
- package/src/abi-zkevm/IPerpetualManager.json +0 -5366
|
@@ -10,6 +10,7 @@ common data and chain operations.</p>
|
|
|
10
10
|
* [new PerpetualDataHandler(config)](#new_PerpetualDataHandler_new)
|
|
11
11
|
* _instance_
|
|
12
12
|
* [.getOrderBookContract(symbol)](#PerpetualDataHandler+getOrderBookContract) ⇒
|
|
13
|
+
* [.getOrderBookAddress(symbol)](#PerpetualDataHandler+getOrderBookAddress) ⇒
|
|
13
14
|
* [.getPerpetuals(ids, overrides)](#PerpetualDataHandler+getPerpetuals) ⇒
|
|
14
15
|
* [.getLiquidityPools(fromIdx, toIdx, overrides)](#PerpetualDataHandler+getLiquidityPools) ⇒
|
|
15
16
|
* [._fillSymbolMaps()](#PerpetualDataHandler+_fillSymbolMaps)
|
|
@@ -34,13 +35,16 @@ common data and chain operations.</p>
|
|
|
34
35
|
* [.getMarginTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getMarginTokenDecimalsFromSymbol) ⇒
|
|
35
36
|
* [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
|
|
36
37
|
* [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
|
|
38
|
+
* [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
|
|
37
39
|
* _static_
|
|
38
40
|
* [.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList)](#PerpetualDataHandler.getPerpetualStaticInfo) ⇒
|
|
39
41
|
* [.nestedIDsToChunks(chunkSize, nestedIDs)](#PerpetualDataHandler.nestedIDsToChunks) ⇒ <code>Array.<Array.<number>></code>
|
|
40
42
|
* [._getLiquidityPools(ids, _proxyContract, _symbolList, overrides)](#PerpetualDataHandler._getLiquidityPools) ⇒
|
|
41
43
|
* [._getPerpetuals(ids, _proxyContract, _symbolList, overrides)](#PerpetualDataHandler._getPerpetuals) ⇒
|
|
42
|
-
* [.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract,
|
|
43
|
-
* [.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract,
|
|
44
|
+
* [.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxInfo, overrides)](#PerpetualDataHandler.getMarginAccount) ⇒
|
|
45
|
+
* [.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxInfo, overrides)](#PerpetualDataHandler.getMarginAccounts) ⇒
|
|
46
|
+
* [._queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, isPredMkt, overrides)](#PerpetualDataHandler._queryPerpetualMarkPrice) ⇒
|
|
47
|
+
* [._oiAndAmmPosToLongShort(oi, ammPos)](#PerpetualDataHandler._oiAndAmmPosToLongShort) ⇒
|
|
44
48
|
* [._calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo)](#PerpetualDataHandler._calculateLiquidationPrice) ⇒
|
|
45
49
|
* [.symbolToPerpetualId(symbol, symbolToPerpStaticInfo)](#PerpetualDataHandler.symbolToPerpetualId) ⇒
|
|
46
50
|
* [.toSmartContractOrder(order, traderAddr, symbolToPerpetualMap)](#PerpetualDataHandler.toSmartContractOrder) ⇒
|
|
@@ -56,6 +60,7 @@ common data and chain operations.</p>
|
|
|
56
60
|
* [._getABIFromContract(contract, functionName)](#PerpetualDataHandler._getABIFromContract) ⇒
|
|
57
61
|
* [.checkOrder(order, traderAccount, perpStaticInfo)](#PerpetualDataHandler.checkOrder)
|
|
58
62
|
* [.fromClientOrderToTypeSafeOrder(order)](#PerpetualDataHandler.fromClientOrderToTypeSafeOrder) ⇒
|
|
63
|
+
* [.isPredictionMarketStatic(staticInfo)](#PerpetualDataHandler.isPredictionMarketStatic) ⇒
|
|
59
64
|
|
|
60
65
|
<a name="new_PerpetualDataHandler_new"></a>
|
|
61
66
|
|
|
@@ -79,6 +84,18 @@ common data and chain operations.</p>
|
|
|
79
84
|
| --- | --- |
|
|
80
85
|
| symbol | <p>symbol of the form ETH-USD-MATIC</p> |
|
|
81
86
|
|
|
87
|
+
<a name="PerpetualDataHandler+getOrderBookAddress"></a>
|
|
88
|
+
|
|
89
|
+
### perpetualDataHandler.getOrderBookAddress(symbol) ⇒
|
|
90
|
+
<p>Returns the order-book contract for the symbol if found or fails</p>
|
|
91
|
+
|
|
92
|
+
**Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
93
|
+
**Returns**: <p>order book contract for the perpetual</p>
|
|
94
|
+
|
|
95
|
+
| Param | Description |
|
|
96
|
+
| --- | --- |
|
|
97
|
+
| symbol | <p>symbol of the form ETH-USD-MATIC</p> |
|
|
98
|
+
|
|
82
99
|
<a name="PerpetualDataHandler+getPerpetuals"></a>
|
|
83
100
|
|
|
84
101
|
### perpetualDataHandler.getPerpetuals(ids, overrides) ⇒
|
|
@@ -412,6 +429,18 @@ main();
|
|
|
412
429
|
| --- | --- |
|
|
413
430
|
| contract | <p>name of contract: proxy|lob|sharetoken</p> |
|
|
414
431
|
|
|
432
|
+
<a name="PerpetualDataHandler+isPredictionMarket"></a>
|
|
433
|
+
|
|
434
|
+
### perpetualDataHandler.isPredictionMarket(symbol) ⇒
|
|
435
|
+
<p>Determines whether a given perpetual represents a prediction market</p>
|
|
436
|
+
|
|
437
|
+
**Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
438
|
+
**Returns**: <p>True if this is a prediction market</p>
|
|
439
|
+
|
|
440
|
+
| Param | Description |
|
|
441
|
+
| --- | --- |
|
|
442
|
+
| symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
|
|
443
|
+
|
|
415
444
|
<a name="PerpetualDataHandler.getPerpetualStaticInfo"></a>
|
|
416
445
|
|
|
417
446
|
### PerpetualDataHandler.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList) ⇒
|
|
@@ -471,7 +500,7 @@ main();
|
|
|
471
500
|
|
|
472
501
|
<a name="PerpetualDataHandler.getMarginAccount"></a>
|
|
473
502
|
|
|
474
|
-
### PerpetualDataHandler.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract,
|
|
503
|
+
### PerpetualDataHandler.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxInfo, overrides) ⇒
|
|
475
504
|
<p>Get trader state from the blockchain and parse into a human-readable margin account</p>
|
|
476
505
|
|
|
477
506
|
**Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
@@ -483,12 +512,12 @@ main();
|
|
|
483
512
|
| symbol | <p>Perpetual symbol</p> |
|
|
484
513
|
| symbolToPerpStaticInfo | <p>Symbol to perp static info mapping</p> |
|
|
485
514
|
| _proxyContract | <p>Proxy contract instance</p> |
|
|
486
|
-
|
|
|
515
|
+
| _pxInfo | <p>index price info</p> |
|
|
487
516
|
| overrides | <p>Optional overrides for eth_call</p> |
|
|
488
517
|
|
|
489
518
|
<a name="PerpetualDataHandler.getMarginAccounts"></a>
|
|
490
519
|
|
|
491
|
-
### PerpetualDataHandler.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract,
|
|
520
|
+
### PerpetualDataHandler.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxInfo, overrides) ⇒
|
|
492
521
|
<p>Get trader states from the blockchain and parse into a list of human-readable margin accounts</p>
|
|
493
522
|
|
|
494
523
|
**Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
@@ -501,9 +530,37 @@ main();
|
|
|
501
530
|
| symbolToPerpStaticInfo | <p>Symbol to perp static info mapping</p> |
|
|
502
531
|
| _multicall | <p>Multicall3 contract instance</p> |
|
|
503
532
|
| _proxyContract | <p>Proxy contract instance</p> |
|
|
504
|
-
|
|
|
533
|
+
| _pxInfo | <p>List of price info</p> |
|
|
505
534
|
| overrides | <p>Optional eth_call overrides</p> |
|
|
506
535
|
|
|
536
|
+
<a name="PerpetualDataHandler._queryPerpetualMarkPrice"></a>
|
|
537
|
+
|
|
538
|
+
### PerpetualDataHandler.\_queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, isPredMkt, overrides) ⇒
|
|
539
|
+
**Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
540
|
+
**Returns**: <p>mark price</p>
|
|
541
|
+
|
|
542
|
+
| Param | Description |
|
|
543
|
+
| --- | --- |
|
|
544
|
+
| symbol | <p>perpetual symbol of the form BTC-USDC-USDC</p> |
|
|
545
|
+
| symbolToPerpStaticInfo | <p>mapping</p> |
|
|
546
|
+
| _proxyContract | <p>contract instance</p> |
|
|
547
|
+
| indexPrices | <p>IdxPriceInfo</p> |
|
|
548
|
+
| isPredMkt | <p>true if prediction market perpetual</p> |
|
|
549
|
+
| overrides | |
|
|
550
|
+
|
|
551
|
+
<a name="PerpetualDataHandler._oiAndAmmPosToLongShort"></a>
|
|
552
|
+
|
|
553
|
+
### PerpetualDataHandler.\_oiAndAmmPosToLongShort(oi, ammPos) ⇒
|
|
554
|
+
<p>Calculate long and short exposures from open interest and long/short</p>
|
|
555
|
+
|
|
556
|
+
**Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
557
|
+
**Returns**: <p>long, short exposure</p>
|
|
558
|
+
|
|
559
|
+
| Param | Description |
|
|
560
|
+
| --- | --- |
|
|
561
|
+
| oi | <p>open interest</p> |
|
|
562
|
+
| ammPos | <p>amm net exposure</p> |
|
|
563
|
+
|
|
507
564
|
<a name="PerpetualDataHandler._calculateLiquidationPrice"></a>
|
|
508
565
|
|
|
509
566
|
### PerpetualDataHandler.\_calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo) ⇒
|
|
@@ -674,7 +731,7 @@ main();
|
|
|
674
731
|
<a name="PerpetualDataHandler._getABIFromContract"></a>
|
|
675
732
|
|
|
676
733
|
### PerpetualDataHandler.\_getABIFromContract(contract, functionName) ⇒
|
|
677
|
-
<p>Get the ABI of a function in a given contract
|
|
734
|
+
<p>Get the ABI of a function in a given contract. Undefined if it doesn't exist.</p>
|
|
678
735
|
|
|
679
736
|
**Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
680
737
|
**Returns**: <p>Function ABI as a single JSON string</p>
|
|
@@ -709,3 +766,15 @@ main();
|
|
|
709
766
|
| --- | --- |
|
|
710
767
|
| order | <p>Client order</p> |
|
|
711
768
|
|
|
769
|
+
<a name="PerpetualDataHandler.isPredictionMarketStatic"></a>
|
|
770
|
+
|
|
771
|
+
### PerpetualDataHandler.isPredictionMarketStatic(staticInfo) ⇒
|
|
772
|
+
<p>Determines whether a given perpetual represents a prediction market</p>
|
|
773
|
+
|
|
774
|
+
**Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
|
|
775
|
+
**Returns**: <p>True if this is a prediction market</p>
|
|
776
|
+
|
|
777
|
+
| Param | Description |
|
|
778
|
+
| --- | --- |
|
|
779
|
+
| staticInfo | <p>Perpetual static info</p> |
|
|
780
|
+
|
package/package.json
CHANGED
|
@@ -1095,7 +1095,7 @@
|
|
|
1095
1095
|
{
|
|
1096
1096
|
"indexed": false,
|
|
1097
1097
|
"internalType": "int128",
|
|
1098
|
-
"name": "
|
|
1098
|
+
"name": "fMarkIndexPrice",
|
|
1099
1099
|
"type": "int128"
|
|
1100
1100
|
}
|
|
1101
1101
|
],
|
|
@@ -2301,6 +2301,35 @@
|
|
|
2301
2301
|
"stateMutability": "pure",
|
|
2302
2302
|
"type": "function"
|
|
2303
2303
|
},
|
|
2304
|
+
{
|
|
2305
|
+
"inputs": [
|
|
2306
|
+
{
|
|
2307
|
+
"internalType": "uint24",
|
|
2308
|
+
"name": "_perpetualId",
|
|
2309
|
+
"type": "uint24"
|
|
2310
|
+
},
|
|
2311
|
+
{
|
|
2312
|
+
"internalType": "int128",
|
|
2313
|
+
"name": "_fAmount",
|
|
2314
|
+
"type": "int128"
|
|
2315
|
+
},
|
|
2316
|
+
{
|
|
2317
|
+
"internalType": "uint16",
|
|
2318
|
+
"name": "_leverageTDR",
|
|
2319
|
+
"type": "uint16"
|
|
2320
|
+
}
|
|
2321
|
+
],
|
|
2322
|
+
"name": "getExchangeFeePrdMkts",
|
|
2323
|
+
"outputs": [
|
|
2324
|
+
{
|
|
2325
|
+
"internalType": "uint16",
|
|
2326
|
+
"name": "",
|
|
2327
|
+
"type": "uint16"
|
|
2328
|
+
}
|
|
2329
|
+
],
|
|
2330
|
+
"stateMutability": "view",
|
|
2331
|
+
"type": "function"
|
|
2332
|
+
},
|
|
2304
2333
|
{
|
|
2305
2334
|
"inputs": [
|
|
2306
2335
|
{
|
package/src/accountTrade.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Buffer } from "buffer";
|
|
2
2
|
import { BigNumberish, Contract, ContractTransaction, ContractTransactionResponse, Overrides, Signer } from "ethers";
|
|
3
3
|
import { ZERO_ADDRESS } from "./constants";
|
|
4
|
-
import { LimitOrderBook } from "./contracts";
|
|
4
|
+
import { IPerpetualManager, LimitOrderBook } from "./contracts";
|
|
5
5
|
import { PayableOverrides } from "./contracts/common";
|
|
6
6
|
import { ABK64x64ToFloat, floatToABK64x64 } from "./d8XMath";
|
|
7
7
|
import MarketData from "./marketData";
|
|
@@ -176,7 +176,7 @@ export default class AccountTrade extends WriteAccessHandler {
|
|
|
176
176
|
}
|
|
177
177
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
178
178
|
let feeTbps = await this.proxyContract.queryExchangeFee(poolId, this.traderAddr, brokerAddr, overrides || {});
|
|
179
|
-
return feeTbps / 100_000;
|
|
179
|
+
return Number(feeTbps) / 100_000;
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
/**
|
|
@@ -254,7 +254,7 @@ export default class AccountTrade extends WriteAccessHandler {
|
|
|
254
254
|
order: Order,
|
|
255
255
|
traderAddr: string,
|
|
256
256
|
symbolToPerpetualMap: Map<string, PerpetualStaticInfo>,
|
|
257
|
-
proxyContract:
|
|
257
|
+
proxyContract: IPerpetualManager,
|
|
258
258
|
orderBookContract: LimitOrderBook,
|
|
259
259
|
chainId: BigNumberish,
|
|
260
260
|
signer: Signer,
|
package/src/brokerTool.ts
CHANGED
|
@@ -68,7 +68,7 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
68
68
|
}
|
|
69
69
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
70
70
|
let feeTbps = await this.proxyContract.getBrokerInducedFee(poolId, this.traderAddr, overrides || {});
|
|
71
|
-
let fee = feeTbps / 100_000;
|
|
71
|
+
let fee = Number(feeTbps) / 100_000;
|
|
72
72
|
if (fee == 0.65535) {
|
|
73
73
|
return undefined;
|
|
74
74
|
}
|
|
@@ -115,7 +115,7 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
115
115
|
brokerDesignation = lots;
|
|
116
116
|
}
|
|
117
117
|
let feeTbps = await this.proxyContract.getFeeForBrokerDesignation(brokerDesignation, overrides || {});
|
|
118
|
-
return feeTbps / 100_000;
|
|
118
|
+
return Number(feeTbps) / 100_000;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
/**
|
|
@@ -146,7 +146,7 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
146
146
|
}
|
|
147
147
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
148
148
|
let feeTbps = await this.proxyContract.getFeeForBrokerVolume(poolId, this.traderAddr, overrides || {});
|
|
149
|
-
return feeTbps / 100_000;
|
|
149
|
+
return Number(feeTbps) / 100_000;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
/**
|
|
@@ -179,7 +179,7 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
179
179
|
brokerAddr = this.traderAddr;
|
|
180
180
|
}
|
|
181
181
|
let feeTbps = await this.proxyContract.getFeeForBrokerStake(brokerAddr, overrides || {});
|
|
182
|
-
return feeTbps / 100_000;
|
|
182
|
+
return Number(feeTbps) / 100_000;
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
/**
|
|
@@ -231,12 +231,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
231
231
|
const lvgTdr = order.leverage == undefined ? 0 : Math.round(100 * order.leverage);
|
|
232
232
|
const feeTbps = await this.proxyContract.getExchangeFeePrdMkts(id, fAmount, lvgTdr);
|
|
233
233
|
|
|
234
|
-
return feeTbps / 100_000;
|
|
234
|
+
return Number(feeTbps) / 100_000;
|
|
235
235
|
}
|
|
236
236
|
// regular markets
|
|
237
237
|
let scOrder = AccountTrade.toSmartContractOrder(order, traderAddr, this.symbolToPerpStaticInfo);
|
|
238
238
|
let feeTbps = await this.proxyContract.determineExchangeFee(scOrder, overrides || {});
|
|
239
|
-
return feeTbps / 100_000;
|
|
239
|
+
return Number(feeTbps) / 100_000;
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
// Volume
|
|
@@ -331,7 +331,7 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
331
331
|
}
|
|
332
332
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
333
333
|
let designation = await this.proxyContract.getBrokerDesignation(poolId, this.traderAddr, overrides || {});
|
|
334
|
-
return designation;
|
|
334
|
+
return Number(designation);
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
/**
|
|
@@ -1,17 +1,4 @@
|
|
|
1
1
|
[
|
|
2
|
-
{
|
|
3
|
-
"name": "zkevm",
|
|
4
|
-
"chainId": 1101,
|
|
5
|
-
"version": 1,
|
|
6
|
-
"proxyAddr": "0xaB7794EcD2c8e9Decc6B577864b40eBf9204720f",
|
|
7
|
-
"nodeURL": "https://zkevm-rpc.com",
|
|
8
|
-
"priceFeedConfigNetwork": "mainnet",
|
|
9
|
-
"shareTokenABILocation": "./abi/ShareToken.json",
|
|
10
|
-
"proxyABILocation": "./abi-zkevm/IPerpetualManager.json",
|
|
11
|
-
"limitOrderBookFactoryABILocation": "./abi/LimitOrderBookFactory.json",
|
|
12
|
-
"limitOrderBookABILocation": "./abi/LimitOrderBook.json"
|
|
13
|
-
},
|
|
14
|
-
|
|
15
2
|
{
|
|
16
3
|
"name": "x1",
|
|
17
4
|
"chainId": 195,
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
}
|
|
247
247
|
],
|
|
248
248
|
"endpoints": [
|
|
249
|
-
{ "type": "odin", "endpoints": ["https://hermes.pyth.network"], "writeEndpoints": ["https://odin.d8x.xyz"] },
|
|
249
|
+
{ "type": "odin", "endpoints": ["https://hermes.pyth.network"], "writeEndpoints": ["https://odin-poly.d8x.xyz"] },
|
|
250
250
|
{ "type": "polymarket", "endpoints": [""], "writeEndpoints": ["https://odin-poly.d8x.xyz"] }
|
|
251
251
|
]
|
|
252
252
|
}
|
package/src/constants.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { NodeSDKConfig } from "./nodeSDKTypes";
|
|
|
4
4
|
export const ERC20_ABI = require("./abi/ERC20.json");
|
|
5
5
|
export const MOCK_TOKEN_SWAP_ABI = require("./abi/MockTokenSwap.json");
|
|
6
6
|
export const PROXY_ABI = require("./abi/IPerpetualManager.json");
|
|
7
|
-
export const PROXY_ZKEVM_ABI = require("./abi-zkevm/IPerpetualManager.json");
|
|
8
7
|
export const LOB_FACTORY_ABI = require("./abi/LimitOrderBookFactory.json");
|
|
9
8
|
export const LOB_ABI = require("./abi/LimitOrderBook.json");
|
|
10
9
|
export const SHARE_TOKEN_ABI = require("./abi/ShareToken.json");
|
|
@@ -58,7 +57,7 @@ export const DEFAULT_CONFIG_TESTNET_NAME = "testnet";
|
|
|
58
57
|
|
|
59
58
|
let defaultConfigs = require("./config/defaultConfig.json") as NodeSDKConfig[];
|
|
60
59
|
defaultConfigs.map((config) => {
|
|
61
|
-
config.proxyABI =
|
|
60
|
+
config.proxyABI = PROXY_ABI;
|
|
62
61
|
config.lobABI = LOB_ABI;
|
|
63
62
|
config.lobFactoryABI = LOB_FACTORY_ABI;
|
|
64
63
|
config.shareTokenABI = SHARE_TOKEN_ABI;
|
|
@@ -459,6 +459,7 @@ export interface IPerpetualManagerInterface extends Interface {
|
|
|
459
459
|
| "getCurrentBrokerVolume"
|
|
460
460
|
| "getCurrentTraderVolume"
|
|
461
461
|
| "getDepositAmountForLvgPosition"
|
|
462
|
+
| "getExchangeFeePrdMkts"
|
|
462
463
|
| "getFeeForBrokerDesignation"
|
|
463
464
|
| "getFeeForBrokerStake"
|
|
464
465
|
| "getFeeForBrokerVolume"
|
|
@@ -787,6 +788,10 @@ export interface IPerpetualManagerInterface extends Interface {
|
|
|
787
788
|
BigNumberish
|
|
788
789
|
]
|
|
789
790
|
): string;
|
|
791
|
+
encodeFunctionData(
|
|
792
|
+
functionFragment: "getExchangeFeePrdMkts",
|
|
793
|
+
values: [BigNumberish, BigNumberish, BigNumberish]
|
|
794
|
+
): string;
|
|
790
795
|
encodeFunctionData(
|
|
791
796
|
functionFragment: "getFeeForBrokerDesignation",
|
|
792
797
|
values: [BigNumberish]
|
|
@@ -1358,6 +1363,10 @@ export interface IPerpetualManagerInterface extends Interface {
|
|
|
1358
1363
|
functionFragment: "getDepositAmountForLvgPosition",
|
|
1359
1364
|
data: BytesLike
|
|
1360
1365
|
): Result;
|
|
1366
|
+
decodeFunctionResult(
|
|
1367
|
+
functionFragment: "getExchangeFeePrdMkts",
|
|
1368
|
+
data: BytesLike
|
|
1369
|
+
): Result;
|
|
1361
1370
|
decodeFunctionResult(
|
|
1362
1371
|
functionFragment: "getFeeForBrokerDesignation",
|
|
1363
1372
|
data: BytesLike
|
|
@@ -2544,19 +2553,19 @@ export namespace UpdateMarkPriceEvent {
|
|
|
2544
2553
|
perpetualId: BigNumberish,
|
|
2545
2554
|
fMidPricePremium: BigNumberish,
|
|
2546
2555
|
fMarkPricePremium: BigNumberish,
|
|
2547
|
-
|
|
2556
|
+
fMarkIndexPrice: BigNumberish
|
|
2548
2557
|
];
|
|
2549
2558
|
export type OutputTuple = [
|
|
2550
2559
|
perpetualId: bigint,
|
|
2551
2560
|
fMidPricePremium: bigint,
|
|
2552
2561
|
fMarkPricePremium: bigint,
|
|
2553
|
-
|
|
2562
|
+
fMarkIndexPrice: bigint
|
|
2554
2563
|
];
|
|
2555
2564
|
export interface OutputObject {
|
|
2556
2565
|
perpetualId: bigint;
|
|
2557
2566
|
fMidPricePremium: bigint;
|
|
2558
2567
|
fMarkPricePremium: bigint;
|
|
2559
|
-
|
|
2568
|
+
fMarkIndexPrice: bigint;
|
|
2560
2569
|
}
|
|
2561
2570
|
export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
|
|
2562
2571
|
export type Filter = TypedDeferredTopicFilter<Event>;
|
|
@@ -2871,6 +2880,16 @@ export interface IPerpetualManager extends BaseContract {
|
|
|
2871
2880
|
"view"
|
|
2872
2881
|
>;
|
|
2873
2882
|
|
|
2883
|
+
getExchangeFeePrdMkts: TypedContractMethod<
|
|
2884
|
+
[
|
|
2885
|
+
_perpetualId: BigNumberish,
|
|
2886
|
+
_fAmount: BigNumberish,
|
|
2887
|
+
_leverageTDR: BigNumberish
|
|
2888
|
+
],
|
|
2889
|
+
[bigint],
|
|
2890
|
+
"view"
|
|
2891
|
+
>;
|
|
2892
|
+
|
|
2874
2893
|
getFeeForBrokerDesignation: TypedContractMethod<
|
|
2875
2894
|
[_brokerDesignation: BigNumberish],
|
|
2876
2895
|
[bigint],
|
|
@@ -3810,6 +3829,17 @@ export interface IPerpetualManager extends BaseContract {
|
|
|
3810
3829
|
[bigint],
|
|
3811
3830
|
"view"
|
|
3812
3831
|
>;
|
|
3832
|
+
getFunction(
|
|
3833
|
+
nameOrSignature: "getExchangeFeePrdMkts"
|
|
3834
|
+
): TypedContractMethod<
|
|
3835
|
+
[
|
|
3836
|
+
_perpetualId: BigNumberish,
|
|
3837
|
+
_fAmount: BigNumberish,
|
|
3838
|
+
_leverageTDR: BigNumberish
|
|
3839
|
+
],
|
|
3840
|
+
[bigint],
|
|
3841
|
+
"view"
|
|
3842
|
+
>;
|
|
3813
3843
|
getFunction(
|
|
3814
3844
|
nameOrSignature: "getFeeForBrokerDesignation"
|
|
3815
3845
|
): TypedContractMethod<[_brokerDesignation: BigNumberish], [bigint], "view">;
|
|
@@ -1105,7 +1105,7 @@ const _abi = [
|
|
|
1105
1105
|
{
|
|
1106
1106
|
indexed: false,
|
|
1107
1107
|
internalType: "int128",
|
|
1108
|
-
name: "
|
|
1108
|
+
name: "fMarkIndexPrice",
|
|
1109
1109
|
type: "int128",
|
|
1110
1110
|
},
|
|
1111
1111
|
],
|
|
@@ -2311,6 +2311,35 @@ const _abi = [
|
|
|
2311
2311
|
stateMutability: "pure",
|
|
2312
2312
|
type: "function",
|
|
2313
2313
|
},
|
|
2314
|
+
{
|
|
2315
|
+
inputs: [
|
|
2316
|
+
{
|
|
2317
|
+
internalType: "uint24",
|
|
2318
|
+
name: "_perpetualId",
|
|
2319
|
+
type: "uint24",
|
|
2320
|
+
},
|
|
2321
|
+
{
|
|
2322
|
+
internalType: "int128",
|
|
2323
|
+
name: "_fAmount",
|
|
2324
|
+
type: "int128",
|
|
2325
|
+
},
|
|
2326
|
+
{
|
|
2327
|
+
internalType: "uint16",
|
|
2328
|
+
name: "_leverageTDR",
|
|
2329
|
+
type: "uint16",
|
|
2330
|
+
},
|
|
2331
|
+
],
|
|
2332
|
+
name: "getExchangeFeePrdMkts",
|
|
2333
|
+
outputs: [
|
|
2334
|
+
{
|
|
2335
|
+
internalType: "uint16",
|
|
2336
|
+
name: "",
|
|
2337
|
+
type: "uint16",
|
|
2338
|
+
},
|
|
2339
|
+
],
|
|
2340
|
+
stateMutability: "view",
|
|
2341
|
+
type: "function",
|
|
2342
|
+
},
|
|
2314
2343
|
{
|
|
2315
2344
|
inputs: [
|
|
2316
2345
|
{
|
package/src/d8XMath.ts
CHANGED
|
@@ -464,15 +464,38 @@ function pmMarginThresh(pos: number, s2: number, s3: number, m: number | undefin
|
|
|
464
464
|
return (Math.abs(pos) * p * tau) / s3;
|
|
465
465
|
}
|
|
466
466
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
467
|
+
/**
|
|
468
|
+
* Maintenance margin rate for prediction markets.
|
|
469
|
+
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
470
|
+
* @param sm mark-price (=1+p)
|
|
471
|
+
* @param m max margin rate from fInitialMarginRate
|
|
472
|
+
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3;
|
|
473
|
+
*/
|
|
474
|
+
export function pmMaintenanceMarginRate(posSign: number, sm: number, m: number | undefined = 0.18): number {
|
|
475
|
+
let p = sm - 1;
|
|
476
|
+
if (posSign < 0) {
|
|
470
477
|
p = 1 - p;
|
|
471
478
|
}
|
|
472
479
|
const h = entropy(p);
|
|
473
480
|
return m + (0.4 - m) * h;
|
|
474
481
|
}
|
|
475
482
|
|
|
483
|
+
/**
|
|
484
|
+
* Maintenance margin rate for prediction markets.
|
|
485
|
+
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
486
|
+
* @param sm mark-price (=1+p)
|
|
487
|
+
* @param m max margin rate from fMaintenanceMarginRate
|
|
488
|
+
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3;
|
|
489
|
+
*/
|
|
490
|
+
export function pmInitialMarginRate(posSign: number, sm: number, m: number | undefined = 0.2): number {
|
|
491
|
+
let p = sm - 1;
|
|
492
|
+
if (posSign < 0) {
|
|
493
|
+
p = 1 - p;
|
|
494
|
+
}
|
|
495
|
+
const h = entropy(p);
|
|
496
|
+
return m + (0.5 - m) * h;
|
|
497
|
+
}
|
|
498
|
+
|
|
476
499
|
/**
|
|
477
500
|
* Calculate the expected loss for a prediction market trade used for
|
|
478
501
|
* prediction market fees
|
|
@@ -593,7 +616,7 @@ export function pmFindLiquidationPrice(
|
|
|
593
616
|
* @param S3
|
|
594
617
|
* @param totLong
|
|
595
618
|
* @param totShort
|
|
596
|
-
* @returns
|
|
619
|
+
* @returns excess margin as defined above
|
|
597
620
|
*/
|
|
598
621
|
function excessMargin(
|
|
599
622
|
tradeAmt: number,
|
package/src/liquidatorTool.ts
CHANGED
|
@@ -223,7 +223,7 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
223
223
|
|
|
224
224
|
indexPrices = [
|
|
225
225
|
obj.ema, // ema (pred mkts) or s2
|
|
226
|
-
obj.s3, // s3
|
|
226
|
+
obj.s3 ?? 0, // s3
|
|
227
227
|
];
|
|
228
228
|
}
|
|
229
229
|
const fIdxPx = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x)) as [
|
|
@@ -231,7 +231,7 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
231
231
|
bigint
|
|
232
232
|
];
|
|
233
233
|
let traderState = await this.proxyContract.getTraderState(perpID, traderAddr, fIdxPx, overrides || {});
|
|
234
|
-
if (traderState[idx_notional]
|
|
234
|
+
if (traderState[idx_notional] === 0n) {
|
|
235
235
|
// trader does not have open position
|
|
236
236
|
return true;
|
|
237
237
|
}
|