@d8x/perpetuals-sdk 1.3.7 → 2.0.1-alpha
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/accountTrade.d.ts +9 -9
- package/dist/cjs/accountTrade.js +19 -17
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.d.ts +11 -12
- package/dist/cjs/brokerTool.js +7 -8
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/config/priceFeedConfig.json +16 -2
- package/dist/cjs/config/symbolList.json +2 -1
- package/dist/cjs/constants.d.ts +12 -12
- package/dist/cjs/constants.js +14 -14
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts/ERC20.d.ts +146 -171
- package/dist/cjs/contracts/IPerpetualManager.d.ts +2534 -2225
- package/dist/cjs/contracts/IPyth.d.ts +181 -184
- package/dist/cjs/contracts/LimitOrderBook.d.ts +373 -401
- package/dist/cjs/contracts/LimitOrderBookBeacon.d.ts +53 -104
- package/dist/cjs/contracts/LimitOrderBookFactory.d.ts +129 -185
- package/dist/cjs/contracts/MockTokenSwap.d.ts +109 -169
- package/dist/cjs/contracts/Multicall3.d.ts +147 -211
- package/dist/cjs/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
- package/dist/cjs/contracts/OracleFactory.d.ts +258 -238
- package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +1099 -891
- package/dist/cjs/contracts/RedStoneAbi.d.ts +369 -488
- package/dist/cjs/contracts/ShareToken.d.ts +232 -285
- package/dist/cjs/contracts/common.d.ts +40 -11
- package/dist/cjs/contracts/factories/ERC20__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/ERC20__factory.js +3 -3
- package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +3 -3
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPyth__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/IPyth__factory.js +3 -3
- package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +3 -3
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/Multicall3__factory.d.ts +11 -9
- package/dist/cjs/contracts/factories/Multicall3__factory.js +7 -10
- package/dist/cjs/contracts/factories/Multicall3__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js +3 -3
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/OracleFactory__factory.js +3 -3
- package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +3 -3
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.js +3 -3
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/ShareToken__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/ShareToken__factory.js +3 -3
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +28 -16
- package/dist/cjs/d8XMath.js +70 -50
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.d.ts +8 -8
- package/dist/cjs/liquidatorTool.js +5 -7
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.d.ts +4 -5
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +27 -28
- package/dist/cjs/marketData.js +65 -69
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +35 -37
- package/dist/cjs/onChainPxFeed.d.ts +2 -2
- package/dist/cjs/onChainPxFeed.js +3 -3
- package/dist/cjs/onChainPxFeed.js.map +1 -1
- package/dist/cjs/onChainPxFeedAngle.d.ts +2 -2
- package/dist/cjs/onChainPxFeedAngle.js +4 -5
- package/dist/cjs/onChainPxFeedAngle.js.map +1 -1
- package/dist/cjs/onChainPxFeedRedStone.js +2 -2
- package/dist/cjs/onChainPxFeedRedStone.js.map +1 -1
- package/dist/cjs/orderExecutorTool.d.ts +7 -9
- package/dist/cjs/orderExecutorTool.js +52 -62
- package/dist/cjs/orderExecutorTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +44 -35
- package/dist/cjs/perpetualDataHandler.js +194 -170
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.d.ts +4 -5
- package/dist/cjs/perpetualEventHandler.js +2 -2
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/polyMktsPxFeed.d.ts +14 -0
- package/dist/cjs/polyMktsPxFeed.js +59 -0
- package/dist/cjs/polyMktsPxFeed.js.map +1 -0
- package/dist/cjs/priceFeeds.d.ts +2 -0
- package/dist/cjs/priceFeeds.js +44 -9
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/referralCodeSigner.d.ts +1 -1
- package/dist/cjs/referralCodeSigner.js +12 -16
- package/dist/cjs/referralCodeSigner.js.map +1 -1
- package/dist/cjs/traderDigests.d.ts +2 -1
- package/dist/cjs/traderDigests.js +9 -11
- package/dist/cjs/traderDigests.js.map +1 -1
- package/dist/cjs/traderInterface.d.ts +8 -9
- package/dist/cjs/traderInterface.js +40 -23
- package/dist/cjs/traderInterface.js.map +1 -1
- package/dist/cjs/utils.d.ts +2 -3
- package/dist/cjs/utils.js +1 -2
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/writeAccessHandler.d.ts +7 -9
- package/dist/cjs/writeAccessHandler.js +13 -16
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/accountTrade.d.ts +9 -9
- package/dist/esm/accountTrade.js +19 -17
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.d.ts +11 -12
- package/dist/esm/brokerTool.js +2 -3
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/config/priceFeedConfig.json +16 -2
- package/dist/esm/config/symbolList.json +2 -1
- package/dist/esm/constants.d.ts +12 -12
- package/dist/esm/constants.js +13 -13
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/contracts/ERC20.d.ts +146 -171
- package/dist/esm/contracts/IPerpetualManager.d.ts +2534 -2225
- package/dist/esm/contracts/IPyth.d.ts +181 -184
- package/dist/esm/contracts/LimitOrderBook.d.ts +373 -401
- package/dist/esm/contracts/LimitOrderBookBeacon.d.ts +53 -104
- package/dist/esm/contracts/LimitOrderBookFactory.d.ts +129 -185
- package/dist/esm/contracts/MockTokenSwap.d.ts +109 -169
- package/dist/esm/contracts/Multicall3.d.ts +147 -211
- package/dist/esm/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
- package/dist/esm/contracts/OracleFactory.d.ts +258 -238
- package/dist/esm/contracts/PerpetualManagerProxy.d.ts +1099 -891
- package/dist/esm/contracts/RedStoneAbi.d.ts +369 -488
- package/dist/esm/contracts/ShareToken.d.ts +232 -285
- package/dist/esm/contracts/common.d.ts +40 -11
- package/dist/esm/contracts/factories/ERC20__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/ERC20__factory.js +4 -4
- package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +4 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPyth__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/IPyth__factory.js +4 -4
- package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js +4 -4
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/esm/contracts/factories/Multicall3__factory.d.ts +11 -9
- package/dist/esm/contracts/factories/Multicall3__factory.js +8 -11
- package/dist/esm/contracts/factories/Multicall3__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js +4 -4
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/OracleFactory__factory.js +4 -4
- package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +4 -4
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/esm/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/RedStoneAbi__factory.js +4 -4
- package/dist/esm/contracts/factories/RedStoneAbi__factory.js.map +1 -1
- package/dist/esm/contracts/factories/ShareToken__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/ShareToken__factory.js +4 -4
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +28 -16
- package/dist/esm/d8XMath.js +67 -49
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.d.ts +8 -8
- package/dist/esm/liquidatorTool.js +5 -7
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.d.ts +4 -5
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +27 -28
- package/dist/esm/marketData.js +55 -59
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +35 -37
- package/dist/esm/onChainPxFeed.d.ts +2 -2
- package/dist/esm/onChainPxFeed.js +3 -3
- package/dist/esm/onChainPxFeed.js.map +1 -1
- package/dist/esm/onChainPxFeedAngle.d.ts +2 -2
- package/dist/esm/onChainPxFeedAngle.js +2 -3
- package/dist/esm/onChainPxFeedAngle.js.map +1 -1
- package/dist/esm/onChainPxFeedRedStone.js +1 -1
- package/dist/esm/onChainPxFeedRedStone.js.map +1 -1
- package/dist/esm/orderExecutorTool.d.ts +7 -9
- package/dist/esm/orderExecutorTool.js +38 -48
- package/dist/esm/orderExecutorTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +44 -35
- package/dist/esm/perpetualDataHandler.js +137 -113
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.d.ts +4 -5
- package/dist/esm/perpetualEventHandler.js +2 -2
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/polyMktsPxFeed.d.ts +14 -0
- package/dist/esm/polyMktsPxFeed.js +56 -0
- package/dist/esm/polyMktsPxFeed.js.map +1 -0
- package/dist/esm/priceFeeds.d.ts +2 -0
- package/dist/esm/priceFeeds.js +44 -9
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/referralCodeSigner.d.ts +1 -1
- package/dist/esm/referralCodeSigner.js +6 -10
- package/dist/esm/referralCodeSigner.js.map +1 -1
- package/dist/esm/traderDigests.d.ts +2 -1
- package/dist/esm/traderDigests.js +2 -4
- package/dist/esm/traderDigests.js.map +1 -1
- package/dist/esm/traderInterface.d.ts +8 -9
- package/dist/esm/traderInterface.js +42 -25
- package/dist/esm/traderInterface.js.map +1 -1
- package/dist/esm/utils.d.ts +2 -3
- package/dist/esm/utils.js +1 -2
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/writeAccessHandler.d.ts +7 -9
- package/dist/esm/writeAccessHandler.js +5 -8
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +7 -17
- package/src/accountTrade.ts +32 -34
- package/src/brokerTool.ts +17 -20
- package/src/config/priceFeedConfig.json +16 -2
- package/src/config/symbolList.json +2 -1
- package/src/constants.ts +13 -13
- package/src/contracts/ERC20.ts +236 -350
- package/src/contracts/IPerpetualManager.ts +3359 -5050
- package/src/contracts/IPyth.ts +272 -409
- package/src/contracts/LimitOrderBook.ts +503 -779
- package/src/contracts/LimitOrderBookBeacon.ts +123 -171
- package/src/contracts/LimitOrderBookFactory.ts +263 -332
- package/src/contracts/MockTokenSwap.ts +237 -275
- package/src/contracts/Multicall3.ts +208 -374
- package/src/contracts/OnDemandOracleUpgradeable.ts +569 -782
- package/src/contracts/OracleFactory.ts +410 -538
- package/src/contracts/PerpetualManagerProxy.ts +1898 -1426
- package/src/contracts/RedStoneAbi.ts +486 -986
- package/src/contracts/ShareToken.ts +376 -557
- package/src/contracts/common.ts +108 -21
- package/src/contracts/factories/ERC20__factory.ts +4 -5
- package/src/contracts/factories/IPerpetualManager__factory.ts +4 -5
- package/src/contracts/factories/IPyth__factory.ts +4 -5
- package/src/contracts/factories/LimitOrderBookBeacon__factory.ts +5 -6
- package/src/contracts/factories/LimitOrderBookFactory__factory.ts +5 -6
- package/src/contracts/factories/LimitOrderBook__factory.ts +4 -5
- package/src/contracts/factories/MockTokenSwap__factory.ts +4 -5
- package/src/contracts/factories/Multicall3__factory.ts +21 -19
- package/src/contracts/factories/OnDemandOracleUpgradeable__factory.ts +5 -6
- package/src/contracts/factories/OracleFactory__factory.ts +4 -5
- package/src/contracts/factories/PerpetualManagerProxy__factory.ts +5 -6
- package/src/contracts/factories/RedStoneAbi__factory.ts +4 -8
- package/src/contracts/factories/ShareToken__factory.ts +4 -8
- package/src/d8XMath.ts +78 -57
- package/src/liquidatorTool.ts +12 -15
- package/src/liquidityProviderTool.ts +7 -5
- package/src/marketData.ts +110 -121
- package/src/nodeSDKTypes.ts +51 -38
- package/src/onChainPxFeed.ts +4 -4
- package/src/onChainPxFeedAngle.ts +5 -7
- package/src/onChainPxFeedRedStone.ts +1 -3
- package/src/orderExecutorTool.ts +100 -108
- package/src/perpetualDataHandler.ts +209 -172
- package/src/perpetualEventHandler.ts +16 -17
- package/src/polyMktsPxFeed.ts +71 -0
- package/src/priceFeeds.ts +46 -10
- package/src/referralCodeSigner.ts +6 -10
- package/src/traderDigests.ts +8 -5
- package/src/traderInterface.ts +61 -33
- package/src/utils.ts +3 -4
- package/src/version.ts +1 -1
- package/src/writeAccessHandler.ts +26 -17
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from "@ethersproject/bignumber";
|
|
2
1
|
import { ONE_64x64 } from "./constants";
|
|
3
2
|
import { ABK64x64ToFloat, mul64x64 } from "./d8XMath";
|
|
4
3
|
import MarketData from "./marketData";
|
|
@@ -194,9 +193,9 @@ export default class PerpetualEventHandler {
|
|
|
194
193
|
*/
|
|
195
194
|
public onUpdateMarkPrice(
|
|
196
195
|
perpetualId: number,
|
|
197
|
-
fMidPricePremium:
|
|
198
|
-
fMarkPricePremium:
|
|
199
|
-
fSpotIndexPrice:
|
|
196
|
+
fMidPricePremium: bigint,
|
|
197
|
+
fMarkPricePremium: bigint,
|
|
198
|
+
fSpotIndexPrice: bigint
|
|
200
199
|
): void {
|
|
201
200
|
let [newMidPrice, newMarkPrice, newIndexPrice] = PerpetualEventHandler.ConvertUpdateMarkPrice(
|
|
202
201
|
fMidPricePremium,
|
|
@@ -218,7 +217,7 @@ export default class PerpetualEventHandler {
|
|
|
218
217
|
* UpdateFundingRate(uint24 indexed perpetualId, int128 fFundingRate)
|
|
219
218
|
* @param fFundingRate funding rate in ABDK format
|
|
220
219
|
*/
|
|
221
|
-
public onUpdateUpdateFundingRate(perpetualId: number, fFundingRate:
|
|
220
|
+
public onUpdateUpdateFundingRate(perpetualId: number, fFundingRate: bigint): void {
|
|
222
221
|
let newRate = ABK64x64ToFloat(fFundingRate);
|
|
223
222
|
let perpetual = this.getPerpetualData(perpetualId.toString());
|
|
224
223
|
if (perpetual == undefined) {
|
|
@@ -332,11 +331,11 @@ export default class PerpetualEventHandler {
|
|
|
332
331
|
perpetualId: number,
|
|
333
332
|
trader: string,
|
|
334
333
|
_positionId: string,
|
|
335
|
-
_fPositionBC:
|
|
336
|
-
_fCashCC:
|
|
337
|
-
_fLockedInValueQC:
|
|
338
|
-
_fFundingPaymentCC:
|
|
339
|
-
fOpenInterestBC:
|
|
334
|
+
_fPositionBC: bigint,
|
|
335
|
+
_fCashCC: bigint,
|
|
336
|
+
_fLockedInValueQC: bigint,
|
|
337
|
+
_fFundingPaymentCC: bigint,
|
|
338
|
+
fOpenInterestBC: bigint
|
|
340
339
|
): Promise<void> {
|
|
341
340
|
let perpetual = this.getPerpetualData(perpetualId.toString());
|
|
342
341
|
if (perpetual == undefined) {
|
|
@@ -369,8 +368,8 @@ export default class PerpetualEventHandler {
|
|
|
369
368
|
positionId: string,
|
|
370
369
|
_order: SmartContractOrder,
|
|
371
370
|
orderDigest: string,
|
|
372
|
-
newPositionSizeBC:
|
|
373
|
-
_price:
|
|
371
|
+
newPositionSizeBC: bigint,
|
|
372
|
+
_price: bigint
|
|
374
373
|
): TradeEvent {
|
|
375
374
|
// remove order digest from open orders
|
|
376
375
|
let orderStructs = this.ordersInPerpetual.get(perpetualId);
|
|
@@ -440,12 +439,12 @@ export default class PerpetualEventHandler {
|
|
|
440
439
|
* @returns mark price and spot index in float
|
|
441
440
|
*/
|
|
442
441
|
private static ConvertUpdateMarkPrice(
|
|
443
|
-
fMidPricePremium:
|
|
444
|
-
fMarkPricePremium:
|
|
445
|
-
fSpotIndexPrice:
|
|
442
|
+
fMidPricePremium: bigint,
|
|
443
|
+
fMarkPricePremium: bigint,
|
|
444
|
+
fSpotIndexPrice: bigint
|
|
446
445
|
): [number, number, number] {
|
|
447
|
-
let fMarkPrice = mul64x64(fSpotIndexPrice, ONE_64x64
|
|
448
|
-
let fMidPrice = mul64x64(fSpotIndexPrice, ONE_64x64
|
|
446
|
+
let fMarkPrice = mul64x64(fSpotIndexPrice, ONE_64x64 + fMarkPricePremium);
|
|
447
|
+
let fMidPrice = mul64x64(fSpotIndexPrice, ONE_64x64 + fMidPricePremium);
|
|
449
448
|
let midPrice = ABK64x64ToFloat(fMidPrice);
|
|
450
449
|
let markPrice = ABK64x64ToFloat(fMarkPrice);
|
|
451
450
|
let indexPrice = ABK64x64ToFloat(fSpotIndexPrice);
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { PriceFeedConfig } from "./nodeSDKTypes";
|
|
2
|
+
|
|
3
|
+
interface PolyConfig {
|
|
4
|
+
sym: string;
|
|
5
|
+
idDec: string;
|
|
6
|
+
id: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* PolyMktsPxFeed gets prices from the official polymarket api
|
|
11
|
+
* and applies the exp(px) transformation
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
export default class PolyMktsPxFeed {
|
|
15
|
+
private ids: Map<string, PolyConfig>;
|
|
16
|
+
|
|
17
|
+
constructor(config: PriceFeedConfig) {
|
|
18
|
+
this.ids = new Map<string, PolyConfig>();
|
|
19
|
+
for (let k = 0; k < config.ids.length; k++) {
|
|
20
|
+
if (config.ids[k].type == "polymarket") {
|
|
21
|
+
const sym = config.ids[k].symbol;
|
|
22
|
+
const idDec = PolyMktsPxFeed.hexToDecimalString(config.ids[k].id);
|
|
23
|
+
const el: PolyConfig = {
|
|
24
|
+
sym: sym,
|
|
25
|
+
id: config.ids[k].id,
|
|
26
|
+
idDec: idDec,
|
|
27
|
+
};
|
|
28
|
+
this.ids.set(sym, el);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public isPolyMktsSym(sym: string) {
|
|
34
|
+
return this.ids.get(sym) == undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public async fetchPriceForSym(sym: string): Promise<number> {
|
|
38
|
+
const mkt = this.ids.get(sym);
|
|
39
|
+
if (mkt == undefined) {
|
|
40
|
+
throw new Error(`symbol not in polymarket universe: ${sym}`);
|
|
41
|
+
}
|
|
42
|
+
return this.fetchPrice(mkt.idDec);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public async fetchPrice(tokenIdDec: string): Promise<number> {
|
|
46
|
+
const query = "https://clob.polymarket.com/midpoint?token_id=" + tokenIdDec;
|
|
47
|
+
let response = await fetch(query);
|
|
48
|
+
if (response.status !== 200) {
|
|
49
|
+
throw new Error(`unexpected status code: ${response.status}`);
|
|
50
|
+
}
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
throw new Error(`failed to fetch posts (${response.status}): ${response.statusText} ${query}`);
|
|
53
|
+
}
|
|
54
|
+
const data = await response.json();
|
|
55
|
+
const px = Number(data.mid);
|
|
56
|
+
return Math.exp(px);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static hexToDecimalString(hexString: string): string {
|
|
60
|
+
// Remove the "0x" prefix if it exists
|
|
61
|
+
if (hexString.startsWith("0x")) {
|
|
62
|
+
hexString = hexString.slice(2);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Convert the hex string to a BigInt
|
|
66
|
+
const bigIntValue = BigInt("0x" + hexString);
|
|
67
|
+
|
|
68
|
+
// Convert the BigInt to a decimal string
|
|
69
|
+
return bigIntValue.toString(10);
|
|
70
|
+
}
|
|
71
|
+
}
|
package/src/priceFeeds.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from "@ethersproject/bignumber";
|
|
2
1
|
import { Buffer } from "buffer";
|
|
3
2
|
import { decNToFloat, floatToDec18 } from "./d8XMath";
|
|
4
3
|
import type {
|
|
@@ -13,6 +12,8 @@ import PerpetualDataHandler from "./perpetualDataHandler";
|
|
|
13
12
|
import Triangulator from "./triangulator";
|
|
14
13
|
import OnChainPxFeed from "./onChainPxFeed";
|
|
15
14
|
import OnChainPxFactory from "./onChainPxFactory";
|
|
15
|
+
import PolyMktsPxFeed from "./polyMktsPxFeed";
|
|
16
|
+
import { sleep } from "./utils";
|
|
16
17
|
/**
|
|
17
18
|
* This class communicates with the REST API that provides price-data that is
|
|
18
19
|
* to be submitted to the smart contracts for certain functions such as
|
|
@@ -35,10 +36,12 @@ export default class PriceFeeds {
|
|
|
35
36
|
// api formatting constants
|
|
36
37
|
private PYTH = { endpoint: "/v2/updates/price/latest?encoding=base64&ids[]=", separator: "&ids[]=", suffix: "" };
|
|
37
38
|
|
|
39
|
+
private polyMktsPxFeed: PolyMktsPxFeed;
|
|
40
|
+
|
|
38
41
|
constructor(dataHandler: PerpetualDataHandler, priceFeedConfigNetwork: string) {
|
|
39
42
|
let configs = require("./config/priceFeedConfig.json") as PriceFeedConfig[];
|
|
40
43
|
this.config = PriceFeeds._selectConfig(configs, priceFeedConfigNetwork);
|
|
41
|
-
|
|
44
|
+
this.polyMktsPxFeed = new PolyMktsPxFeed(this.config);
|
|
42
45
|
// if SDK config contains custom price feed endpoints, these override the
|
|
43
46
|
// public/default ones
|
|
44
47
|
if (dataHandler.config.priceFeedEndpoints && dataHandler.config.priceFeedEndpoints.length > 0) {
|
|
@@ -52,7 +55,7 @@ export default class PriceFeeds {
|
|
|
52
55
|
for (let k = 0; k < this.config.ids.length; k++) {
|
|
53
56
|
if (this.config.ids[k].type == "onchain") {
|
|
54
57
|
let sym = this.config.ids[k].symbol;
|
|
55
|
-
this.onChainPxFeeds
|
|
58
|
+
this.onChainPxFeeds.set(sym, OnChainPxFactory.createFeed(sym)!);
|
|
56
59
|
}
|
|
57
60
|
}
|
|
58
61
|
[this.feedInfo, this.feedEndpoints, this.writeFeedEndpoints] = PriceFeeds._constructFeedInfo(this.config, false);
|
|
@@ -245,6 +248,7 @@ export default class PriceFeeds {
|
|
|
245
248
|
symbolsOfEndpoint.push([]);
|
|
246
249
|
}
|
|
247
250
|
let onChainSyms: string[] = [];
|
|
251
|
+
let polyMktSyms: string[] = [];
|
|
248
252
|
for (let k = 0; k < this.config.ids.length; k++) {
|
|
249
253
|
let currFeed = this.config.ids[k];
|
|
250
254
|
if (symbols != undefined && !symbols.includes(currFeed.symbol)) {
|
|
@@ -254,6 +258,10 @@ export default class PriceFeeds {
|
|
|
254
258
|
onChainSyms.push(currFeed.symbol);
|
|
255
259
|
continue;
|
|
256
260
|
}
|
|
261
|
+
if (currFeed.type == "polymarket") {
|
|
262
|
+
polyMktSyms.push(currFeed.symbol);
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
257
265
|
const apiFormat = { pyth: this.PYTH, odin: this.PYTH }[currFeed.type];
|
|
258
266
|
if (apiFormat === undefined) {
|
|
259
267
|
throw new Error(`API format for ${currFeed} unknown.`);
|
|
@@ -271,6 +279,7 @@ export default class PriceFeeds {
|
|
|
271
279
|
}
|
|
272
280
|
}
|
|
273
281
|
let onChainPromise = this.queryOnChainPxFeeds(onChainSyms);
|
|
282
|
+
let polyMktsPromise = this.queryPolyMktsPxFeeds(polyMktSyms);
|
|
274
283
|
let resultPrices = new Map<string, [number, boolean]>();
|
|
275
284
|
for (let k = 0; k < queries.length; k++) {
|
|
276
285
|
if (queries[k] == undefined) {
|
|
@@ -279,7 +288,7 @@ export default class PriceFeeds {
|
|
|
279
288
|
let [, pxInfo]: [string[], PriceFeedFormat[]] = await this.fetchPriceQuery(queries[k] + suffixes[k]);
|
|
280
289
|
let tsSecNow = Math.round(Date.now() / 1000);
|
|
281
290
|
for (let j = 0; j < pxInfo.length; j++) {
|
|
282
|
-
let price = decNToFloat(
|
|
291
|
+
let price = decNToFloat(BigInt(pxInfo[j].price), -pxInfo[j].expo);
|
|
283
292
|
let isMarketClosed = tsSecNow - pxInfo[j].publish_time > this.THRESHOLD_MARKET_CLOSED_SEC;
|
|
284
293
|
resultPrices.set(symbolsOfEndpoint[k][j], [price, isMarketClosed]);
|
|
285
294
|
}
|
|
@@ -289,6 +298,14 @@ export default class PriceFeeds {
|
|
|
289
298
|
let sym = onChainSyms[k];
|
|
290
299
|
resultPrices.set(sym, [onChPxs[k], false]);
|
|
291
300
|
}
|
|
301
|
+
let polyPxs = await polyMktsPromise;
|
|
302
|
+
for (let k = 0; k < polyPxs.length; k++) {
|
|
303
|
+
let sym = polyMktSyms[k];
|
|
304
|
+
if (polyPxs[k] == -1) {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
resultPrices.set(sym, [polyPxs[k], false]);
|
|
308
|
+
}
|
|
292
309
|
return resultPrices;
|
|
293
310
|
}
|
|
294
311
|
|
|
@@ -296,12 +313,30 @@ export default class PriceFeeds {
|
|
|
296
313
|
let prices: number[] = new Array<number>();
|
|
297
314
|
for (let k = 0; k < symbols.length; k++) {
|
|
298
315
|
let sym = symbols[k];
|
|
299
|
-
|
|
316
|
+
const feed = this.onChainPxFeeds.get(sym);
|
|
317
|
+
let price = await feed!.getPrice();
|
|
300
318
|
prices.push(price);
|
|
301
319
|
}
|
|
302
320
|
return prices;
|
|
303
321
|
}
|
|
304
322
|
|
|
323
|
+
private async queryPolyMktsPxFeeds(symbols: string[]) {
|
|
324
|
+
let prices: number[] = new Array<number>();
|
|
325
|
+
for (let k = 0; k < symbols.length; k++) {
|
|
326
|
+
try {
|
|
327
|
+
let price = await this.polyMktsPxFeed.fetchPriceForSym(symbols[k]);
|
|
328
|
+
prices.push(price);
|
|
329
|
+
} catch (error) {
|
|
330
|
+
console.log("fetchPriceForSym failed for " + symbols[k]);
|
|
331
|
+
prices.push(-1);
|
|
332
|
+
}
|
|
333
|
+
if (k > 0) {
|
|
334
|
+
await sleep(0.25);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return prices;
|
|
338
|
+
}
|
|
339
|
+
|
|
305
340
|
/**
|
|
306
341
|
* Get all configured feed prices via "latest_price_feeds".
|
|
307
342
|
* @returns map of feed-price symbol to price/isMarketClosed
|
|
@@ -328,16 +363,17 @@ export default class PriceFeeds {
|
|
|
328
363
|
throw new Error(`priceFeeds: config for symbol ${symbol} insufficient`);
|
|
329
364
|
}
|
|
330
365
|
// we use the first endpoint for a given symbol even if there is another symbol with the same id
|
|
331
|
-
// and another
|
|
332
366
|
let idx = info[0].endpointId;
|
|
333
367
|
let feedId = feedIds[k];
|
|
334
368
|
queries.push(this.writeFeedEndpoints[idx] + "/v2/updates/price/latest?encoding=base64&ids[]=" + feedId);
|
|
335
369
|
|
|
336
370
|
for (let j = 0; j < info.length; j++) {
|
|
337
371
|
if (symbols.has(feedId)) {
|
|
338
|
-
symbols
|
|
372
|
+
let v = symbols.get(feedId);
|
|
373
|
+
v!.push(info[j].symbol);
|
|
374
|
+
symbols.set(feedId, v!);
|
|
339
375
|
} else {
|
|
340
|
-
symbols
|
|
376
|
+
symbols.set(feedId, [info[j].symbol]);
|
|
341
377
|
}
|
|
342
378
|
}
|
|
343
379
|
}
|
|
@@ -376,7 +412,7 @@ export default class PriceFeeds {
|
|
|
376
412
|
const tsSecNow = Math.round(Date.now() / 1000);
|
|
377
413
|
for (let k = 0; k < feedIds.length; k++) {
|
|
378
414
|
let pxInfo: PriceFeedFormat = data[k].prices[0];
|
|
379
|
-
let price = decNToFloat(
|
|
415
|
+
let price = decNToFloat(BigInt(pxInfo.price), -pxInfo.expo);
|
|
380
416
|
prices.push(price);
|
|
381
417
|
priceFeedUpdates.push(data[k].vaas[0]);
|
|
382
418
|
let isMarketClosed = tsSecNow - pxInfo.publish_time > this.THRESHOLD_MARKET_CLOSED_SEC;
|
|
@@ -404,7 +440,7 @@ export default class PriceFeeds {
|
|
|
404
440
|
public calculateTriangulatedPricesFromFeedInfo(symbols: string[], feeds: PriceFeedSubmission): [number[], boolean[]] {
|
|
405
441
|
let priceMap = new Map<string, [number, boolean]>();
|
|
406
442
|
for (let j = 0; j < feeds.prices.length; j++) {
|
|
407
|
-
const syms = feeds.symbols
|
|
443
|
+
const syms = feeds.symbols.get(feeds.ids[j]);
|
|
408
444
|
if (syms == undefined) {
|
|
409
445
|
console.log("calculateTriangulatedPricesFromFeedInfo: could not find symbol for id ", feeds.ids[j]);
|
|
410
446
|
continue;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Signer } from "@ethersproject/abstract-signer";
|
|
3
|
-
import { keccak256 } from "@ethersproject/keccak256";
|
|
4
|
-
import { Provider, StaticJsonRpcProvider } from "@ethersproject/providers";
|
|
5
|
-
import { Wallet, verifyMessage } from "@ethersproject/wallet";
|
|
1
|
+
import { AbiCoder, JsonRpcProvider, keccak256, Provider, Signer, verifyMessage, Wallet } from "ethers";
|
|
6
2
|
import type { APIReferPayload, APIReferralCodePayload, APIReferralCodeSelectionPayload } from "./nodeSDKTypes";
|
|
7
3
|
|
|
8
4
|
/**
|
|
@@ -31,7 +27,7 @@ export default class ReferralCodeSigner {
|
|
|
31
27
|
if (typeof signer == "string") {
|
|
32
28
|
const wallet = this.createSignerInstance(signer);
|
|
33
29
|
this.signingFun = (x: string | Uint8Array) => wallet.signMessage(x);
|
|
34
|
-
} else if (
|
|
30
|
+
} else if ("signMessage" in signer) {
|
|
35
31
|
this.signingFun = (x: string | Uint8Array) => signer.signMessage(x);
|
|
36
32
|
} else {
|
|
37
33
|
this.signingFun = signer;
|
|
@@ -39,7 +35,7 @@ export default class ReferralCodeSigner {
|
|
|
39
35
|
}
|
|
40
36
|
|
|
41
37
|
public createSignerInstance(_privateKey: string): Signer {
|
|
42
|
-
this.provider = new
|
|
38
|
+
this.provider = new JsonRpcProvider(this.rpcURL);
|
|
43
39
|
const wallet = new Wallet(_privateKey);
|
|
44
40
|
return wallet.connect(this.provider);
|
|
45
41
|
}
|
|
@@ -120,7 +116,7 @@ export default class ReferralCodeSigner {
|
|
|
120
116
|
}
|
|
121
117
|
|
|
122
118
|
private static _referralNewToMessage(rc: APIReferPayload): string {
|
|
123
|
-
let abiCoder =
|
|
119
|
+
let abiCoder = new AbiCoder();
|
|
124
120
|
const passOnPercTwoDigitsFormat = Math.round(rc.passOnPercTDF);
|
|
125
121
|
let digest = keccak256(
|
|
126
122
|
abiCoder.encode(
|
|
@@ -137,7 +133,7 @@ export default class ReferralCodeSigner {
|
|
|
137
133
|
* @returns the hex-string to be signed
|
|
138
134
|
*/
|
|
139
135
|
private static _referralCodeNewCodePayloadToMessage(rc: APIReferralCodePayload): string {
|
|
140
|
-
let abiCoder =
|
|
136
|
+
let abiCoder = new AbiCoder();
|
|
141
137
|
const passOnPercTwoDigitsFormat = Math.round(rc.passOnPercTDF);
|
|
142
138
|
let digest = keccak256(
|
|
143
139
|
abiCoder.encode(
|
|
@@ -154,7 +150,7 @@ export default class ReferralCodeSigner {
|
|
|
154
150
|
* @returns the hex-string to be signed
|
|
155
151
|
*/
|
|
156
152
|
private static _codeSelectionPayloadToMessage(rc: APIReferralCodeSelectionPayload): string {
|
|
157
|
-
let abiCoder =
|
|
153
|
+
let abiCoder = new AbiCoder();
|
|
158
154
|
let digest = keccak256(
|
|
159
155
|
abiCoder.encode(["string", "address", "uint256"], [rc.code, rc.traderAddr, Math.round(rc.createdOn)])
|
|
160
156
|
);
|
package/src/traderDigests.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { defaultAbiCoder } from "@ethersproject/abi";
|
|
2
|
-
import { concat } from "@ethersproject/bytes";
|
|
3
|
-
import { keccak256 } from "@ethersproject/keccak256";
|
|
4
|
-
import { toUtf8Bytes } from "@ethersproject/strings";
|
|
5
1
|
import { Buffer } from "buffer";
|
|
2
|
+
import { AbiCoder, BigNumberish, concat, keccak256, toUtf8Bytes } from "ethers";
|
|
6
3
|
import { type SmartContractOrder } from "./nodeSDKTypes";
|
|
7
4
|
|
|
8
5
|
export default class TraderDigests {
|
|
@@ -30,11 +27,17 @@ export default class TraderDigests {
|
|
|
30
27
|
* @returns digest
|
|
31
28
|
* @ignore
|
|
32
29
|
*/
|
|
33
|
-
public createDigest(
|
|
30
|
+
public createDigest(
|
|
31
|
+
order: SmartContractOrder,
|
|
32
|
+
chainId: BigNumberish,
|
|
33
|
+
isNewOrder: boolean,
|
|
34
|
+
proxyAddress: string
|
|
35
|
+
): string {
|
|
34
36
|
const NAME = "Perpetual Trade Manager";
|
|
35
37
|
const DOMAIN_TYPEHASH = keccak256(
|
|
36
38
|
Buffer.from("EIP712Domain(string name,uint256 chainId,address verifyingContract)")
|
|
37
39
|
);
|
|
40
|
+
const defaultAbiCoder = new AbiCoder();
|
|
38
41
|
let domainSeparator = keccak256(
|
|
39
42
|
defaultAbiCoder.encode(
|
|
40
43
|
["bytes32", "bytes32", "uint256", "address"],
|
package/src/traderInterface.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Signer } from "
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { ABK64x64ToFloat, floatToDec18, floatToDecN } from "./d8XMath";
|
|
1
|
+
import { Contract, ContractTransactionResponse, Overrides, Signer } from "ethers";
|
|
2
|
+
import { MASK_PREDICTIVE_MARKET, ZERO_ORDER_ID } from "./constants";
|
|
3
|
+
import { ABK64x64ToFloat, floatToDec18, floatToDecN, priceToProb, probToPrice } from "./d8XMath";
|
|
5
4
|
import MarketData from "./marketData";
|
|
6
5
|
import type { ClientOrder, NodeSDKConfig, Order, SmartContractOrder } from "./nodeSDKTypes";
|
|
7
6
|
import PerpetualDataHandler from "./perpetualDataHandler";
|
|
8
7
|
import TraderDigests from "./traderDigests";
|
|
8
|
+
import { containsFlag } from "./utils";
|
|
9
9
|
/**
|
|
10
10
|
* Interface that can be used by front-end that wraps all private functions
|
|
11
11
|
* so that signatures can be handled in frontend via wallet
|
|
@@ -50,14 +50,19 @@ export default class TraderInterface extends MarketData {
|
|
|
50
50
|
poolSymbolName: string,
|
|
51
51
|
traderAddr: string,
|
|
52
52
|
brokerAddr: string,
|
|
53
|
-
overrides?:
|
|
53
|
+
overrides?: Overrides
|
|
54
54
|
): Promise<number> {
|
|
55
55
|
if (this.proxyContract == null) {
|
|
56
56
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
57
57
|
}
|
|
58
58
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
59
|
-
let feeTbps = await this.proxyContract.queryExchangeFee(
|
|
60
|
-
|
|
59
|
+
let feeTbps = (await this.proxyContract.queryExchangeFee(
|
|
60
|
+
poolId,
|
|
61
|
+
traderAddr,
|
|
62
|
+
brokerAddr,
|
|
63
|
+
overrides || {}
|
|
64
|
+
)) as bigint;
|
|
65
|
+
return Number(feeTbps) / 100_000;
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
/**
|
|
@@ -82,7 +87,7 @@ export default class TraderInterface extends MarketData {
|
|
|
82
87
|
public async getCurrentTraderVolume(
|
|
83
88
|
poolSymbolName: string,
|
|
84
89
|
traderAddr: string,
|
|
85
|
-
overrides?:
|
|
90
|
+
overrides?: Overrides
|
|
86
91
|
): Promise<number> {
|
|
87
92
|
if (this.proxyContract == null) {
|
|
88
93
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
@@ -117,7 +122,7 @@ export default class TraderInterface extends MarketData {
|
|
|
117
122
|
public async cancelOrderDigest(
|
|
118
123
|
symbol: string,
|
|
119
124
|
orderId: string,
|
|
120
|
-
overrides?:
|
|
125
|
+
overrides?: Overrides
|
|
121
126
|
): Promise<{ digest: string; OBContractAddr: string }> {
|
|
122
127
|
if (this.proxyContract == null) {
|
|
123
128
|
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
@@ -125,7 +130,7 @@ export default class TraderInterface extends MarketData {
|
|
|
125
130
|
let orderBookContract = this.getOrderBookContract(symbol);
|
|
126
131
|
let scOrder: SmartContractOrder = await orderBookContract.orderOfDigest(orderId, overrides || {});
|
|
127
132
|
let digest = this.digestTool.createDigest(scOrder, this.chainId, false, this.proxyAddr);
|
|
128
|
-
return { digest: digest, OBContractAddr: orderBookContract.
|
|
133
|
+
return { digest: digest, OBContractAddr: orderBookContract.target.toString() };
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
/**
|
|
@@ -147,7 +152,7 @@ export default class TraderInterface extends MarketData {
|
|
|
147
152
|
*/
|
|
148
153
|
public getOrderBookAddress(symbol: string): string {
|
|
149
154
|
let orderBookContract = this.getOrderBookContract(symbol);
|
|
150
|
-
return orderBookContract.
|
|
155
|
+
return orderBookContract.target.toString();
|
|
151
156
|
}
|
|
152
157
|
|
|
153
158
|
/**
|
|
@@ -157,6 +162,19 @@ export default class TraderInterface extends MarketData {
|
|
|
157
162
|
* @returns Smart contract type order struct
|
|
158
163
|
*/
|
|
159
164
|
public createSmartContractOrder(order: Order, traderAddr: string): SmartContractOrder {
|
|
165
|
+
const sInfo = this.symbolToPerpStaticInfo.get(order.symbol);
|
|
166
|
+
if (!sInfo) {
|
|
167
|
+
throw new Error(`No perpetual static info found for symbol ${order.symbol}`);
|
|
168
|
+
}
|
|
169
|
+
if (containsFlag(BigInt(sInfo.perpFlags), MASK_PREDICTIVE_MARKET)) {
|
|
170
|
+
// convert prob to actual price
|
|
171
|
+
if (order.limitPrice !== undefined) {
|
|
172
|
+
order.limitPrice = probToPrice(order.limitPrice);
|
|
173
|
+
}
|
|
174
|
+
if (order.stopPrice !== undefined) {
|
|
175
|
+
order.stopPrice = probToPrice(order.stopPrice);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
160
178
|
let scOrder = TraderInterface.toSmartContractOrder(order, traderAddr, this.symbolToPerpStaticInfo);
|
|
161
179
|
return scOrder;
|
|
162
180
|
}
|
|
@@ -172,20 +190,24 @@ export default class TraderInterface extends MarketData {
|
|
|
172
190
|
if (this.proxyContract == null) {
|
|
173
191
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
174
192
|
}
|
|
175
|
-
let digest = this.digestTool.createDigest(scOrder, this.chainId, true, this.proxyContract.
|
|
193
|
+
let digest = this.digestTool.createDigest(scOrder, this.chainId, true, this.proxyContract.target.toString());
|
|
176
194
|
return digest;
|
|
177
195
|
}
|
|
178
196
|
|
|
179
197
|
/**
|
|
180
|
-
* Get the ABI of a method in the proxy contract
|
|
198
|
+
* Get the ABI of a method in the proxy contract. Throws if non-existent
|
|
181
199
|
* @param method Name of the method
|
|
182
200
|
* @returns ABI as a single string
|
|
183
201
|
*/
|
|
184
202
|
public getProxyABI(method: string): string {
|
|
185
203
|
if (this.proxyContract == null) {
|
|
186
|
-
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
204
|
+
throw new Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
205
|
+
}
|
|
206
|
+
const res = PerpetualDataHandler._getABIFromContract(this.proxyContract, method);
|
|
207
|
+
if (!res) {
|
|
208
|
+
throw new Error(`no proxy method found with name ${method}`);
|
|
187
209
|
}
|
|
188
|
-
return
|
|
210
|
+
return res;
|
|
189
211
|
}
|
|
190
212
|
|
|
191
213
|
/**
|
|
@@ -199,7 +221,11 @@ export default class TraderInterface extends MarketData {
|
|
|
199
221
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
200
222
|
}
|
|
201
223
|
let orderBookContract = this.getOrderBookContract(symbol);
|
|
202
|
-
|
|
224
|
+
const res = PerpetualDataHandler._getABIFromContract(orderBookContract, method);
|
|
225
|
+
if (!res) {
|
|
226
|
+
throw new Error(`no proxy method found with name ${method}`);
|
|
227
|
+
}
|
|
228
|
+
return res;
|
|
203
229
|
}
|
|
204
230
|
|
|
205
231
|
/**
|
|
@@ -254,16 +280,14 @@ export default class TraderInterface extends MarketData {
|
|
|
254
280
|
poolSymbolName: string,
|
|
255
281
|
amountCC: number,
|
|
256
282
|
overrides?: Overrides
|
|
257
|
-
): Promise<
|
|
283
|
+
): Promise<ContractTransactionResponse> {
|
|
258
284
|
if (this.proxyContract == null) {
|
|
259
285
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
260
286
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
.addLiquidity(poolId, floatToDecN(amountCC, decimals!), overrides || { gasLimit: this.gasLimit });
|
|
266
|
-
return tx;
|
|
287
|
+
const poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
288
|
+
const decimals = this.getSettlementTokenDecimalsFromSymbol(poolSymbolName);
|
|
289
|
+
const proxy = new Contract(this.proxyAddr, this.proxyABI, signer);
|
|
290
|
+
return await proxy.addLiquidity(poolId, floatToDecN(amountCC, decimals!), overrides || { gasLimit: this.gasLimit });
|
|
267
291
|
}
|
|
268
292
|
|
|
269
293
|
/**
|
|
@@ -295,15 +319,17 @@ export default class TraderInterface extends MarketData {
|
|
|
295
319
|
poolSymbolName: string,
|
|
296
320
|
amountPoolShares: number,
|
|
297
321
|
overrides?: Overrides
|
|
298
|
-
): Promise<
|
|
322
|
+
): Promise<ContractTransactionResponse> {
|
|
299
323
|
if (this.proxyContract == null) {
|
|
300
324
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
301
325
|
}
|
|
302
326
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
327
|
+
const proxy = new Contract(this.proxyAddr, this.proxyABI, signer);
|
|
328
|
+
return await proxy.withdrawLiquidity(
|
|
329
|
+
poolId,
|
|
330
|
+
floatToDec18(amountPoolShares),
|
|
331
|
+
overrides || { gasLimit: this.gasLimit }
|
|
332
|
+
);
|
|
307
333
|
}
|
|
308
334
|
|
|
309
335
|
/**
|
|
@@ -332,14 +358,16 @@ export default class TraderInterface extends MarketData {
|
|
|
332
358
|
signer: Signer,
|
|
333
359
|
poolSymbolName: string,
|
|
334
360
|
overrides?: Overrides
|
|
335
|
-
): Promise<
|
|
361
|
+
): Promise<ContractTransactionResponse> {
|
|
336
362
|
if (this.proxyContract == null) {
|
|
337
363
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
338
364
|
}
|
|
339
365
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
366
|
+
const proxy = new Contract(this.proxyAddr, this.proxyABI, signer);
|
|
367
|
+
return await proxy.executeLiquidityWithdrawal(
|
|
368
|
+
poolId,
|
|
369
|
+
await signer.getAddress(),
|
|
370
|
+
overrides || { gasLimit: this.gasLimit }
|
|
371
|
+
);
|
|
344
372
|
}
|
|
345
373
|
}
|
package/src/utils.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from "@ethersproject/bignumber";
|
|
2
1
|
import { Buffer } from "buffer";
|
|
3
2
|
import { NodeSDKConfig } from "./nodeSDKTypes";
|
|
4
3
|
|
|
@@ -126,11 +125,11 @@ export function symbol4BToLongSymbol(s: string, mapping: Map<string, string>): s
|
|
|
126
125
|
return longCCY.substring(1);
|
|
127
126
|
}
|
|
128
127
|
|
|
129
|
-
export function combineFlags(f1:
|
|
130
|
-
return
|
|
128
|
+
export function combineFlags(f1: bigint, f2: bigint): bigint {
|
|
129
|
+
return BigInt((parseInt(f1.toString()) | parseInt(f2.toString())) >>> 0);
|
|
131
130
|
}
|
|
132
131
|
|
|
133
|
-
export function containsFlag(f1:
|
|
132
|
+
export function containsFlag(f1: bigint, f2: bigint): boolean {
|
|
134
133
|
return (BigInt(f1.toString()) & BigInt(f2.toString())) > 0;
|
|
135
134
|
}
|
|
136
135
|
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const D8X_SDK_VERSION = "
|
|
1
|
+
export const D8X_SDK_VERSION = "2.0.1-alpha";
|