@d8x/perpetuals-sdk 2.0.8-alpha → 2.0.9-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/abi/BeaconProxy.json +71 -0
- package/dist/cjs/abi/IPerpetualManager.json +46 -0
- package/dist/cjs/abi/Maintainer.json +774 -0
- package/dist/cjs/abi/MockToken.json +347 -0
- package/dist/cjs/abi/UUPSUpgradeable.json +104 -0
- package/dist/cjs/abi/WeETH.json +310 -0
- package/dist/cjs/abi-zkevm/IPerpetualManager.json +2 -2
- package/dist/cjs/abi-zkevm/LimitOrderBook.json +910 -0
- package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +236 -0
- package/dist/cjs/contracts/BeaconProxy.d.ts +63 -0
- package/dist/cjs/contracts/BeaconProxy.js +3 -0
- package/dist/cjs/contracts/BeaconProxy.js.map +1 -0
- package/dist/cjs/contracts/IPerpetualManager.d.ts +15 -1
- package/dist/cjs/contracts/Maintainer.d.ts +799 -0
- package/dist/cjs/contracts/Maintainer.js +3 -0
- package/dist/cjs/contracts/Maintainer.js.map +1 -0
- package/dist/cjs/contracts/MockToken.d.ts +263 -0
- package/dist/cjs/contracts/MockToken.js +3 -0
- package/dist/cjs/contracts/MockToken.js.map +1 -0
- package/dist/cjs/contracts/UUPSUpgradeable.d.ts +118 -0
- package/dist/cjs/contracts/UUPSUpgradeable.js +3 -0
- package/dist/cjs/contracts/UUPSUpgradeable.js.map +1 -0
- package/dist/cjs/contracts/WeETH.d.ts +503 -0
- package/dist/cjs/contracts/WeETH.js +3 -0
- package/dist/cjs/contracts/WeETH.js.map +1 -0
- package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +61 -0
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js +89 -0
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +35 -0
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +46 -0
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +609 -0
- package/dist/cjs/contracts/factories/Maintainer__factory.js +792 -0
- package/dist/cjs/contracts/factories/Maintainer__factory.js.map +1 -0
- package/dist/{esm/contracts/factories/PerpStorage__factory.d.ts → cjs/contracts/factories/MockToken__factory.d.ts} +128 -115
- package/dist/cjs/contracts/factories/MockToken__factory.js +365 -0
- package/dist/cjs/contracts/factories/MockToken__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +87 -0
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +122 -0
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/WeETH__factory.d.ts +545 -0
- package/dist/cjs/contracts/factories/WeETH__factory.js +721 -0
- package/dist/cjs/contracts/factories/WeETH__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +4136 -0
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +5324 -0
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +189 -0
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +254 -0
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +715 -0
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +928 -0
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +344 -0
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +456 -0
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/lean0/index.d.ts +4 -0
- package/dist/cjs/contracts/factories/lean0/index.js +15 -0
- package/dist/cjs/contracts/factories/lean0/index.js.map +1 -0
- package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +2821 -0
- package/dist/cjs/contracts/lean0/IPerpetualManager.js +3 -0
- package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +1 -0
- package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +533 -0
- package/dist/cjs/contracts/lean0/LimitOrderBook.js +3 -0
- package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +1 -0
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +210 -0
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +3 -0
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +1 -0
- package/dist/cjs/contracts/lean0/ShareToken.d.ts +320 -0
- package/dist/cjs/contracts/lean0/ShareToken.js +3 -0
- package/dist/cjs/contracts/lean0/ShareToken.js.map +1 -0
- package/dist/cjs/contracts/lean0/index.d.ts +4 -0
- package/dist/cjs/contracts/lean0/index.js +3 -0
- package/dist/cjs/contracts/lean0/index.js.map +1 -0
- package/dist/cjs/marketData.d.ts +2 -1
- package/dist/cjs/marketData.js +46 -18
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +16 -0
- package/dist/cjs/nodeSDKTypes.js +26 -0
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +9 -2
- package/dist/cjs/perpetualDataHandler.js +50 -13
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/referralCodeSigner.d.ts +35 -3
- package/dist/cjs/referralCodeSigner.js +70 -10
- package/dist/cjs/referralCodeSigner.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/abi/BeaconProxy.json +71 -0
- package/dist/esm/abi/IPerpetualManager.json +46 -0
- package/dist/esm/abi/Maintainer.json +774 -0
- package/dist/esm/abi/MockToken.json +347 -0
- package/dist/esm/abi/UUPSUpgradeable.json +104 -0
- package/dist/esm/abi/WeETH.json +310 -0
- package/dist/esm/abi/lean0/IPerpetualManager.json +5306 -0
- package/dist/esm/abi/lean0/LimitOrderBook.json +910 -0
- package/dist/esm/abi/lean0/LimitOrderBookFactory.json +236 -0
- package/dist/esm/abi/lean0/ShareToken.json +438 -0
- package/dist/esm/abi-zkevm/IPerpetualManager.json +2 -2
- package/dist/esm/abi-zkevm/LimitOrderBook.json +910 -0
- package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +236 -0
- package/dist/esm/contracts/BeaconProxy.d.ts +63 -0
- package/dist/esm/contracts/BeaconProxy.js +2 -0
- package/dist/esm/contracts/BeaconProxy.js.map +1 -0
- package/dist/esm/contracts/IPerpetualManager.d.ts +15 -1
- package/dist/esm/contracts/Maintainer.d.ts +799 -0
- package/dist/esm/contracts/Maintainer.js +2 -0
- package/dist/esm/contracts/Maintainer.js.map +1 -0
- package/dist/esm/contracts/MockToken.d.ts +263 -0
- package/dist/esm/contracts/MockToken.js +2 -0
- package/dist/esm/contracts/MockToken.js.map +1 -0
- package/dist/esm/contracts/UUPSUpgradeable.d.ts +118 -0
- package/dist/esm/contracts/UUPSUpgradeable.js +2 -0
- package/dist/esm/contracts/UUPSUpgradeable.js.map +1 -0
- package/dist/esm/contracts/WeETH.d.ts +503 -0
- package/dist/esm/contracts/WeETH.js +2 -0
- package/dist/esm/contracts/WeETH.js.map +1 -0
- package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +61 -0
- package/dist/esm/contracts/factories/BeaconProxy__factory.js +85 -0
- package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +1 -0
- package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +35 -0
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +46 -0
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/Maintainer__factory.d.ts +609 -0
- package/dist/esm/contracts/factories/Maintainer__factory.js +788 -0
- package/dist/esm/contracts/factories/Maintainer__factory.js.map +1 -0
- package/dist/esm/contracts/factories/MockToken__factory.d.ts +273 -0
- package/dist/esm/contracts/factories/{PerpStorage__factory.js → MockToken__factory.js} +139 -128
- package/dist/esm/contracts/factories/MockToken__factory.js.map +1 -0
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +87 -0
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +118 -0
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +1 -0
- package/dist/esm/contracts/factories/WeETH__factory.d.ts +545 -0
- package/dist/esm/contracts/factories/WeETH__factory.js +717 -0
- package/dist/esm/contracts/factories/WeETH__factory.js.map +1 -0
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +4136 -0
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +5320 -0
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +1 -0
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +189 -0
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +250 -0
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +1 -0
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +715 -0
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +924 -0
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +1 -0
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +344 -0
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +452 -0
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +1 -0
- package/dist/esm/contracts/factories/lean0/index.d.ts +4 -0
- package/dist/esm/contracts/factories/lean0/index.js +8 -0
- package/dist/esm/contracts/factories/lean0/index.js.map +1 -0
- package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +2821 -0
- package/dist/esm/contracts/lean0/IPerpetualManager.js +2 -0
- package/dist/esm/contracts/lean0/IPerpetualManager.js.map +1 -0
- package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +533 -0
- package/dist/esm/contracts/lean0/LimitOrderBook.js +2 -0
- package/dist/esm/contracts/lean0/LimitOrderBook.js.map +1 -0
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +210 -0
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +2 -0
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +1 -0
- package/dist/esm/contracts/lean0/ShareToken.d.ts +320 -0
- package/dist/esm/contracts/lean0/ShareToken.js +2 -0
- package/dist/esm/contracts/lean0/ShareToken.js.map +1 -0
- package/dist/esm/contracts/lean0/index.d.ts +4 -0
- package/dist/esm/contracts/lean0/index.js +2 -0
- package/dist/esm/contracts/lean0/index.js.map +1 -0
- package/dist/esm/marketData.d.ts +2 -1
- package/dist/esm/marketData.js +46 -18
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +16 -0
- package/dist/esm/nodeSDKTypes.js +25 -1
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +9 -2
- package/dist/esm/perpetualDataHandler.js +50 -13
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/referralCodeSigner.d.ts +35 -3
- package/dist/esm/referralCodeSigner.js +71 -11
- package/dist/esm/referralCodeSigner.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +4 -2
- package/src/abi/IPerpetualManager.json +46 -0
- package/src/abi-zkevm/IPerpetualManager.json +2 -2
- package/src/contracts/IPerpetualManager.ts +22 -0
- package/src/contracts/factories/IPerpetualManager__factory.ts +46 -0
- package/src/marketData.ts +54 -17
- package/src/nodeSDKTypes.ts +29 -0
- package/src/perpetualDataHandler.ts +54 -17
- package/src/referralCodeSigner.ts +82 -12
- package/src/version.ts +1 -1
- package/dist/esm/contracts/factories/PerpStorage__factory.js.map +0 -1
|
@@ -2704,6 +2704,52 @@ const _abi = [
|
|
|
2704
2704
|
stateMutability: "view",
|
|
2705
2705
|
type: "function",
|
|
2706
2706
|
},
|
|
2707
|
+
{
|
|
2708
|
+
inputs: [
|
|
2709
|
+
{
|
|
2710
|
+
internalType: "uint24[]",
|
|
2711
|
+
name: "_perpetualIds",
|
|
2712
|
+
type: "uint24[]",
|
|
2713
|
+
},
|
|
2714
|
+
{
|
|
2715
|
+
internalType: "address",
|
|
2716
|
+
name: "_traderAddress",
|
|
2717
|
+
type: "address",
|
|
2718
|
+
},
|
|
2719
|
+
],
|
|
2720
|
+
name: "getMarginAccounts",
|
|
2721
|
+
outputs: [
|
|
2722
|
+
{
|
|
2723
|
+
components: [
|
|
2724
|
+
{
|
|
2725
|
+
internalType: "int128",
|
|
2726
|
+
name: "fLockedInValueQC",
|
|
2727
|
+
type: "int128",
|
|
2728
|
+
},
|
|
2729
|
+
{
|
|
2730
|
+
internalType: "int128",
|
|
2731
|
+
name: "fCashCC",
|
|
2732
|
+
type: "int128",
|
|
2733
|
+
},
|
|
2734
|
+
{
|
|
2735
|
+
internalType: "int128",
|
|
2736
|
+
name: "fPositionBC",
|
|
2737
|
+
type: "int128",
|
|
2738
|
+
},
|
|
2739
|
+
{
|
|
2740
|
+
internalType: "int128",
|
|
2741
|
+
name: "fUnitAccumulatedFundingStart",
|
|
2742
|
+
type: "int128",
|
|
2743
|
+
},
|
|
2744
|
+
],
|
|
2745
|
+
internalType: "struct PerpStorage.MarginAccount[]",
|
|
2746
|
+
name: "",
|
|
2747
|
+
type: "tuple[]",
|
|
2748
|
+
},
|
|
2749
|
+
],
|
|
2750
|
+
stateMutability: "view",
|
|
2751
|
+
type: "function",
|
|
2752
|
+
},
|
|
2707
2753
|
{
|
|
2708
2754
|
inputs: [
|
|
2709
2755
|
{
|
package/src/marketData.ts
CHANGED
|
@@ -601,6 +601,7 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
601
601
|
const perpetualState = PerpetualDataHandler._parseAMMState(
|
|
602
602
|
order.symbol,
|
|
603
603
|
ammState,
|
|
604
|
+
[0n, 0n], // not used below
|
|
604
605
|
indexPriceInfo,
|
|
605
606
|
this.symbolToPerpStaticInfo
|
|
606
607
|
);
|
|
@@ -1505,7 +1506,7 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
1505
1506
|
indexPriceInfo?: [number, number, boolean, boolean],
|
|
1506
1507
|
overrides?: Overrides
|
|
1507
1508
|
): Promise<PerpetualState> {
|
|
1508
|
-
if (this.proxyContract == null) {
|
|
1509
|
+
if (this.proxyContract == null || this.multicall == null) {
|
|
1509
1510
|
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
1510
1511
|
}
|
|
1511
1512
|
if (indexPriceInfo == undefined) {
|
|
@@ -1516,6 +1517,7 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
1516
1517
|
symbol,
|
|
1517
1518
|
this.symbolToPerpStaticInfo,
|
|
1518
1519
|
this.proxyContract,
|
|
1520
|
+
this.multicall,
|
|
1519
1521
|
indexPriceInfo,
|
|
1520
1522
|
overrides
|
|
1521
1523
|
);
|
|
@@ -1996,6 +1998,7 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
1996
1998
|
let iFrom = 1;
|
|
1997
1999
|
let poolStates: Array<PoolState> = [];
|
|
1998
2000
|
let perpStates: Array<PerpetualState> = [];
|
|
2001
|
+
let longShort: Array<[bigint, bigint]> = [];
|
|
1999
2002
|
while (iFrom <= numPools) {
|
|
2000
2003
|
const proxyCalls: Multicall3.Call3Struct[] = [
|
|
2001
2004
|
// getLiquidityPools
|
|
@@ -2012,7 +2015,16 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
2012
2015
|
_nestedPerpetualIDs.slice(iFrom - 1, iFrom + chunkSize - 1).flat(), // from-to does not include "to"
|
|
2013
2016
|
]),
|
|
2014
2017
|
},
|
|
2018
|
+
{
|
|
2019
|
+
target: _proxyContract.target,
|
|
2020
|
+
allowFailure: false,
|
|
2021
|
+
callData: _proxyContract.interface.encodeFunctionData("getMarginAccounts", [
|
|
2022
|
+
_nestedPerpetualIDs.slice(iFrom - 1, iFrom + chunkSize - 1).flat(), // from-to does not include "to"
|
|
2023
|
+
ZERO_ADDRESS,
|
|
2024
|
+
]),
|
|
2025
|
+
},
|
|
2015
2026
|
];
|
|
2027
|
+
|
|
2016
2028
|
// multicall
|
|
2017
2029
|
const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
2018
2030
|
const pools = _proxyContract.interface.decodeFunctionResult(
|
|
@@ -2022,15 +2034,32 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
2022
2034
|
const perps = _proxyContract.interface.decodeFunctionResult(
|
|
2023
2035
|
"getPerpetuals",
|
|
2024
2036
|
encodedResults[1].returnData
|
|
2025
|
-
)[0] as
|
|
2026
|
-
|
|
2037
|
+
)[0] as PerpStorage.PerpetualDataStructOutput[];
|
|
2038
|
+
const margins = _proxyContract.interface.decodeFunctionResult(
|
|
2039
|
+
"getMarginAccounts",
|
|
2040
|
+
encodedResults[2].returnData
|
|
2041
|
+
)[0] as PerpStorage.MarginAccountStructOutput[];
|
|
2042
|
+
longShort = longShort.concat(MarketData._marginAccountsToPosBC(margins, perps));
|
|
2027
2043
|
poolStates = poolStates.concat(MarketData._poolDataToPoolState(pools, _poolStaticInfos));
|
|
2028
|
-
perpStates = perpStates.concat(MarketData._perpetualDataToPerpetualState(perps, _symbolList));
|
|
2044
|
+
perpStates = perpStates.concat(MarketData._perpetualDataToPerpetualState(perps, longShort, _symbolList));
|
|
2029
2045
|
iFrom = iFrom + chunkSize + 1;
|
|
2030
2046
|
}
|
|
2031
2047
|
return { pools: poolStates, perpetuals: perpStates };
|
|
2032
2048
|
}
|
|
2033
2049
|
|
|
2050
|
+
protected static _marginAccountsToPosBC(
|
|
2051
|
+
ms: PerpStorage.MarginAccountStructOutput[],
|
|
2052
|
+
p: PerpStorage.PerpetualDataStructOutput[]
|
|
2053
|
+
): Array<[bigint, bigint]> {
|
|
2054
|
+
let longShort = new Array<[bigint, bigint]>();
|
|
2055
|
+
for (let k = 0; k < ms.length; k++) {
|
|
2056
|
+
const oi = p[k].fOpenInterest;
|
|
2057
|
+
const ammPos = ms[k].fPositionBC;
|
|
2058
|
+
longShort.push(PerpetualDataHandler._oiAndAmmPosToLongShort(oi, ammPos));
|
|
2059
|
+
}
|
|
2060
|
+
return longShort;
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2034
2063
|
/**
|
|
2035
2064
|
* Parse liquidity pool state obtained on-chain
|
|
2036
2065
|
* @param _liquidityPools
|
|
@@ -2068,21 +2097,29 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
2068
2097
|
*/
|
|
2069
2098
|
protected static _perpetualDataToPerpetualState(
|
|
2070
2099
|
_perpetuals: any[],
|
|
2100
|
+
_longShortBC: [bigint, bigint][],
|
|
2071
2101
|
_symbolList: Map<string, string>
|
|
2072
2102
|
): PerpetualState[] {
|
|
2073
|
-
const perpStates =
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2103
|
+
const perpStates = new Array<PerpetualState>();
|
|
2104
|
+
for (let k = 0; k < _perpetuals.length; k++) {
|
|
2105
|
+
const perp = _perpetuals[k];
|
|
2106
|
+
perpStates.push({
|
|
2107
|
+
//PerpetualState
|
|
2108
|
+
id: Number(perp.id!),
|
|
2109
|
+
state: PERP_STATE_STR[perp.state!],
|
|
2110
|
+
baseCurrency: contractSymbolToSymbol(perp.S2BaseCCY!, _symbolList)!,
|
|
2111
|
+
quoteCurrency: contractSymbolToSymbol(perp.S2QuoteCCY!, _symbolList)!,
|
|
2112
|
+
indexPrice: 0, //fill later
|
|
2113
|
+
collToQuoteIndexPrice: 0, //fill later
|
|
2114
|
+
markPrice: ABK64x64ToFloat(perp.currentMarkPremiumRate!.fPrice), // fill later: indexS2 * (1 + markPremiumRate),
|
|
2115
|
+
midPrice: 0, // fill later
|
|
2116
|
+
currentFundingRateBps: 1e4 * ABK64x64ToFloat(perp.fCurrentFundingRate!),
|
|
2117
|
+
openInterestBC: ABK64x64ToFloat(perp.fOpenInterest!),
|
|
2118
|
+
isMarketClosed: false, //fill later
|
|
2119
|
+
longBC: ABK64x64ToFloat(_longShortBC[k][0]),
|
|
2120
|
+
shortBC: ABK64x64ToFloat(_longShortBC[k][1]),
|
|
2121
|
+
});
|
|
2122
|
+
}
|
|
2086
2123
|
return perpStates;
|
|
2087
2124
|
}
|
|
2088
2125
|
|
package/src/nodeSDKTypes.ts
CHANGED
|
@@ -150,6 +150,8 @@ export interface PerpetualState {
|
|
|
150
150
|
midPrice: number;
|
|
151
151
|
currentFundingRateBps: number;
|
|
152
152
|
openInterestBC: number;
|
|
153
|
+
longBC: number;
|
|
154
|
+
shortBC: number;
|
|
153
155
|
isMarketClosed: boolean;
|
|
154
156
|
}
|
|
155
157
|
|
|
@@ -495,3 +497,30 @@ export interface LiquidityPoolData {
|
|
|
495
497
|
totalSupplyShareToken: number; // state
|
|
496
498
|
fBrokerFundCashCC: number; // state: amount of cash in broker fund
|
|
497
499
|
}
|
|
500
|
+
|
|
501
|
+
// referral types:
|
|
502
|
+
|
|
503
|
+
export const referralTypes = {
|
|
504
|
+
// ["string", "address", "uint32", "uint256"],
|
|
505
|
+
// [rc.code, rc.referrerAddr, passOnPercTwoDigitsFormat, Math.round(rc.createdOn)]
|
|
506
|
+
NewCode: [
|
|
507
|
+
{ name: "code", type: "string" },
|
|
508
|
+
{ name: "referrerAddr", type: "address" },
|
|
509
|
+
{ name: "passOnPercTDF", type: "uint32" },
|
|
510
|
+
{ name: "createdOn", type: "uint256" },
|
|
511
|
+
],
|
|
512
|
+
// ["address", "address", "uint32", "uint256"],
|
|
513
|
+
// [rc.parentAddr, rc.referToAddr, passOnPercTwoDigitsFormat, Math.round(rc.createdOn)]
|
|
514
|
+
NewReferral: [
|
|
515
|
+
{ name: "parentAddr", type: "address" },
|
|
516
|
+
{ name: "referToAddr", type: "address" },
|
|
517
|
+
{ name: "passOnPercTDF", type: "uint32" },
|
|
518
|
+
{ name: "createdOn", type: "uint256" },
|
|
519
|
+
],
|
|
520
|
+
// ["string", "address", "uint256"], [rc.code, rc.traderAddr, Math.round(rc.createdOn)]
|
|
521
|
+
CodeSelection: [
|
|
522
|
+
{ name: "code", type: "string" },
|
|
523
|
+
{ name: "traderAddr", type: "address" },
|
|
524
|
+
{ name: "createdOn", type: "uint256" },
|
|
525
|
+
],
|
|
526
|
+
};
|
|
@@ -648,7 +648,7 @@ export default class PerpetualDataHandler {
|
|
|
648
648
|
referralRebate: ABK64x64ToFloat(perpInfos[j].fReferralRebateCC),
|
|
649
649
|
priceIds: perpInfos[j].priceIds,
|
|
650
650
|
isPyth: perpInfos[j].isPyth,
|
|
651
|
-
perpFlags: BigInt(perpInfos[j].perpFlags
|
|
651
|
+
perpFlags: BigInt(perpInfos[j].perpFlags?.toString() ?? 0),
|
|
652
652
|
};
|
|
653
653
|
infoArr.push(info);
|
|
654
654
|
}
|
|
@@ -780,7 +780,7 @@ export default class PerpetualDataHandler {
|
|
|
780
780
|
fTargetDFSize: ABK64x64ToFloat(BigInt(orig.fTargetDFSize)), // target default fund size
|
|
781
781
|
fkStar: ABK64x64ToFloat(BigInt(orig.fkStar)), // signed trade size that minimizes the AMM risk
|
|
782
782
|
fAMMTargetDD: ABK64x64ToFloat(BigInt(orig.fAMMTargetDD)), // parameter: target distance to default (=inverse of default probability)
|
|
783
|
-
perpFlags: BigInt(orig.perpFlags?.toString()), // flags for perpetual
|
|
783
|
+
perpFlags: BigInt(orig.perpFlags?.toString() ?? 0), // flags for perpetual
|
|
784
784
|
fMinimalTraderExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalTraderExposureEMA)), // parameter: minimal value for fCurrentTraderExposureEMA that we don't want to undershoot
|
|
785
785
|
fMinimalAMMExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalAMMExposureEMA)), // parameter: minimal abs value for fCurrentAMMExposureEMA that we don't want to undershoot
|
|
786
786
|
fSettlementS3PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS3PriceData)), //quanto index
|
|
@@ -1172,6 +1172,7 @@ export default class PerpetualDataHandler {
|
|
|
1172
1172
|
symbol: string,
|
|
1173
1173
|
symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
|
|
1174
1174
|
_proxyContract: Contract,
|
|
1175
|
+
_multicall: Multicall3,
|
|
1175
1176
|
indexPrices: [number, number, boolean, boolean],
|
|
1176
1177
|
overrides?: Overrides
|
|
1177
1178
|
): Promise<PerpetualState> {
|
|
@@ -1183,17 +1184,56 @@ export default class PerpetualDataHandler {
|
|
|
1183
1184
|
} else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
|
|
1184
1185
|
S3 = 1;
|
|
1185
1186
|
}
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1187
|
+
// multicall
|
|
1188
|
+
const proxyCalls: Multicall3.Call3Struct[] = [
|
|
1189
|
+
{
|
|
1190
|
+
target: _proxyContract.target,
|
|
1191
|
+
allowFailure: false,
|
|
1192
|
+
callData: _proxyContract.interface.encodeFunctionData("getAMMState", [
|
|
1193
|
+
perpId,
|
|
1194
|
+
[S2, S3].map(floatToABK64x64) as [bigint, bigint],
|
|
1195
|
+
]),
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
target: _proxyContract.target,
|
|
1199
|
+
allowFailure: false,
|
|
1200
|
+
callData: _proxyContract.interface.encodeFunctionData("getMarginAccounts", [[perpId], ZERO_ADDRESS]),
|
|
1201
|
+
},
|
|
1202
|
+
];
|
|
1203
|
+
// multicall
|
|
1204
|
+
const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
1205
|
+
let ammState = _proxyContract.interface.decodeFunctionResult("getAMMState", encodedResults[0].returnData)[0];
|
|
1206
|
+
const margin = _proxyContract.interface.decodeFunctionResult(
|
|
1207
|
+
"getMarginAccounts",
|
|
1208
|
+
encodedResults[1].returnData
|
|
1209
|
+
)[0] as any;
|
|
1210
|
+
|
|
1211
|
+
let longShort = PerpetualDataHandler._oiAndAmmPosToLongShort(ammState[11], margin[0].fPositionBC);
|
|
1212
|
+
return PerpetualDataHandler._parseAMMState(symbol, ammState, longShort, indexPrices, symbolToPerpStaticInfo);
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
/**
|
|
1216
|
+
* Calculate long and short exposures from open interest and long/short
|
|
1217
|
+
* @param oi open interest
|
|
1218
|
+
* @param ammPos amm net exposure
|
|
1219
|
+
* @returns long, short exposure
|
|
1220
|
+
*/
|
|
1221
|
+
protected static _oiAndAmmPosToLongShort(oi: bigint, ammPos: bigint): [bigint, bigint] {
|
|
1222
|
+
let short, long: bigint;
|
|
1223
|
+
if (ammPos > 0n) {
|
|
1224
|
+
short = oi;
|
|
1225
|
+
long = oi - ammPos;
|
|
1226
|
+
} else {
|
|
1227
|
+
long = oi;
|
|
1228
|
+
short = oi + ammPos;
|
|
1229
|
+
}
|
|
1230
|
+
return [long, short];
|
|
1192
1231
|
}
|
|
1193
1232
|
|
|
1194
1233
|
protected static _parseAMMState(
|
|
1195
1234
|
symbol: string,
|
|
1196
1235
|
ammState: bigint[],
|
|
1236
|
+
longShort: [bigint, bigint],
|
|
1197
1237
|
indexPrices: [number, number, boolean, boolean],
|
|
1198
1238
|
symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
|
|
1199
1239
|
) {
|
|
@@ -1219,6 +1259,8 @@ export default class PerpetualDataHandler {
|
|
|
1219
1259
|
currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
|
|
1220
1260
|
openInterestBC: ABK64x64ToFloat(ammState[11]),
|
|
1221
1261
|
isMarketClosed: indexPrices[2] || indexPrices[3],
|
|
1262
|
+
longBC: ABK64x64ToFloat(longShort[0]),
|
|
1263
|
+
shortBC: ABK64x64ToFloat(longShort[1]),
|
|
1222
1264
|
};
|
|
1223
1265
|
return state;
|
|
1224
1266
|
}
|
|
@@ -1374,10 +1416,10 @@ export default class PerpetualDataHandler {
|
|
|
1374
1416
|
leverage: Number(order.leverageTDR) / 100,
|
|
1375
1417
|
deadline: Number(order.iDeadline),
|
|
1376
1418
|
executionTimestamp: Number(order.executionTimestamp),
|
|
1377
|
-
submittedTimestamp: "submittedTimestamp"
|
|
1419
|
+
submittedTimestamp: order["submittedTimestamp"] ? Number(order["submittedTimestamp"]) : undefined,
|
|
1378
1420
|
parentChildOrderIds:
|
|
1379
|
-
"parentChildDigest1" && "parentChildDigest2"
|
|
1380
|
-
? [order
|
|
1421
|
+
order["parentChildDigest1"] && order["parentChildDigest2"]
|
|
1422
|
+
? [order["parentChildDigest1"].toString(), order["parentChildDigest2"].toString()]
|
|
1381
1423
|
: undefined,
|
|
1382
1424
|
};
|
|
1383
1425
|
return userOrder;
|
|
@@ -1515,12 +1557,7 @@ export default class PerpetualDataHandler {
|
|
|
1515
1557
|
executionTimestamp: obOrder.executionTimestamp,
|
|
1516
1558
|
} as SmartContractOrder;
|
|
1517
1559
|
const order = PerpetualDataHandler.fromSmartContractOrder(scOrder, perpStaticInfo);
|
|
1518
|
-
|
|
1519
|
-
obOrder.parentChildDigest1.toString() != ZERO_ORDER_ID ||
|
|
1520
|
-
obOrder.parentChildDigest2.toString() != ZERO_ORDER_ID
|
|
1521
|
-
) {
|
|
1522
|
-
order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
|
|
1523
|
-
}
|
|
1560
|
+
order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
|
|
1524
1561
|
return order;
|
|
1525
1562
|
}
|
|
1526
1563
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { AbiCoder, JsonRpcProvider, keccak256, Provider, Signer, verifyMessage, Wallet } from "ethers";
|
|
2
|
-
import
|
|
1
|
+
import { AbiCoder, JsonRpcProvider, keccak256, Provider, Signer, verifyMessage, verifyTypedData, Wallet } from "ethers";
|
|
2
|
+
import {
|
|
3
|
+
APIReferPayload,
|
|
4
|
+
APIReferralCodePayload,
|
|
5
|
+
APIReferralCodeSelectionPayload,
|
|
6
|
+
referralTypes,
|
|
7
|
+
} from "./nodeSDKTypes";
|
|
3
8
|
|
|
4
9
|
/**
|
|
5
10
|
* This is a 'standalone' class that deals with signatures
|
|
@@ -127,6 +132,20 @@ export default class ReferralCodeSigner {
|
|
|
127
132
|
return digest;
|
|
128
133
|
}
|
|
129
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Convert payload to data struct to sign
|
|
137
|
+
* @param rc payload
|
|
138
|
+
* @returns typed data
|
|
139
|
+
*/
|
|
140
|
+
public static newReferralPayloadToTypedData(rc: APIReferPayload) {
|
|
141
|
+
return {
|
|
142
|
+
parentAddr: rc.parentAddr as `0x${string}`,
|
|
143
|
+
referToAddr: rc.referToAddr as `0x${string}`,
|
|
144
|
+
passOnPercTDF: Math.round(rc.passOnPercTDF),
|
|
145
|
+
createdOn: BigInt(Math.round(rc.createdOn)),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
130
149
|
/**
|
|
131
150
|
* Create digest for referralCodePayload that is to be signed
|
|
132
151
|
* @param rc payload
|
|
@@ -144,6 +163,20 @@ export default class ReferralCodeSigner {
|
|
|
144
163
|
return digest;
|
|
145
164
|
}
|
|
146
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Convert payload to data struct to sign
|
|
168
|
+
* @param rc payload
|
|
169
|
+
* @returns typed data
|
|
170
|
+
*/
|
|
171
|
+
public static referralCodeNewCodePayloadToTypedData(rc: APIReferralCodePayload) {
|
|
172
|
+
return {
|
|
173
|
+
code: rc.code,
|
|
174
|
+
referrerAddr: rc.referrerAddr as `0x${string}`,
|
|
175
|
+
passOnPercTDF: Math.round(rc.passOnPercTDF),
|
|
176
|
+
createdOn: BigInt(Math.round(rc.createdOn)),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
147
180
|
/**
|
|
148
181
|
* Create digest for APIReferralCodeSelectionPayload that is to be signed
|
|
149
182
|
* @param rc payload
|
|
@@ -157,6 +190,19 @@ export default class ReferralCodeSigner {
|
|
|
157
190
|
return digest;
|
|
158
191
|
}
|
|
159
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Convert payload to data struct to sign
|
|
195
|
+
* @param rc payload
|
|
196
|
+
* @returns typed data
|
|
197
|
+
*/
|
|
198
|
+
public static codeSelectionPayloadToTypedData(rc: APIReferralCodeSelectionPayload) {
|
|
199
|
+
return {
|
|
200
|
+
code: rc.code,
|
|
201
|
+
traderAddr: rc.traderAddr as `0x${string}`,
|
|
202
|
+
createdOn: BigInt(Math.round(rc.createdOn)),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
160
206
|
/**
|
|
161
207
|
* Check whether signature is correct on payload:
|
|
162
208
|
* - the referrer always signs
|
|
@@ -164,31 +210,55 @@ export default class ReferralCodeSigner {
|
|
|
164
210
|
* @param rc referralcode payload with a signature
|
|
165
211
|
* @returns true if correctly signed, false otherwise
|
|
166
212
|
*/
|
|
167
|
-
public static
|
|
213
|
+
public static checkNewCodeSignature(rc: APIReferralCodePayload) {
|
|
168
214
|
if (rc.signature == undefined || rc.signature == "") {
|
|
169
215
|
return false;
|
|
170
216
|
}
|
|
171
217
|
try {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const signerAddress =
|
|
218
|
+
// typed-data (^2.x.x)
|
|
219
|
+
const typedData = ReferralCodeSigner.referralCodeNewCodePayloadToTypedData(rc);
|
|
220
|
+
const signerAddress = verifyTypedData({}, { NewCode: referralTypes.NewCode }, typedData, rc.signature);
|
|
175
221
|
return rc.referrerAddr.toLowerCase() == signerAddress.toLowerCase();
|
|
176
222
|
} catch (err) {
|
|
177
|
-
|
|
223
|
+
console.log(err);
|
|
224
|
+
// digest (1.x.x)
|
|
225
|
+
try {
|
|
226
|
+
let digest = ReferralCodeSigner._referralCodeNewCodePayloadToMessage(rc);
|
|
227
|
+
let digestBuffer = Buffer.from(digest.substring(2, digest.length), "hex");
|
|
228
|
+
const signerAddress = verifyMessage(digestBuffer, rc.signature);
|
|
229
|
+
return rc.referrerAddr.toLowerCase() == signerAddress.toLowerCase();
|
|
230
|
+
} catch (err) {
|
|
231
|
+
console.log(err);
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
178
234
|
}
|
|
179
235
|
}
|
|
180
236
|
|
|
181
|
-
public static
|
|
237
|
+
public static checkCodeSelectionSignature(rc: APIReferralCodeSelectionPayload) {
|
|
182
238
|
if (rc.signature == undefined || rc.signature == "") {
|
|
183
239
|
return false;
|
|
184
240
|
}
|
|
185
241
|
try {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const signerAddress =
|
|
242
|
+
// typed-data (^2.x.x)
|
|
243
|
+
const typedData = ReferralCodeSigner.codeSelectionPayloadToTypedData(rc);
|
|
244
|
+
const signerAddress = verifyTypedData(
|
|
245
|
+
{},
|
|
246
|
+
{ CodeSelection: referralTypes.CodeSelection },
|
|
247
|
+
typedData,
|
|
248
|
+
rc.signature
|
|
249
|
+
);
|
|
189
250
|
return rc.traderAddr.toLowerCase() == signerAddress.toLowerCase();
|
|
190
251
|
} catch (err) {
|
|
191
|
-
|
|
252
|
+
console.log(err);
|
|
253
|
+
// digest (1.x.x)
|
|
254
|
+
try {
|
|
255
|
+
let digest = ReferralCodeSigner._codeSelectionPayloadToMessage(rc);
|
|
256
|
+
let digestBuffer = Buffer.from(digest.substring(2, digest.length), "hex");
|
|
257
|
+
const signerAddress = verifyMessage(digestBuffer, rc.signature);
|
|
258
|
+
return rc.traderAddr.toLowerCase() == signerAddress.toLowerCase();
|
|
259
|
+
} catch (err) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
192
262
|
}
|
|
193
263
|
}
|
|
194
264
|
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const D8X_SDK_VERSION = "2.0.
|
|
1
|
+
export const D8X_SDK_VERSION = "2.0.9-alpha";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PerpStorage__factory.js","sourceRoot":"","sources":["../../../../src/contracts/factories/PerpStorage__factory.ts"],"names":[],"mappings":"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"}
|