@drift-labs/sdk 0.2.0-master.3 → 0.2.0-master.30
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/README.md +13 -13
- package/lib/accounts/bulkUserStatsSubscription.d.ts +7 -0
- package/lib/accounts/bulkUserStatsSubscription.js +21 -0
- package/lib/accounts/bulkUserSubscription.js +0 -1
- package/lib/accounts/fetch.d.ts +2 -1
- package/lib/accounts/fetch.js +9 -1
- package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +16 -16
- package/lib/accounts/pollingClearingHouseAccountSubscriber.js +31 -28
- package/lib/accounts/pollingUserStatsAccountSubscriber.d.ts +27 -0
- package/lib/accounts/pollingUserStatsAccountSubscriber.js +113 -0
- package/lib/accounts/types.d.ts +22 -11
- package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +17 -17
- package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +37 -35
- package/lib/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
- package/lib/accounts/webSocketUserStatsAccountSubsriber.js +47 -0
- package/lib/addresses/marketAddresses.d.ts +1 -3
- package/lib/addresses/pda.d.ts +10 -4
- package/lib/addresses/pda.js +51 -14
- package/lib/admin.d.ts +34 -22
- package/lib/admin.js +182 -73
- package/lib/clearingHouse.d.ts +120 -42
- package/lib/clearingHouse.js +1505 -254
- package/lib/clearingHouseConfig.d.ts +4 -4
- package/lib/clearingHouseUser.d.ts +50 -38
- package/lib/clearingHouseUser.js +410 -190
- package/lib/clearingHouseUserStats.d.ts +18 -0
- package/lib/clearingHouseUserStats.js +49 -0
- package/lib/clearingHouseUserStatsConfig.d.ts +14 -0
- package/lib/clearingHouseUserStatsConfig.js +2 -0
- package/lib/config.d.ts +7 -9
- package/lib/config.js +21 -21
- package/lib/constants/numericConstants.d.ts +18 -12
- package/lib/constants/numericConstants.js +28 -21
- package/lib/constants/perpMarkets.d.ts +18 -0
- package/lib/constants/{markets.js → perpMarkets.js} +7 -7
- package/lib/constants/spotMarkets.d.ts +19 -0
- package/lib/constants/spotMarkets.js +53 -0
- package/lib/dlob/DLOB.d.ts +73 -0
- package/lib/dlob/DLOB.js +553 -0
- package/lib/dlob/DLOBNode.d.ts +52 -0
- package/lib/dlob/DLOBNode.js +82 -0
- package/lib/dlob/NodeList.d.ts +26 -0
- package/lib/dlob/NodeList.js +138 -0
- package/lib/events/eventList.js +3 -0
- package/lib/events/eventSubscriber.d.ts +4 -2
- package/lib/events/eventSubscriber.js +16 -9
- package/lib/events/fetchLogs.d.ts +10 -1
- package/lib/events/fetchLogs.js +27 -7
- package/lib/events/pollingLogProvider.d.ts +2 -1
- package/lib/events/pollingLogProvider.js +6 -2
- package/lib/events/sort.js +8 -11
- package/lib/events/types.d.ts +7 -2
- package/lib/events/types.js +5 -0
- package/lib/examples/makeTradeExample.js +20 -8
- package/lib/factory/bigNum.d.ts +1 -0
- package/lib/factory/bigNum.js +34 -10
- package/lib/idl/clearing_house.json +4313 -1433
- package/lib/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
- package/lib/index.d.ts +21 -6
- package/lib/index.js +25 -6
- package/lib/math/amm.d.ts +8 -5
- package/lib/math/amm.js +68 -46
- package/lib/math/auction.js +4 -1
- package/lib/math/conversion.js +1 -1
- package/lib/math/funding.d.ts +6 -6
- package/lib/math/funding.js +11 -10
- package/lib/math/insurance.d.ts +4 -0
- package/lib/math/insurance.js +27 -0
- package/lib/math/margin.d.ts +11 -0
- package/lib/math/margin.js +77 -0
- package/lib/math/market.d.ts +14 -9
- package/lib/math/market.js +69 -7
- package/lib/math/oracles.d.ts +4 -0
- package/lib/math/oracles.js +36 -8
- package/lib/math/orders.d.ts +6 -2
- package/lib/math/orders.js +78 -3
- package/lib/math/position.d.ts +21 -13
- package/lib/math/position.js +76 -36
- package/lib/math/repeg.js +14 -5
- package/lib/math/spotBalance.d.ts +22 -0
- package/lib/math/spotBalance.js +193 -0
- package/lib/math/spotMarket.d.ts +4 -0
- package/lib/math/spotMarket.js +8 -0
- package/lib/math/spotPosition.d.ts +6 -0
- package/lib/math/spotPosition.js +23 -0
- package/lib/math/trade.d.ts +10 -10
- package/lib/math/trade.js +22 -29
- package/lib/oracles/pythClient.js +1 -1
- package/lib/oracles/quoteAssetOracleClient.js +1 -1
- package/lib/oracles/switchboardClient.js +1 -1
- package/lib/orderParams.d.ts +14 -5
- package/lib/orderParams.js +12 -92
- package/lib/serum/serumSubscriber.d.ts +23 -0
- package/lib/serum/serumSubscriber.js +41 -0
- package/lib/serum/types.d.ts +11 -0
- package/lib/serum/types.js +2 -0
- package/lib/slot/SlotSubscriber.d.ts +7 -0
- package/lib/slot/SlotSubscriber.js +3 -0
- package/lib/{mockUSDCFaucet.d.ts → tokenFaucet.d.ts} +8 -5
- package/lib/{mockUSDCFaucet.js → tokenFaucet.js} +63 -51
- package/lib/tx/retryTxSender.d.ts +1 -1
- package/lib/tx/retryTxSender.js +13 -4
- package/lib/tx/types.d.ts +1 -1
- package/lib/tx/utils.js +1 -1
- package/lib/types.d.ts +474 -123
- package/lib/types.js +99 -5
- package/lib/userMap/userMap.d.ts +25 -0
- package/lib/userMap/userMap.js +73 -0
- package/lib/userMap/userStatsMap.d.ts +19 -0
- package/lib/userMap/userStatsMap.js +68 -0
- package/lib/util/computeUnits.js +1 -1
- package/lib/util/getTokenAddress.d.ts +2 -0
- package/lib/util/getTokenAddress.js +9 -0
- package/package.json +9 -5
- package/src/accounts/bulkUserStatsSubscription.ts +33 -0
- package/src/accounts/bulkUserSubscription.ts +0 -1
- package/src/accounts/fetch.ts +27 -2
- package/src/accounts/pollingClearingHouseAccountSubscriber.ts +46 -42
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +172 -0
- package/src/accounts/types.ts +31 -11
- package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +64 -59
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +80 -0
- package/src/addresses/marketAddresses.ts +1 -2
- package/src/addresses/pda.ts +88 -14
- package/src/admin.ts +333 -128
- package/src/assert/assert.js +9 -0
- package/src/clearingHouse.ts +2464 -458
- package/src/clearingHouseConfig.ts +4 -3
- package/src/clearingHouseUser.ts +747 -291
- package/src/clearingHouseUserStats.ts +75 -0
- package/src/clearingHouseUserStatsConfig.ts +18 -0
- package/src/config.ts +30 -31
- package/src/constants/numericConstants.ts +41 -25
- package/src/constants/{markets.ts → perpMarkets.ts} +10 -10
- package/src/constants/spotMarkets.ts +72 -0
- package/src/dlob/DLOB.ts +868 -0
- package/src/dlob/DLOBNode.ts +162 -0
- package/src/dlob/NodeList.ts +185 -0
- package/src/events/eventList.js +77 -0
- package/src/events/eventList.ts +3 -0
- package/src/events/eventSubscriber.ts +20 -12
- package/src/events/fetchLogs.ts +35 -8
- package/src/events/pollingLogProvider.ts +10 -2
- package/src/events/sort.ts +11 -15
- package/src/events/types.ts +16 -1
- package/src/examples/makeTradeExample.js +157 -0
- package/src/examples/makeTradeExample.ts +32 -14
- package/src/factory/bigNum.ts +42 -13
- package/src/idl/clearing_house.json +4313 -1433
- package/src/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
- package/src/index.ts +21 -6
- package/src/math/amm.ts +136 -66
- package/src/math/auction.ts +5 -1
- package/src/math/conversion.ts +2 -2
- package/src/math/funding.ts +20 -18
- package/src/math/insurance.ts +35 -0
- package/src/math/margin.ts +127 -0
- package/src/math/market.ts +138 -12
- package/src/math/oracles.ts +63 -9
- package/src/math/orders.ts +138 -4
- package/src/math/position.ts +119 -58
- package/src/math/repeg.ts +16 -6
- package/src/math/spotBalance.ts +316 -0
- package/src/math/spotMarket.ts +9 -0
- package/src/math/spotPosition.ts +47 -0
- package/src/math/trade.ts +43 -49
- package/src/oracles/pythClient.ts +2 -2
- package/src/oracles/quoteAssetOracleClient.ts +2 -2
- package/src/oracles/switchboardClient.ts +2 -2
- package/src/orderParams.ts +24 -137
- package/src/serum/serumSubscriber.ts +80 -0
- package/src/serum/types.ts +13 -0
- package/src/slot/SlotSubscriber.ts +11 -1
- package/src/token/index.js +38 -0
- package/src/{mockUSDCFaucet.ts → tokenFaucet.ts} +82 -70
- package/src/tx/retryTxSender.ts +16 -5
- package/src/tx/types.js +2 -0
- package/src/tx/types.ts +2 -1
- package/src/tx/utils.js +17 -0
- package/src/tx/utils.ts +1 -1
- package/src/types.ts +477 -125
- package/src/userMap/userMap.ts +100 -0
- package/src/userMap/userStatsMap.ts +110 -0
- package/src/util/computeUnits.js +21 -11
- package/src/util/computeUnits.ts +1 -1
- package/src/util/getTokenAddress.js +9 -0
- package/src/util/getTokenAddress.ts +18 -0
- package/src/util/promiseTimeout.js +14 -0
- package/src/util/tps.js +27 -0
- package/tests/bn/test.ts +12 -3
- package/tests/dlob/helpers.ts +374 -0
- package/tests/dlob/test.ts +2865 -0
- package/lib/constants/banks.d.ts +0 -16
- package/lib/constants/banks.js +0 -34
- package/lib/constants/markets.d.ts +0 -19
- package/lib/math/bankBalance.d.ts +0 -9
- package/lib/math/bankBalance.js +0 -75
- package/lib/math/state.d.ts +0 -8
- package/lib/math/state.js +0 -15
- package/lib/orders.d.ts +0 -8
- package/lib/orders.js +0 -134
- package/src/constants/banks.ts +0 -43
- package/src/math/bankBalance.ts +0 -112
- package/src/math/state.ts +0 -14
- package/src/math/utils.js +0 -27
- package/src/math/utils.js.map +0 -1
- package/src/orders.ts +0 -244
- package/src/util/computeUnits.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ClearingHouse } from './clearingHouse';
|
|
2
|
+
import { PublicKey } from '@solana/web3.js';
|
|
3
|
+
import { DataAndSlot, UserStatsAccountSubscriber } from './accounts/types';
|
|
4
|
+
import { ClearingHouseUserStatsConfig } from './clearingHouseUserStatsConfig';
|
|
5
|
+
import { PollingUserStatsAccountSubscriber } from './accounts/pollingUserStatsAccountSubscriber';
|
|
6
|
+
import { WebSocketUserStatsAccountSubscriber } from './accounts/webSocketUserStatsAccountSubsriber';
|
|
7
|
+
import { ReferrerInfo, UserStatsAccount } from './types';
|
|
8
|
+
import {
|
|
9
|
+
getUserAccountPublicKeySync,
|
|
10
|
+
getUserStatsAccountPublicKey,
|
|
11
|
+
} from './addresses/pda';
|
|
12
|
+
|
|
13
|
+
export class ClearingHouseUserStats {
|
|
14
|
+
clearingHouse: ClearingHouse;
|
|
15
|
+
userStatsAccountPublicKey: PublicKey;
|
|
16
|
+
accountSubscriber: UserStatsAccountSubscriber;
|
|
17
|
+
isSubscribed: boolean;
|
|
18
|
+
|
|
19
|
+
public constructor(config: ClearingHouseUserStatsConfig) {
|
|
20
|
+
this.clearingHouse = config.clearingHouse;
|
|
21
|
+
this.userStatsAccountPublicKey = config.userStatsAccountPublicKey;
|
|
22
|
+
if (config.accountSubscription?.type === 'polling') {
|
|
23
|
+
this.accountSubscriber = new PollingUserStatsAccountSubscriber(
|
|
24
|
+
config.clearingHouse.program,
|
|
25
|
+
config.userStatsAccountPublicKey,
|
|
26
|
+
config.accountSubscription.accountLoader
|
|
27
|
+
);
|
|
28
|
+
} else {
|
|
29
|
+
this.accountSubscriber = new WebSocketUserStatsAccountSubscriber(
|
|
30
|
+
config.clearingHouse.program,
|
|
31
|
+
config.userStatsAccountPublicKey
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public async subscribe(): Promise<boolean> {
|
|
37
|
+
this.isSubscribed = await this.accountSubscriber.subscribe();
|
|
38
|
+
return this.isSubscribed;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public async fetchAccounts(): Promise<void> {
|
|
42
|
+
await this.accountSubscriber.fetch();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public async unsubscribe(): Promise<void> {
|
|
46
|
+
await this.accountSubscriber.unsubscribe();
|
|
47
|
+
this.isSubscribed = false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public getAccountAndSlot(): DataAndSlot<UserStatsAccount> {
|
|
51
|
+
return this.accountSubscriber.getUserStatsAccountAndSlot();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public getAccount(): UserStatsAccount {
|
|
55
|
+
return this.accountSubscriber.getUserStatsAccountAndSlot().data;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public getReferrerInfo(): ReferrerInfo | undefined {
|
|
59
|
+
if (this.getAccount().referrer.equals(PublicKey.default)) {
|
|
60
|
+
return undefined;
|
|
61
|
+
} else {
|
|
62
|
+
return {
|
|
63
|
+
referrer: getUserAccountPublicKeySync(
|
|
64
|
+
this.clearingHouse.program.programId,
|
|
65
|
+
this.getAccount().referrer,
|
|
66
|
+
0
|
|
67
|
+
),
|
|
68
|
+
referrerStats: getUserStatsAccountPublicKey(
|
|
69
|
+
this.clearingHouse.program.programId,
|
|
70
|
+
this.getAccount().referrer
|
|
71
|
+
),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ClearingHouse } from './clearingHouse';
|
|
2
|
+
import { PublicKey } from '@solana/web3.js';
|
|
3
|
+
import { BulkAccountLoader } from './accounts/bulkAccountLoader';
|
|
4
|
+
|
|
5
|
+
export type ClearingHouseUserStatsConfig = {
|
|
6
|
+
accountSubscription?: ClearingHouseUserStatsAccountSubscriptionConfig;
|
|
7
|
+
clearingHouse: ClearingHouse;
|
|
8
|
+
userStatsAccountPublicKey: PublicKey;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type ClearingHouseUserStatsAccountSubscriptionConfig =
|
|
12
|
+
| {
|
|
13
|
+
type: 'websocket';
|
|
14
|
+
}
|
|
15
|
+
| {
|
|
16
|
+
type: 'polling';
|
|
17
|
+
accountLoader: BulkAccountLoader;
|
|
18
|
+
};
|
package/src/config.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
DevnetPerpMarkets,
|
|
3
3
|
MainnetMarkets,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from './constants/
|
|
4
|
+
PerpMarketConfig,
|
|
5
|
+
PerpMarkets,
|
|
6
|
+
} from './constants/perpMarkets';
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from './constants/
|
|
13
|
-
import { BN } from '@project-serum/anchor';
|
|
8
|
+
SpotMarketConfig,
|
|
9
|
+
SpotMarkets,
|
|
10
|
+
DevnetSpotMarkets,
|
|
11
|
+
MainnetSpotMarkets,
|
|
12
|
+
} from './constants/spotMarkets';
|
|
14
13
|
import { OracleInfo } from './oracles/types';
|
|
15
14
|
|
|
16
15
|
type DriftConfig = {
|
|
@@ -18,8 +17,8 @@ type DriftConfig = {
|
|
|
18
17
|
PYTH_ORACLE_MAPPING_ADDRESS: string;
|
|
19
18
|
CLEARING_HOUSE_PROGRAM_ID: string;
|
|
20
19
|
USDC_MINT_ADDRESS: string;
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
PERP_MARKETS: PerpMarketConfig[];
|
|
21
|
+
SPOT_MARKETS: SpotMarketConfig[];
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
export type DriftEnv = 'devnet' | 'mainnet-beta';
|
|
@@ -28,18 +27,18 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
|
|
|
28
27
|
devnet: {
|
|
29
28
|
ENV: 'devnet',
|
|
30
29
|
PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
|
|
31
|
-
CLEARING_HOUSE_PROGRAM_ID: '
|
|
30
|
+
CLEARING_HOUSE_PROGRAM_ID: 'By7XjakxXVnQ9gMZ4VT98DenTgBCeP295A58ybzgwVPZ',
|
|
32
31
|
USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
PERP_MARKETS: DevnetPerpMarkets,
|
|
33
|
+
SPOT_MARKETS: DevnetSpotMarkets,
|
|
35
34
|
},
|
|
36
35
|
'mainnet-beta': {
|
|
37
36
|
ENV: 'mainnet-beta',
|
|
38
37
|
PYTH_ORACLE_MAPPING_ADDRESS: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
|
|
39
38
|
CLEARING_HOUSE_PROGRAM_ID: 'dammHkt7jmytvbS3nHTxQNEcP59aE57nxwV21YdqEDN',
|
|
40
39
|
USDC_MINT_ADDRESS: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
PERP_MARKETS: MainnetMarkets,
|
|
41
|
+
SPOT_MARKETS: MainnetSpotMarkets,
|
|
43
42
|
},
|
|
44
43
|
};
|
|
45
44
|
|
|
@@ -67,34 +66,34 @@ export const initialize = (props: {
|
|
|
67
66
|
return currentConfig;
|
|
68
67
|
};
|
|
69
68
|
|
|
70
|
-
export function
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
export function getMarketsAndOraclesForSubscription(env: DriftEnv): {
|
|
70
|
+
perpMarketIndexes: number[];
|
|
71
|
+
spotMarketIndexes: number[];
|
|
73
72
|
oracleInfos: OracleInfo[];
|
|
74
73
|
} {
|
|
75
|
-
const
|
|
76
|
-
const
|
|
74
|
+
const perpMarketIndexes = [];
|
|
75
|
+
const spotMarketIndexes = [];
|
|
77
76
|
const oracleInfos = new Map<string, OracleInfo>();
|
|
78
77
|
|
|
79
|
-
for (const market of
|
|
80
|
-
|
|
78
|
+
for (const market of PerpMarkets[env]) {
|
|
79
|
+
perpMarketIndexes.push(market.marketIndex);
|
|
81
80
|
oracleInfos.set(market.oracle.toString(), {
|
|
82
81
|
publicKey: market.oracle,
|
|
83
82
|
source: market.oracleSource,
|
|
84
83
|
});
|
|
85
84
|
}
|
|
86
85
|
|
|
87
|
-
for (const
|
|
88
|
-
|
|
89
|
-
oracleInfos.set(
|
|
90
|
-
publicKey:
|
|
91
|
-
source:
|
|
86
|
+
for (const spotMarket of SpotMarkets[env]) {
|
|
87
|
+
spotMarketIndexes.push(spotMarket.marketIndex);
|
|
88
|
+
oracleInfos.set(spotMarket.oracle.toString(), {
|
|
89
|
+
publicKey: spotMarket.oracle,
|
|
90
|
+
source: spotMarket.oracleSource,
|
|
92
91
|
});
|
|
93
92
|
}
|
|
94
93
|
|
|
95
94
|
return {
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
perpMarketIndexes: perpMarketIndexes,
|
|
96
|
+
spotMarketIndexes: spotMarketIndexes,
|
|
98
97
|
oracleInfos: Array.from(oracleInfos.values()),
|
|
99
98
|
};
|
|
100
99
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LAMPORTS_PER_SOL } from '@solana/web3.js';
|
|
1
2
|
import { BN } from '../';
|
|
2
3
|
|
|
3
4
|
export const ZERO = new BN(0);
|
|
@@ -11,28 +12,41 @@ export const TEN_MILLION = TEN_THOUSAND.mul(TEN_THOUSAND);
|
|
|
11
12
|
export const MAX_LEVERAGE = new BN(5);
|
|
12
13
|
|
|
13
14
|
export const QUOTE_PRECISION_EXP = new BN(6);
|
|
14
|
-
export const
|
|
15
|
-
export const
|
|
16
|
-
export const FUNDING_RATE_PRECISION_EXP =
|
|
17
|
-
|
|
15
|
+
export const FUNDING_RATE_BUFFER_PRECISION_EXP = new BN(3);
|
|
16
|
+
export const PRICE_PRECISION_EXP = new BN(6);
|
|
17
|
+
export const FUNDING_RATE_PRECISION_EXP = PRICE_PRECISION_EXP.mul(
|
|
18
|
+
FUNDING_RATE_BUFFER_PRECISION_EXP
|
|
18
19
|
);
|
|
19
|
-
export const PEG_PRECISION_EXP = new BN(
|
|
20
|
-
export const AMM_RESERVE_PRECISION_EXP = new BN(
|
|
21
|
-
|
|
22
|
-
export const
|
|
23
|
-
export const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
export const
|
|
28
|
-
export const
|
|
29
|
-
|
|
20
|
+
export const PEG_PRECISION_EXP = new BN(6);
|
|
21
|
+
export const AMM_RESERVE_PRECISION_EXP = new BN(9);
|
|
22
|
+
|
|
23
|
+
export const SPOT_MARKET_RATE_PRECISION_EXP = new BN(6);
|
|
24
|
+
export const SPOT_MARKET_RATE_PRECISION = new BN(10).pow(
|
|
25
|
+
SPOT_MARKET_RATE_PRECISION_EXP
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = new BN(10);
|
|
29
|
+
export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = new BN(10).pow(
|
|
30
|
+
SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export const SPOT_MARKET_UTILIZATION_PRECISION = new BN(1000000);
|
|
34
|
+
export const SPOT_MARKET_WEIGHT_PRECISION = new BN(10000);
|
|
35
|
+
export const SPOT_MARKET_BALANCE_PRECISION_EXP = new BN(9);
|
|
36
|
+
export const SPOT_MARKET_BALANCE_PRECISION = new BN(10).pow(
|
|
37
|
+
SPOT_MARKET_BALANCE_PRECISION_EXP
|
|
38
|
+
);
|
|
39
|
+
export const SPOT_MARKET_IMF_PRECISION_EXP = new BN(6);
|
|
40
|
+
|
|
41
|
+
export const SPOT_MARKET_IMF_PRECISION = new BN(10).pow(
|
|
42
|
+
SPOT_MARKET_IMF_PRECISION_EXP
|
|
30
43
|
);
|
|
44
|
+
export const LIQUIDATION_FEE_PRECISION = new BN(1000000);
|
|
31
45
|
|
|
32
46
|
export const QUOTE_PRECISION = new BN(10).pow(QUOTE_PRECISION_EXP);
|
|
33
|
-
export const
|
|
34
|
-
export const
|
|
35
|
-
|
|
47
|
+
export const PRICE_PRECISION = new BN(10).pow(PRICE_PRECISION_EXP);
|
|
48
|
+
export const FUNDING_RATE_BUFFER_PRECISION = new BN(10).pow(
|
|
49
|
+
FUNDING_RATE_BUFFER_PRECISION_EXP
|
|
36
50
|
);
|
|
37
51
|
export const PEG_PRECISION = new BN(10).pow(PEG_PRECISION_EXP);
|
|
38
52
|
|
|
@@ -42,15 +56,17 @@ export const BASE_PRECISION = AMM_RESERVE_PRECISION;
|
|
|
42
56
|
export const BASE_PRECISION_EXP = AMM_RESERVE_PRECISION_EXP;
|
|
43
57
|
|
|
44
58
|
export const AMM_TO_QUOTE_PRECISION_RATIO =
|
|
45
|
-
AMM_RESERVE_PRECISION.div(QUOTE_PRECISION); // 10^
|
|
46
|
-
export const PRICE_DIV_PEG =
|
|
47
|
-
export const PRICE_TO_QUOTE_PRECISION =
|
|
48
|
-
MARK_PRICE_PRECISION.div(QUOTE_PRECISION);
|
|
59
|
+
AMM_RESERVE_PRECISION.div(QUOTE_PRECISION); // 10^3
|
|
60
|
+
export const PRICE_DIV_PEG = PRICE_PRECISION.div(PEG_PRECISION); //10^1
|
|
61
|
+
export const PRICE_TO_QUOTE_PRECISION = PRICE_PRECISION.div(QUOTE_PRECISION); // 10^1
|
|
49
62
|
export const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO =
|
|
50
|
-
AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^
|
|
63
|
+
AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^9
|
|
51
64
|
export const MARGIN_PRECISION = TEN_THOUSAND;
|
|
52
|
-
export const BID_ASK_SPREAD_PRECISION = new BN(1000000);
|
|
65
|
+
export const BID_ASK_SPREAD_PRECISION = new BN(1000000); // 10^6
|
|
53
66
|
|
|
54
67
|
export const ONE_YEAR = new BN(31536000);
|
|
55
68
|
|
|
56
|
-
export const
|
|
69
|
+
export const QUOTE_SPOT_MARKET_INDEX = 0;
|
|
70
|
+
|
|
71
|
+
export const LAMPORTS_PRECISION = new BN(LAMPORTS_PER_SOL);
|
|
72
|
+
export const LAMPORTS_EXP = new BN(Math.log10(LAMPORTS_PER_SOL));
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OracleSource } from '../';
|
|
2
2
|
import { DriftEnv } from '../';
|
|
3
3
|
import { PublicKey } from '@solana/web3.js';
|
|
4
4
|
|
|
5
|
-
export type
|
|
5
|
+
export type PerpMarketConfig = {
|
|
6
6
|
fullName?: string;
|
|
7
7
|
category?: string[];
|
|
8
8
|
symbol: string;
|
|
9
9
|
baseAssetSymbol: string;
|
|
10
|
-
marketIndex:
|
|
10
|
+
marketIndex: number;
|
|
11
11
|
launchTs: number;
|
|
12
12
|
oracle: PublicKey;
|
|
13
13
|
oracleSource: OracleSource;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const
|
|
16
|
+
export const DevnetPerpMarkets: PerpMarketConfig[] = [
|
|
17
17
|
{
|
|
18
18
|
fullName: 'Solana',
|
|
19
19
|
category: ['L1', 'Infra'],
|
|
20
20
|
symbol: 'SOL-PERP',
|
|
21
21
|
baseAssetSymbol: 'SOL',
|
|
22
|
-
marketIndex:
|
|
22
|
+
marketIndex: 0,
|
|
23
23
|
oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
|
|
24
24
|
launchTs: 1655751353000,
|
|
25
25
|
oracleSource: OracleSource.PYTH,
|
|
@@ -29,7 +29,7 @@ export const DevnetMarkets: MarketConfig[] = [
|
|
|
29
29
|
category: ['L1', 'Payment'],
|
|
30
30
|
symbol: 'BTC-PERP',
|
|
31
31
|
baseAssetSymbol: 'BTC',
|
|
32
|
-
marketIndex:
|
|
32
|
+
marketIndex: 1,
|
|
33
33
|
oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
|
|
34
34
|
launchTs: 1655751353000,
|
|
35
35
|
oracleSource: OracleSource.PYTH,
|
|
@@ -39,16 +39,16 @@ export const DevnetMarkets: MarketConfig[] = [
|
|
|
39
39
|
category: ['L1', 'Infra'],
|
|
40
40
|
symbol: 'ETH-PERP',
|
|
41
41
|
baseAssetSymbol: 'ETH',
|
|
42
|
-
marketIndex:
|
|
42
|
+
marketIndex: 2,
|
|
43
43
|
oracle: new PublicKey('EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw'),
|
|
44
44
|
launchTs: 1637691133472,
|
|
45
45
|
oracleSource: OracleSource.PYTH,
|
|
46
46
|
},
|
|
47
47
|
];
|
|
48
48
|
|
|
49
|
-
export const MainnetMarkets:
|
|
49
|
+
export const MainnetMarkets: PerpMarketConfig[] = [];
|
|
50
50
|
|
|
51
|
-
export const
|
|
52
|
-
devnet:
|
|
51
|
+
export const PerpMarkets: { [key in DriftEnv]: PerpMarketConfig[] } = {
|
|
52
|
+
devnet: DevnetPerpMarkets,
|
|
53
53
|
'mainnet-beta': [],
|
|
54
54
|
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
|
2
|
+
import { BN, DriftEnv, OracleSource } from '../';
|
|
3
|
+
import {
|
|
4
|
+
SPOT_MARKET_BALANCE_PRECISION,
|
|
5
|
+
SPOT_MARKET_BALANCE_PRECISION_EXP,
|
|
6
|
+
LAMPORTS_EXP,
|
|
7
|
+
LAMPORTS_PRECISION,
|
|
8
|
+
} from './numericConstants';
|
|
9
|
+
|
|
10
|
+
export type SpotMarketConfig = {
|
|
11
|
+
symbol: string;
|
|
12
|
+
marketIndex: number;
|
|
13
|
+
oracle: PublicKey;
|
|
14
|
+
mint: PublicKey;
|
|
15
|
+
oracleSource: OracleSource;
|
|
16
|
+
precision: BN;
|
|
17
|
+
precisionExp: BN;
|
|
18
|
+
serumMarket?: PublicKey;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const WRAPPED_SOL_MINT = new PublicKey(
|
|
22
|
+
'So11111111111111111111111111111111111111112'
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export const DevnetSpotMarkets: SpotMarketConfig[] = [
|
|
26
|
+
{
|
|
27
|
+
symbol: 'USDC',
|
|
28
|
+
marketIndex: 0,
|
|
29
|
+
oracle: PublicKey.default,
|
|
30
|
+
oracleSource: OracleSource.QUOTE_ASSET,
|
|
31
|
+
mint: new PublicKey('8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2'),
|
|
32
|
+
precision: SPOT_MARKET_BALANCE_PRECISION,
|
|
33
|
+
precisionExp: SPOT_MARKET_BALANCE_PRECISION_EXP,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
symbol: 'SOL',
|
|
37
|
+
marketIndex: 1,
|
|
38
|
+
oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
|
|
39
|
+
oracleSource: OracleSource.PYTH,
|
|
40
|
+
mint: new PublicKey(WRAPPED_SOL_MINT),
|
|
41
|
+
precision: LAMPORTS_PRECISION,
|
|
42
|
+
precisionExp: LAMPORTS_EXP,
|
|
43
|
+
serumMarket: new PublicKey('8N37SsnTu8RYxtjrV9SStjkkwVhmU8aCWhLvwduAPEKW'),
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
symbol: 'BTC',
|
|
47
|
+
marketIndex: 2,
|
|
48
|
+
oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
|
|
49
|
+
oracleSource: OracleSource.PYTH,
|
|
50
|
+
mint: new PublicKey('3BZPwbcqB5kKScF3TEXxwNfx5ipV13kbRVDvfVp5c6fv'),
|
|
51
|
+
precision: SPOT_MARKET_BALANCE_PRECISION,
|
|
52
|
+
precisionExp: SPOT_MARKET_BALANCE_PRECISION_EXP,
|
|
53
|
+
serumMarket: new PublicKey('AGsmbVu3MS9u68GEYABWosQQCZwmLcBHu4pWEuBYH7Za'),
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
58
|
+
{
|
|
59
|
+
symbol: 'USDC',
|
|
60
|
+
marketIndex: 0,
|
|
61
|
+
oracle: PublicKey.default,
|
|
62
|
+
oracleSource: OracleSource.QUOTE_ASSET,
|
|
63
|
+
mint: new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
|
|
64
|
+
precision: SPOT_MARKET_BALANCE_PRECISION,
|
|
65
|
+
precisionExp: SPOT_MARKET_BALANCE_PRECISION_EXP,
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
export const SpotMarkets: { [key in DriftEnv]: SpotMarketConfig[] } = {
|
|
70
|
+
devnet: DevnetSpotMarkets,
|
|
71
|
+
'mainnet-beta': MainnetSpotMarkets,
|
|
72
|
+
};
|