@drift-labs/sdk 2.98.0-beta.9 → 2.99.0-beta.1
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/VERSION +1 -1
- package/lib/browser/accounts/pollingHighLeverageModeConfigAccountSubscriber.d.ts +29 -0
- package/lib/browser/accounts/pollingHighLeverageModeConfigAccountSubscriber.js +111 -0
- package/lib/browser/accounts/types.d.ts +14 -1
- package/lib/browser/accounts/webSocketHighLeverageModeConfigAccountSubscriber.d.ts +23 -0
- package/lib/browser/accounts/webSocketHighLeverageModeConfigAccountSubscriber.js +69 -0
- package/lib/browser/addresses/pda.d.ts +1 -0
- package/lib/browser/addresses/pda.js +8 -1
- package/lib/browser/constants/perpMarkets.js +11 -0
- package/lib/browser/constants/spotMarkets.js +2 -2
- package/lib/browser/driftClient.d.ts +14 -4
- package/lib/browser/driftClient.js +64 -19
- package/lib/browser/idl/drift.json +199 -8
- package/lib/browser/index.d.ts +4 -0
- package/lib/browser/index.js +4 -0
- package/lib/browser/jupiter/jupiterClient.d.ts +6 -0
- package/lib/browser/memcmp.d.ts +3 -0
- package/lib/browser/memcmp.js +28 -1
- package/lib/browser/slot/SlothashSubscriber.d.ts +26 -0
- package/lib/browser/slot/SlothashSubscriber.js +85 -0
- package/lib/browser/types.d.ts +4 -3
- package/lib/browser/user.js +3 -0
- package/lib/browser/userMap/referrerMap.d.ts +45 -0
- package/lib/browser/userMap/referrerMap.js +180 -0
- package/lib/browser/util/digest.d.ts +1 -0
- package/lib/browser/util/digest.js +5 -1
- package/lib/node/accounts/pollingHighLeverageModeConfigAccountSubscriber.d.ts +29 -0
- package/lib/node/accounts/pollingHighLeverageModeConfigAccountSubscriber.js +111 -0
- package/lib/node/accounts/types.d.ts +14 -1
- package/lib/node/accounts/webSocketHighLeverageModeConfigAccountSubscriber.d.ts +23 -0
- package/lib/node/accounts/webSocketHighLeverageModeConfigAccountSubscriber.js +69 -0
- package/lib/node/addresses/pda.d.ts +1 -0
- package/lib/node/addresses/pda.js +8 -1
- package/lib/node/constants/perpMarkets.js +11 -0
- package/lib/node/constants/spotMarkets.js +2 -2
- package/lib/node/driftClient.d.ts +14 -4
- package/lib/node/driftClient.js +64 -19
- package/lib/node/idl/drift.json +199 -8
- package/lib/node/index.d.ts +4 -0
- package/lib/node/index.js +4 -0
- package/lib/node/jupiter/jupiterClient.d.ts +6 -0
- package/lib/node/memcmp.d.ts +3 -0
- package/lib/node/memcmp.js +28 -1
- package/lib/node/slot/SlothashSubscriber.d.ts +26 -0
- package/lib/node/slot/SlothashSubscriber.js +85 -0
- package/lib/node/types.d.ts +4 -3
- package/lib/node/user.js +3 -0
- package/lib/node/userMap/referrerMap.d.ts +45 -0
- package/lib/node/userMap/referrerMap.js +180 -0
- package/lib/node/util/digest.d.ts +1 -0
- package/lib/node/util/digest.js +5 -1
- package/package.json +1 -1
- package/src/accounts/pollingHighLeverageModeConfigAccountSubscriber.ts +189 -0
- package/src/accounts/types.ts +25 -1
- package/src/accounts/webSocketHighLeverageModeConfigAccountSubscriber.ts +131 -0
- package/src/addresses/pda.ts +13 -0
- package/src/constants/perpMarkets.ts +12 -0
- package/src/constants/spotMarkets.ts +2 -2
- package/src/driftClient.ts +129 -36
- package/src/idl/drift.json +226 -9
- package/src/index.ts +4 -0
- package/src/jupiter/jupiterClient.ts +6 -0
- package/src/memcmp.ts +27 -0
- package/src/slot/SlothashSubscriber.ts +126 -0
- package/src/types.ts +4 -3
- package/src/user.ts +4 -0
- package/src/userMap/referrerMap.ts +283 -0
- package/src/util/digest.ts +4 -0
- package/tests/ci/verifyConstants.ts +16 -2
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.99.0-beta.1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { DataAndSlot, HighLeverageModeConfigAccountEvents, HighLeverageModeConfigAccountSubscriber } from './types';
|
|
3
|
+
import { Program } from '@coral-xyz/anchor';
|
|
4
|
+
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { PublicKey } from '@solana/web3.js';
|
|
7
|
+
import { BulkAccountLoader } from './bulkAccountLoader';
|
|
8
|
+
import { HighLeverageModeConfig } from '../types';
|
|
9
|
+
export declare class PollingHighLeverageModeConfigAccountSubscriber implements HighLeverageModeConfigAccountSubscriber {
|
|
10
|
+
isSubscribed: boolean;
|
|
11
|
+
program: Program;
|
|
12
|
+
eventEmitter: StrictEventEmitter<EventEmitter, HighLeverageModeConfigAccountEvents>;
|
|
13
|
+
highLeverageModeConfigAccountPublicKey: PublicKey;
|
|
14
|
+
accountLoader: BulkAccountLoader;
|
|
15
|
+
callbackId?: string;
|
|
16
|
+
errorCallbackId?: string;
|
|
17
|
+
highLeverageModeConfigAccountAndSlot?: DataAndSlot<HighLeverageModeConfig>;
|
|
18
|
+
constructor(program: Program, publicKey: PublicKey, accountLoader: BulkAccountLoader);
|
|
19
|
+
subscribe(highLeverageModeConfig?: HighLeverageModeConfig): Promise<boolean>;
|
|
20
|
+
addToAccountLoader(): Promise<void>;
|
|
21
|
+
fetchIfUnloaded(): Promise<void>;
|
|
22
|
+
fetch(): Promise<void>;
|
|
23
|
+
doesAccountExist(): boolean;
|
|
24
|
+
unsubscribe(): Promise<void>;
|
|
25
|
+
assertIsSubscribed(): void;
|
|
26
|
+
getHighLeverageModeConfigAccountAndSlot(): DataAndSlot<HighLeverageModeConfig>;
|
|
27
|
+
didSubscriptionSucceed(): boolean;
|
|
28
|
+
updateData(highLeverageModeConfig: HighLeverageModeConfig, slot: number): void;
|
|
29
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PollingHighLeverageModeConfigAccountSubscriber = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
class PollingHighLeverageModeConfigAccountSubscriber {
|
|
7
|
+
constructor(program, publicKey, accountLoader) {
|
|
8
|
+
this.isSubscribed = false;
|
|
9
|
+
this.program = program;
|
|
10
|
+
this.highLeverageModeConfigAccountPublicKey = publicKey;
|
|
11
|
+
this.accountLoader = accountLoader;
|
|
12
|
+
this.eventEmitter = new events_1.EventEmitter();
|
|
13
|
+
}
|
|
14
|
+
async subscribe(highLeverageModeConfig) {
|
|
15
|
+
if (this.isSubscribed) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (highLeverageModeConfig) {
|
|
19
|
+
this.highLeverageModeConfigAccountAndSlot = {
|
|
20
|
+
data: highLeverageModeConfig,
|
|
21
|
+
slot: undefined,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
await this.addToAccountLoader();
|
|
25
|
+
await this.fetchIfUnloaded();
|
|
26
|
+
if (this.doesAccountExist()) {
|
|
27
|
+
this.eventEmitter.emit('update');
|
|
28
|
+
}
|
|
29
|
+
this.isSubscribed = true;
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
async addToAccountLoader() {
|
|
33
|
+
if (this.callbackId) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.callbackId = await this.accountLoader.addAccount(this.highLeverageModeConfigAccountPublicKey, (buffer, slot) => {
|
|
37
|
+
if (!buffer) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (this.highLeverageModeConfigAccountAndSlot &&
|
|
41
|
+
this.highLeverageModeConfigAccountAndSlot.slot > slot) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const account = this.program.account.user.coder.accounts.decode('HighLeverageModeConfig', buffer);
|
|
45
|
+
this.highLeverageModeConfigAccountAndSlot = { data: account, slot };
|
|
46
|
+
this.eventEmitter.emit('highLeverageModeConfigAccountUpdate', account);
|
|
47
|
+
this.eventEmitter.emit('update');
|
|
48
|
+
});
|
|
49
|
+
this.errorCallbackId = this.accountLoader.addErrorCallbacks((error) => {
|
|
50
|
+
this.eventEmitter.emit('error', error);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async fetchIfUnloaded() {
|
|
54
|
+
if (this.highLeverageModeConfigAccountAndSlot === undefined) {
|
|
55
|
+
await this.fetch();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async fetch() {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
try {
|
|
61
|
+
const dataAndContext = await this.program.account.highLeverageModeConfig.fetchAndContext(this.highLeverageModeConfigAccountPublicKey, this.accountLoader.commitment);
|
|
62
|
+
if (dataAndContext.context.slot >
|
|
63
|
+
((_b = (_a = this.highLeverageModeConfigAccountAndSlot) === null || _a === void 0 ? void 0 : _a.slot) !== null && _b !== void 0 ? _b : 0)) {
|
|
64
|
+
this.highLeverageModeConfigAccountAndSlot = {
|
|
65
|
+
data: dataAndContext.data,
|
|
66
|
+
slot: dataAndContext.context.slot,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
console.log(`PollingHighLeverageModeConfigAccountSubscriber.fetch() HighLeverageModeConfig does not exist: ${e.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
doesAccountExist() {
|
|
75
|
+
return this.highLeverageModeConfigAccountAndSlot !== undefined;
|
|
76
|
+
}
|
|
77
|
+
async unsubscribe() {
|
|
78
|
+
if (!this.isSubscribed) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
this.accountLoader.removeAccount(this.highLeverageModeConfigAccountPublicKey, this.callbackId);
|
|
82
|
+
this.callbackId = undefined;
|
|
83
|
+
this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
|
|
84
|
+
this.errorCallbackId = undefined;
|
|
85
|
+
this.isSubscribed = false;
|
|
86
|
+
}
|
|
87
|
+
assertIsSubscribed() {
|
|
88
|
+
if (!this.isSubscribed) {
|
|
89
|
+
throw new types_1.NotSubscribedError('You must call `subscribe` before using this function');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getHighLeverageModeConfigAccountAndSlot() {
|
|
93
|
+
this.assertIsSubscribed();
|
|
94
|
+
return this.highLeverageModeConfigAccountAndSlot;
|
|
95
|
+
}
|
|
96
|
+
didSubscriptionSucceed() {
|
|
97
|
+
return !!this.highLeverageModeConfigAccountAndSlot;
|
|
98
|
+
}
|
|
99
|
+
updateData(highLeverageModeConfig, slot) {
|
|
100
|
+
if (!this.highLeverageModeConfigAccountAndSlot ||
|
|
101
|
+
this.highLeverageModeConfigAccountAndSlot.slot < slot) {
|
|
102
|
+
this.highLeverageModeConfigAccountAndSlot = {
|
|
103
|
+
data: highLeverageModeConfig,
|
|
104
|
+
slot,
|
|
105
|
+
};
|
|
106
|
+
this.eventEmitter.emit('highLeverageModeConfigAccountUpdate', highLeverageModeConfig);
|
|
107
|
+
this.eventEmitter.emit('update');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.PollingHighLeverageModeConfigAccountSubscriber = PollingHighLeverageModeConfigAccountSubscriber;
|
|
@@ -6,7 +6,7 @@ import StrictEventEmitter from 'strict-event-emitter-types';
|
|
|
6
6
|
import { EventEmitter } from 'events';
|
|
7
7
|
import { Context, PublicKey } from '@solana/web3.js';
|
|
8
8
|
import { Account } from '@solana/spl-token';
|
|
9
|
-
import { OracleInfo, OraclePriceData } from '..';
|
|
9
|
+
import { HighLeverageModeConfig, OracleInfo, OraclePriceData } from '..';
|
|
10
10
|
import { ChannelOptions, CommitmentLevel } from '../isomorphic/grpc';
|
|
11
11
|
export interface AccountSubscriber<T> {
|
|
12
12
|
dataAndSlot?: DataAndSlot<T>;
|
|
@@ -153,3 +153,16 @@ export type GrpcConfigs = {
|
|
|
153
153
|
commitmentLevel?: CommitmentLevel;
|
|
154
154
|
channelOptions?: ChannelOptions;
|
|
155
155
|
};
|
|
156
|
+
export interface HighLeverageModeConfigAccountSubscriber {
|
|
157
|
+
eventEmitter: StrictEventEmitter<EventEmitter, HighLeverageModeConfigAccountEvents>;
|
|
158
|
+
isSubscribed: boolean;
|
|
159
|
+
subscribe(highLeverageModeConfigAccount?: HighLeverageModeConfig): Promise<boolean>;
|
|
160
|
+
fetch(): Promise<void>;
|
|
161
|
+
unsubscribe(): Promise<void>;
|
|
162
|
+
getHighLeverageModeConfigAccountAndSlot(): DataAndSlot<HighLeverageModeConfig>;
|
|
163
|
+
}
|
|
164
|
+
export interface HighLeverageModeConfigAccountEvents {
|
|
165
|
+
highLeverageModeConfigAccountUpdate: (payload: HighLeverageModeConfig) => void;
|
|
166
|
+
update: void;
|
|
167
|
+
error: (e: Error) => void;
|
|
168
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { DataAndSlot, AccountSubscriber, HighLeverageModeConfigAccountEvents, HighLeverageModeConfigAccountSubscriber } from './types';
|
|
3
|
+
import { Program } from '@coral-xyz/anchor';
|
|
4
|
+
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { Commitment, PublicKey } from '@solana/web3.js';
|
|
7
|
+
import { HighLeverageModeConfig } from '../types';
|
|
8
|
+
export declare class WebSocketHighLeverageModeConfigAccountSubscriber implements HighLeverageModeConfigAccountSubscriber {
|
|
9
|
+
isSubscribed: boolean;
|
|
10
|
+
resubTimeoutMs?: number;
|
|
11
|
+
commitment?: Commitment;
|
|
12
|
+
program: Program;
|
|
13
|
+
eventEmitter: StrictEventEmitter<EventEmitter, HighLeverageModeConfigAccountEvents>;
|
|
14
|
+
highLeverageModeConfigAccountPublicKey: PublicKey;
|
|
15
|
+
highLeverageModeConfigDataAccountSubscriber: AccountSubscriber<HighLeverageModeConfig>;
|
|
16
|
+
constructor(program: Program, highLeverageModeConfigAccountPublicKey: PublicKey, resubTimeoutMs?: number, commitment?: Commitment);
|
|
17
|
+
subscribe(highLeverageModeConfigAccount?: HighLeverageModeConfig): Promise<boolean>;
|
|
18
|
+
fetch(): Promise<void>;
|
|
19
|
+
unsubscribe(): Promise<void>;
|
|
20
|
+
assertIsSubscribed(): void;
|
|
21
|
+
getHighLeverageModeConfigAccountAndSlot(): DataAndSlot<HighLeverageModeConfig>;
|
|
22
|
+
updateData(highLeverageModeConfig: HighLeverageModeConfig, slot: number): void;
|
|
23
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketHighLeverageModeConfigAccountSubscriber = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
const webSocketAccountSubscriber_1 = require("./webSocketAccountSubscriber");
|
|
7
|
+
class WebSocketHighLeverageModeConfigAccountSubscriber {
|
|
8
|
+
constructor(program, highLeverageModeConfigAccountPublicKey, resubTimeoutMs, commitment) {
|
|
9
|
+
this.isSubscribed = false;
|
|
10
|
+
this.program = program;
|
|
11
|
+
this.highLeverageModeConfigAccountPublicKey =
|
|
12
|
+
highLeverageModeConfigAccountPublicKey;
|
|
13
|
+
this.eventEmitter = new events_1.EventEmitter();
|
|
14
|
+
this.resubTimeoutMs = resubTimeoutMs;
|
|
15
|
+
this.commitment = commitment;
|
|
16
|
+
}
|
|
17
|
+
async subscribe(highLeverageModeConfigAccount) {
|
|
18
|
+
if (this.isSubscribed) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
this.highLeverageModeConfigDataAccountSubscriber =
|
|
22
|
+
new webSocketAccountSubscriber_1.WebSocketAccountSubscriber('highLeverageModeConfig', this.program, this.highLeverageModeConfigAccountPublicKey, undefined, {
|
|
23
|
+
resubTimeoutMs: this.resubTimeoutMs,
|
|
24
|
+
}, this.commitment);
|
|
25
|
+
if (highLeverageModeConfigAccount) {
|
|
26
|
+
this.highLeverageModeConfigDataAccountSubscriber.setData(highLeverageModeConfigAccount);
|
|
27
|
+
}
|
|
28
|
+
await this.highLeverageModeConfigDataAccountSubscriber.subscribe((data) => {
|
|
29
|
+
this.eventEmitter.emit('highLeverageModeConfigAccountUpdate', data);
|
|
30
|
+
this.eventEmitter.emit('update');
|
|
31
|
+
});
|
|
32
|
+
this.eventEmitter.emit('update');
|
|
33
|
+
this.isSubscribed = true;
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
async fetch() {
|
|
37
|
+
await Promise.all([
|
|
38
|
+
this.highLeverageModeConfigDataAccountSubscriber.fetch(),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
async unsubscribe() {
|
|
42
|
+
if (!this.isSubscribed) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
await Promise.all([
|
|
46
|
+
this.highLeverageModeConfigDataAccountSubscriber.unsubscribe(),
|
|
47
|
+
]);
|
|
48
|
+
this.isSubscribed = false;
|
|
49
|
+
}
|
|
50
|
+
assertIsSubscribed() {
|
|
51
|
+
if (!this.isSubscribed) {
|
|
52
|
+
throw new types_1.NotSubscribedError('You must call `subscribe` before using this function');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
getHighLeverageModeConfigAccountAndSlot() {
|
|
56
|
+
this.assertIsSubscribed();
|
|
57
|
+
return this.highLeverageModeConfigDataAccountSubscriber.dataAndSlot;
|
|
58
|
+
}
|
|
59
|
+
updateData(highLeverageModeConfig, slot) {
|
|
60
|
+
var _a;
|
|
61
|
+
const currentDataSlot = ((_a = this.highLeverageModeConfigDataAccountSubscriber.dataAndSlot) === null || _a === void 0 ? void 0 : _a.slot) || 0;
|
|
62
|
+
if (currentDataSlot <= slot) {
|
|
63
|
+
this.highLeverageModeConfigDataAccountSubscriber.setData(highLeverageModeConfig, slot);
|
|
64
|
+
this.eventEmitter.emit('highLeverageModeConfigAccountUpdate', highLeverageModeConfig);
|
|
65
|
+
this.eventEmitter.emit('update');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.WebSocketHighLeverageModeConfigAccountSubscriber = WebSocketHighLeverageModeConfigAccountSubscriber;
|
|
@@ -9,6 +9,7 @@ export declare function getUserAccountPublicKey(programId: PublicKey, authority:
|
|
|
9
9
|
export declare function getUserAccountPublicKeySync(programId: PublicKey, authority: PublicKey, subAccountId?: number): PublicKey;
|
|
10
10
|
export declare function getUserStatsAccountPublicKey(programId: PublicKey, authority: PublicKey): PublicKey;
|
|
11
11
|
export declare function getRFQUserAccountPublicKey(programId: PublicKey, userAccountPublicKey: PublicKey): PublicKey;
|
|
12
|
+
export declare function getSwiftUserAccountPublicKey(programId: PublicKey, userAccountPublicKey: PublicKey): PublicKey;
|
|
12
13
|
export declare function getPerpMarketPublicKey(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
|
|
13
14
|
export declare function getPerpMarketPublicKeySync(programId: PublicKey, marketIndex: number): PublicKey;
|
|
14
15
|
export declare function getSpotMarketPublicKey(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.getHighLeverageModeConfigPublicKey = exports.getTokenProgramForSpotMarket = exports.getPythPullOraclePublicKey = exports.getPrelaunchOraclePublicKey = exports.getProtocolIfSharesTransferConfigPublicKey = exports.getReferrerNamePublicKeySync = exports.getOpenbookV2FulfillmentConfigPublicKey = exports.getPhoenixFulfillmentConfigPublicKey = exports.getSerumFulfillmentConfigPublicKey = exports.getSerumSignerPublicKey = exports.getSerumOpenOrdersPublicKey = exports.getDriftSignerPublicKey = exports.getInsuranceFundStakeAccountPublicKey = exports.getInsuranceFundVaultPublicKey = exports.getSpotMarketVaultPublicKey = exports.getSpotMarketPublicKeySync = exports.getSpotMarketPublicKey = exports.getPerpMarketPublicKeySync = exports.getPerpMarketPublicKey = exports.getRFQUserAccountPublicKey = exports.getUserStatsAccountPublicKey = exports.getUserAccountPublicKeySync = exports.getUserAccountPublicKey = exports.getUserAccountPublicKeyAndNonce = exports.getDriftStateAccountPublicKey = exports.getDriftStateAccountPublicKeyAndNonce = void 0;
|
|
26
|
+
exports.getHighLeverageModeConfigPublicKey = exports.getTokenProgramForSpotMarket = exports.getPythPullOraclePublicKey = exports.getPrelaunchOraclePublicKey = exports.getProtocolIfSharesTransferConfigPublicKey = exports.getReferrerNamePublicKeySync = exports.getOpenbookV2FulfillmentConfigPublicKey = exports.getPhoenixFulfillmentConfigPublicKey = exports.getSerumFulfillmentConfigPublicKey = exports.getSerumSignerPublicKey = exports.getSerumOpenOrdersPublicKey = exports.getDriftSignerPublicKey = exports.getInsuranceFundStakeAccountPublicKey = exports.getInsuranceFundVaultPublicKey = exports.getSpotMarketVaultPublicKey = exports.getSpotMarketPublicKeySync = exports.getSpotMarketPublicKey = exports.getPerpMarketPublicKeySync = exports.getPerpMarketPublicKey = exports.getSwiftUserAccountPublicKey = exports.getRFQUserAccountPublicKey = exports.getUserStatsAccountPublicKey = exports.getUserAccountPublicKeySync = exports.getUserAccountPublicKey = exports.getUserAccountPublicKeyAndNonce = exports.getDriftStateAccountPublicKey = exports.getDriftStateAccountPublicKeyAndNonce = void 0;
|
|
27
27
|
const web3_js_1 = require("@solana/web3.js");
|
|
28
28
|
const anchor = __importStar(require("@coral-xyz/anchor"));
|
|
29
29
|
const spl_token_1 = require("@solana/spl-token");
|
|
@@ -69,6 +69,13 @@ function getRFQUserAccountPublicKey(programId, userAccountPublicKey) {
|
|
|
69
69
|
], programId)[0];
|
|
70
70
|
}
|
|
71
71
|
exports.getRFQUserAccountPublicKey = getRFQUserAccountPublicKey;
|
|
72
|
+
function getSwiftUserAccountPublicKey(programId, userAccountPublicKey) {
|
|
73
|
+
return web3_js_1.PublicKey.findProgramAddressSync([
|
|
74
|
+
Buffer.from(anchor.utils.bytes.utf8.encode('SWIFT')),
|
|
75
|
+
userAccountPublicKey.toBuffer(),
|
|
76
|
+
], programId)[0];
|
|
77
|
+
}
|
|
78
|
+
exports.getSwiftUserAccountPublicKey = getSwiftUserAccountPublicKey;
|
|
72
79
|
async function getPerpMarketPublicKey(programId, marketIndex) {
|
|
73
80
|
return (await web3_js_1.PublicKey.findProgramAddress([
|
|
74
81
|
Buffer.from(anchor.utils.bytes.utf8.encode('perp_market')),
|
|
@@ -872,6 +872,17 @@ exports.MainnetPerpMarkets = [
|
|
|
872
872
|
oracleSource: __1.OracleSource.PYTH_1K_PULL,
|
|
873
873
|
pythFeedId: '0x514aed52ca5294177f20187ae883cec4a018619772ddce41efcc36a6448f5d5d',
|
|
874
874
|
},
|
|
875
|
+
{
|
|
876
|
+
fullName: 'MICHI',
|
|
877
|
+
category: ['Meme'],
|
|
878
|
+
symbol: 'MICHI-PERP',
|
|
879
|
+
baseAssetSymbol: 'MICHI',
|
|
880
|
+
marketIndex: 52,
|
|
881
|
+
oracle: new web3_js_1.PublicKey('GHzvsMDMSiuyZoWhEAuM27MKFdN2Y4fA4wSDuSd6dLMA'),
|
|
882
|
+
launchTs: 1730402722000,
|
|
883
|
+
oracleSource: __1.OracleSource.PYTH_PULL,
|
|
884
|
+
pythFeedId: '0x63a45218d6b13ffd28ca04748615511bf70eff80a3411c97d96b8ed74a6decab',
|
|
885
|
+
},
|
|
875
886
|
];
|
|
876
887
|
exports.PerpMarkets = {
|
|
877
888
|
devnet: exports.DevnetPerpMarkets,
|
|
@@ -337,12 +337,12 @@ exports.MainnetSpotMarkets = [
|
|
|
337
337
|
{
|
|
338
338
|
symbol: 'BNSOL',
|
|
339
339
|
marketIndex: 25,
|
|
340
|
-
oracle: new web3_js_1.PublicKey('
|
|
340
|
+
oracle: new web3_js_1.PublicKey('8DmXTfhhtb9kTcpTVfb6Ygx8WhZ8wexGqcpxfn23zooe'),
|
|
341
341
|
oracleSource: __1.OracleSource.PYTH_PULL,
|
|
342
342
|
mint: new web3_js_1.PublicKey('BNso1VUJnh4zcfpZa6986Ea66P6TCp59hvtNJ8b1X85'),
|
|
343
343
|
precision: numericConstants_1.LAMPORTS_PRECISION,
|
|
344
344
|
precisionExp: numericConstants_1.LAMPORTS_EXP,
|
|
345
|
-
pythFeedId: '
|
|
345
|
+
pythFeedId: '0x55f8289be7450f1ae564dd9798e49e7d797d89adbc54fe4f8c906b1fcb94b0c3',
|
|
346
346
|
},
|
|
347
347
|
{
|
|
348
348
|
symbol: 'MOTHER',
|
|
@@ -22,6 +22,7 @@ import { UserStatsSubscriptionConfig } from './userStatsConfig';
|
|
|
22
22
|
import { TxHandler } from './tx/txHandler';
|
|
23
23
|
import { WormholeCoreBridgeSolana } from '@pythnetwork/pyth-solana-receiver/lib/idl/wormhole_core_bridge_solana';
|
|
24
24
|
import { PythSolanaReceiver } from '@pythnetwork/pyth-solana-receiver/lib/idl/pyth_solana_receiver';
|
|
25
|
+
import { Slothash } from './slot/SlothashSubscriber';
|
|
25
26
|
type RemainingAccountParams = {
|
|
26
27
|
userAccounts: UserAccount[];
|
|
27
28
|
writablePerpMarketIndexes?: number[];
|
|
@@ -140,6 +141,8 @@ export declare class DriftClient {
|
|
|
140
141
|
getInitializeUserStatsIx(): Promise<TransactionInstruction>;
|
|
141
142
|
initializeRFQUser(userAccountPublicKey: PublicKey, txParams?: TxParams): Promise<[TransactionSignature, PublicKey]>;
|
|
142
143
|
getInitializeRFQUserInstruction(userAccountPublicKey: PublicKey): Promise<[PublicKey, TransactionInstruction]>;
|
|
144
|
+
initializeSwiftUserOrdersAccount(userAccountPublicKey: PublicKey, txParams?: TxParams): Promise<[TransactionSignature, PublicKey]>;
|
|
145
|
+
getInitializeSwiftUserOrdersAccountInstruction(userAccountPublicKey: PublicKey): Promise<[PublicKey, TransactionInstruction]>;
|
|
143
146
|
getInitializeUserInstructions(subAccountId?: number, name?: string, referrerInfo?: ReferrerInfo): Promise<[PublicKey, TransactionInstruction]>;
|
|
144
147
|
getNextSubAccountId(): Promise<number>;
|
|
145
148
|
initializeReferrerName(name: string): Promise<TransactionSignature>;
|
|
@@ -531,12 +534,12 @@ export declare class DriftClient {
|
|
|
531
534
|
takerStats: PublicKey;
|
|
532
535
|
takerUserAccount: UserAccount;
|
|
533
536
|
}): Promise<TransactionInstruction[]>;
|
|
534
|
-
placeAndMakeSwiftPerpOrder(encodedSwiftMessage: Buffer, swiftSignature: Buffer, encodedSwiftOrderParamsMessage: Buffer, swiftOrderParamsSignature: Buffer,
|
|
537
|
+
placeAndMakeSwiftPerpOrder(encodedSwiftMessage: Buffer, swiftSignature: Buffer, encodedSwiftOrderParamsMessage: Buffer, swiftOrderParamsSignature: Buffer, swiftOrderUuid: Uint8Array, takerInfo: {
|
|
535
538
|
taker: PublicKey;
|
|
536
539
|
takerStats: PublicKey;
|
|
537
540
|
takerUserAccount: UserAccount;
|
|
538
541
|
}, orderParams: OptionalOrderParams, referrerInfo?: ReferrerInfo, txParams?: TxParams, subAccountId?: number): Promise<TransactionSignature>;
|
|
539
|
-
getPlaceAndMakeSwiftPerpOrderIxs(encodedSwiftMessage: Buffer, swiftSignature: Buffer, encodedSwiftOrderParamsMessage: Buffer, swiftOrderParamsSignature: Buffer,
|
|
542
|
+
getPlaceAndMakeSwiftPerpOrderIxs(encodedSwiftMessage: Buffer, swiftSignature: Buffer, encodedSwiftOrderParamsMessage: Buffer, swiftOrderParamsSignature: Buffer, swiftOrderUuid: Uint8Array, takerInfo: {
|
|
540
543
|
taker: PublicKey;
|
|
541
544
|
takerStats: PublicKey;
|
|
542
545
|
takerUserAccount: UserAccount;
|
|
@@ -759,6 +762,13 @@ export declare class DriftClient {
|
|
|
759
762
|
resolvePerpPnlDeficit(spotMarketIndex: number, perpMarketIndex: number, txParams?: TxParams): Promise<TransactionSignature>;
|
|
760
763
|
getResolvePerpPnlDeficitIx(spotMarketIndex: number, perpMarketIndex: number): Promise<TransactionInstruction>;
|
|
761
764
|
getDepositIntoSpotMarketRevenuePoolIx(marketIndex: number, amount: BN, userTokenAccountPublicKey: PublicKey): Promise<TransactionInstruction>;
|
|
765
|
+
/**
|
|
766
|
+
* This ix will donate your funds to drift revenue pool. It does not deposit into your user account
|
|
767
|
+
* @param marketIndex
|
|
768
|
+
* @param amount
|
|
769
|
+
* @param userTokenAccountPublicKey
|
|
770
|
+
* @returns
|
|
771
|
+
*/
|
|
762
772
|
depositIntoSpotMarketRevenuePool(marketIndex: number, amount: BN, userTokenAccountPublicKey: PublicKey): Promise<TransactionSignature>;
|
|
763
773
|
getPerpMarketExtendedInfo(marketIndex: number): PerpMarketExtendedInfo;
|
|
764
774
|
/**
|
|
@@ -794,8 +804,8 @@ export declare class DriftClient {
|
|
|
794
804
|
proof: number[][];
|
|
795
805
|
};
|
|
796
806
|
}, feedId: string, encodedVaaAddress: PublicKey): Promise<TransactionInstruction>;
|
|
797
|
-
getPostSwitchboardOnDemandUpdateAtomicIx(feed: PublicKey, numSignatures?: number): Promise<TransactionInstruction | undefined>;
|
|
798
|
-
postSwitchboardOnDemandUpdate(feed: PublicKey, numSignatures?: number): Promise<TransactionSignature>;
|
|
807
|
+
getPostSwitchboardOnDemandUpdateAtomicIx(feed: PublicKey, recentSlothash?: Slothash, numSignatures?: number): Promise<TransactionInstruction | undefined>;
|
|
808
|
+
postSwitchboardOnDemandUpdate(feed: PublicKey, recentSlothash?: Slothash, numSignatures?: number): Promise<TransactionSignature>;
|
|
799
809
|
private getBuildEncodedVaaIxs;
|
|
800
810
|
enableUserHighLeverageMode(subAccountId: number, txParams?: TxParams): Promise<TransactionSignature>;
|
|
801
811
|
getEnableHighLeverageModeIx(subAccountId: number, depositToTradeArgs?: {
|
|
@@ -186,7 +186,7 @@ class DriftClient {
|
|
|
186
186
|
if (config.env && !this.marketLookupTable) {
|
|
187
187
|
this.marketLookupTable = new web3_js_1.PublicKey(config_1.configs[config.env].MARKET_LOOKUP_TABLE);
|
|
188
188
|
}
|
|
189
|
-
const delistedMarketSetting = config.delistedMarketSetting || types_2.DelistedMarketSetting.
|
|
189
|
+
const delistedMarketSetting = config.delistedMarketSetting || types_2.DelistedMarketSetting.Unsubscribe;
|
|
190
190
|
const noMarketsAndOraclesSpecified = config.perpMarketIndexes === undefined &&
|
|
191
191
|
config.spotMarketIndexes === undefined &&
|
|
192
192
|
config.oracleInfos === undefined;
|
|
@@ -600,6 +600,28 @@ class DriftClient {
|
|
|
600
600
|
});
|
|
601
601
|
return [rfqUserAccountPublicKey, initializeUserAccountIx];
|
|
602
602
|
}
|
|
603
|
+
async initializeSwiftUserOrdersAccount(userAccountPublicKey, txParams) {
|
|
604
|
+
const initializeIxs = [];
|
|
605
|
+
const [swiftUserAccountPublicKey, initializeUserAccountIx] = await this.getInitializeSwiftUserOrdersAccountInstruction(userAccountPublicKey);
|
|
606
|
+
initializeIxs.push(initializeUserAccountIx);
|
|
607
|
+
const tx = await this.buildTransaction(initializeIxs, txParams);
|
|
608
|
+
const { txSig } = await this.sendTransaction(tx, [], this.opts);
|
|
609
|
+
return [txSig, swiftUserAccountPublicKey];
|
|
610
|
+
}
|
|
611
|
+
async getInitializeSwiftUserOrdersAccountInstruction(userAccountPublicKey) {
|
|
612
|
+
const swiftUserAccountPublicKey = (0, pda_1.getSwiftUserAccountPublicKey)(this.program.programId, userAccountPublicKey);
|
|
613
|
+
const initializeUserAccountIx = await this.program.instruction.initializeSwiftUserOrders({
|
|
614
|
+
accounts: {
|
|
615
|
+
swiftUserOrders: swiftUserAccountPublicKey,
|
|
616
|
+
authority: this.wallet.publicKey,
|
|
617
|
+
user: userAccountPublicKey,
|
|
618
|
+
payer: this.wallet.publicKey,
|
|
619
|
+
rent: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
620
|
+
systemProgram: anchor.web3.SystemProgram.programId,
|
|
621
|
+
},
|
|
622
|
+
});
|
|
623
|
+
return [swiftUserAccountPublicKey, initializeUserAccountIx];
|
|
624
|
+
}
|
|
603
625
|
async getInitializeUserInstructions(subAccountId = 0, name, referrerInfo) {
|
|
604
626
|
const userAccountPublicKey = await (0, pda_1.getUserAccountPublicKey)(this.program.programId, this.wallet.publicKey, subAccountId);
|
|
605
627
|
const remainingAccounts = new Array();
|
|
@@ -2993,15 +3015,12 @@ class DriftClient {
|
|
|
2993
3015
|
});
|
|
2994
3016
|
}
|
|
2995
3017
|
encodeSwiftServerMessage(message) {
|
|
2996
|
-
|
|
2997
|
-
slot: message.slot,
|
|
2998
|
-
swiftOrderSignature: message.swiftOrderSignature,
|
|
2999
|
-
};
|
|
3000
|
-
return this.program.coder.types.encode('SwiftServerMessage', messageWithBuffer);
|
|
3018
|
+
return this.program.coder.types.encode('SwiftServerMessage', message);
|
|
3001
3019
|
}
|
|
3002
3020
|
decodeSwiftServerMessage(encodedMessage) {
|
|
3003
3021
|
const decodedSwiftMessage = this.program.coder.types.decode('SwiftServerMessage', encodedMessage);
|
|
3004
3022
|
return {
|
|
3023
|
+
uuid: decodedSwiftMessage.uuid,
|
|
3005
3024
|
slot: decodedSwiftMessage.slot,
|
|
3006
3025
|
swiftOrderSignature: decodedSwiftMessage.swiftSignature,
|
|
3007
3026
|
};
|
|
@@ -3049,6 +3068,7 @@ class DriftClient {
|
|
|
3049
3068
|
state: await this.getStatePublicKey(),
|
|
3050
3069
|
user: takerInfo.taker,
|
|
3051
3070
|
userStats: takerInfo.takerStats,
|
|
3071
|
+
swiftUserOrders: (0, pda_1.getSwiftUserAccountPublicKey)(this.program.programId, takerInfo.taker),
|
|
3052
3072
|
authority: this.wallet.publicKey,
|
|
3053
3073
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
|
3054
3074
|
},
|
|
@@ -3060,13 +3080,13 @@ class DriftClient {
|
|
|
3060
3080
|
placeTakerSwiftPerpOrderIx,
|
|
3061
3081
|
];
|
|
3062
3082
|
}
|
|
3063
|
-
async placeAndMakeSwiftPerpOrder(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature,
|
|
3064
|
-
const ixs = await this.getPlaceAndMakeSwiftPerpOrderIxs(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature,
|
|
3083
|
+
async placeAndMakeSwiftPerpOrder(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature, swiftOrderUuid, takerInfo, orderParams, referrerInfo, txParams, subAccountId) {
|
|
3084
|
+
const ixs = await this.getPlaceAndMakeSwiftPerpOrderIxs(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature, swiftOrderUuid, takerInfo, orderParams, referrerInfo, subAccountId);
|
|
3065
3085
|
const { txSig, slot } = await this.sendTransaction(await this.buildTransaction(ixs, txParams), [], this.opts);
|
|
3066
3086
|
this.perpMarketLastSlotCache.set(orderParams.marketIndex, slot);
|
|
3067
3087
|
return txSig;
|
|
3068
3088
|
}
|
|
3069
|
-
async getPlaceAndMakeSwiftPerpOrderIxs(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature,
|
|
3089
|
+
async getPlaceAndMakeSwiftPerpOrderIxs(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature, swiftOrderUuid, takerInfo, orderParams, referrerInfo, subAccountId) {
|
|
3070
3090
|
const [swiftServerSignatureIx, swiftOrderSignatureIx, placeTakerSwiftPerpOrderIx,] = await this.getPlaceSwiftTakerPerpOrderIxs(encodedSwiftMessage, swiftSignature, encodedSwiftOrderParamsMessage, swiftOrderParamsSignature, orderParams.marketIndex, takerInfo);
|
|
3071
3091
|
orderParams = (0, orderParams_1.getOrderParams)(orderParams, { marketType: types_1.MarketType.PERP });
|
|
3072
3092
|
const userStatsPublicKey = this.getUserStatsAccountPublicKey();
|
|
@@ -3091,7 +3111,7 @@ class DriftClient {
|
|
|
3091
3111
|
isSigner: false,
|
|
3092
3112
|
});
|
|
3093
3113
|
}
|
|
3094
|
-
const placeAndMakeIx = await this.program.instruction.
|
|
3114
|
+
const placeAndMakeIx = await this.program.instruction.placeAndMakeSwiftPerpOrder(orderParams, swiftOrderUuid, {
|
|
3095
3115
|
accounts: {
|
|
3096
3116
|
state: await this.getStatePublicKey(),
|
|
3097
3117
|
user,
|
|
@@ -3099,6 +3119,7 @@ class DriftClient {
|
|
|
3099
3119
|
taker: takerInfo.taker,
|
|
3100
3120
|
takerStats: takerInfo.takerStats,
|
|
3101
3121
|
authority: this.wallet.publicKey,
|
|
3122
|
+
takerSwiftUserOrders: (0, pda_1.getSwiftUserAccountPublicKey)(this.program.programId, takerInfo.taker),
|
|
3102
3123
|
},
|
|
3103
3124
|
remainingAccounts,
|
|
3104
3125
|
});
|
|
@@ -3718,6 +3739,7 @@ class DriftClient {
|
|
|
3718
3739
|
writableSpotMarketIndexes: [marketIndex],
|
|
3719
3740
|
});
|
|
3720
3741
|
const spotMarket = this.getSpotMarketAccount(marketIndex);
|
|
3742
|
+
const tokenProgramId = this.getTokenProgramForSpotMarket(spotMarket);
|
|
3721
3743
|
this.addTokenMintToRemainingAccounts(spotMarket, remainingAccounts);
|
|
3722
3744
|
return await this.program.instruction.resolveSpotBankruptcy(marketIndex, {
|
|
3723
3745
|
accounts: {
|
|
@@ -3730,7 +3752,7 @@ class DriftClient {
|
|
|
3730
3752
|
spotMarketVault: spotMarket.vault,
|
|
3731
3753
|
insuranceFundVault: spotMarket.insuranceFund.vault,
|
|
3732
3754
|
driftSigner: this.getSignerPublicKey(),
|
|
3733
|
-
tokenProgram:
|
|
3755
|
+
tokenProgram: tokenProgramId,
|
|
3734
3756
|
},
|
|
3735
3757
|
remainingAccounts: remainingAccounts,
|
|
3736
3758
|
});
|
|
@@ -3880,6 +3902,10 @@ class DriftClient {
|
|
|
3880
3902
|
const spotMarketAccount = this.getSpotMarketAccount(marketIndex);
|
|
3881
3903
|
const isSolMarket = spotMarketAccount.mint.equals(spotMarkets_1.WRAPPED_SOL_MINT);
|
|
3882
3904
|
const createWSOLTokenAccount = isSolMarket && collateralAccountPublicKey.equals(this.wallet.publicKey);
|
|
3905
|
+
const tokenProgramId = this.getTokenProgramForSpotMarket(spotMarketAccount);
|
|
3906
|
+
// create associated token account because it may not exist
|
|
3907
|
+
const associatedTokenAccountPublicKey = (0, spl_token_1.getAssociatedTokenAddressSync)(spotMarketAccount.mint, this.wallet.publicKey, true, tokenProgramId);
|
|
3908
|
+
addIfStakeIxs.push(await (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(this.wallet.publicKey, associatedTokenAccountPublicKey, this.wallet.publicKey, spotMarketAccount.mint, tokenProgramId));
|
|
3883
3909
|
let tokenAccount;
|
|
3884
3910
|
if (!(await this.checkIfAccountExists(this.getUserStatsAccountPublicKey()))) {
|
|
3885
3911
|
addIfStakeIxs.push(await this.getInitializeUserStatsIx());
|
|
@@ -3952,6 +3978,7 @@ class DriftClient {
|
|
|
3952
3978
|
const additionalSigners = [];
|
|
3953
3979
|
const isSolMarket = spotMarketAccount.mint.equals(spotMarkets_1.WRAPPED_SOL_MINT);
|
|
3954
3980
|
const createWSOLTokenAccount = isSolMarket && collateralAccountPublicKey.equals(this.wallet.publicKey);
|
|
3981
|
+
const tokenProgramId = this.getTokenProgramForSpotMarket(spotMarketAccount);
|
|
3955
3982
|
let tokenAccount;
|
|
3956
3983
|
if (createWSOLTokenAccount) {
|
|
3957
3984
|
const { ixs, pubkey } = await this.getWrappedSolAccountCreationIxs(numericConstants_1.ZERO, true);
|
|
@@ -3964,7 +3991,7 @@ class DriftClient {
|
|
|
3964
3991
|
tokenAccount = collateralAccountPublicKey;
|
|
3965
3992
|
const tokenAccountExists = await this.checkIfAccountExists(tokenAccount);
|
|
3966
3993
|
if (!tokenAccountExists) {
|
|
3967
|
-
const createTokenAccountIx = await this.createAssociatedTokenAccountIdempotentInstruction(tokenAccount, this.wallet.publicKey, this.wallet.publicKey, spotMarketAccount.mint);
|
|
3994
|
+
const createTokenAccountIx = await this.createAssociatedTokenAccountIdempotentInstruction(tokenAccount, this.wallet.publicKey, this.wallet.publicKey, spotMarketAccount.mint, tokenProgramId);
|
|
3968
3995
|
removeIfStakeIxs.push(createTokenAccountIx);
|
|
3969
3996
|
}
|
|
3970
3997
|
}
|
|
@@ -4045,6 +4072,7 @@ class DriftClient {
|
|
|
4045
4072
|
}
|
|
4046
4073
|
async getSettleRevenueToInsuranceFundIx(spotMarketIndex) {
|
|
4047
4074
|
const spotMarketAccount = this.getSpotMarketAccount(spotMarketIndex);
|
|
4075
|
+
const tokenProgramId = this.getTokenProgramForSpotMarket(spotMarketAccount);
|
|
4048
4076
|
const remainingAccounts = [];
|
|
4049
4077
|
this.addTokenMintToRemainingAccounts(spotMarketAccount, remainingAccounts);
|
|
4050
4078
|
const ix = await this.program.instruction.settleRevenueToInsuranceFund(spotMarketIndex, {
|
|
@@ -4054,7 +4082,7 @@ class DriftClient {
|
|
|
4054
4082
|
spotMarketVault: spotMarketAccount.vault,
|
|
4055
4083
|
driftSigner: this.getSignerPublicKey(),
|
|
4056
4084
|
insuranceFundVault: spotMarketAccount.insuranceFund.vault,
|
|
4057
|
-
tokenProgram:
|
|
4085
|
+
tokenProgram: tokenProgramId,
|
|
4058
4086
|
},
|
|
4059
4087
|
remainingAccounts,
|
|
4060
4088
|
});
|
|
@@ -4072,6 +4100,7 @@ class DriftClient {
|
|
|
4072
4100
|
writableSpotMarketIndexes: [spotMarketIndex],
|
|
4073
4101
|
});
|
|
4074
4102
|
const spotMarket = this.getSpotMarketAccount(spotMarketIndex);
|
|
4103
|
+
const tokenProgramId = this.getTokenProgramForSpotMarket(spotMarket);
|
|
4075
4104
|
return await this.program.instruction.resolvePerpPnlDeficit(spotMarketIndex, perpMarketIndex, {
|
|
4076
4105
|
accounts: {
|
|
4077
4106
|
state: await this.getStatePublicKey(),
|
|
@@ -4079,7 +4108,7 @@ class DriftClient {
|
|
|
4079
4108
|
spotMarketVault: spotMarket.vault,
|
|
4080
4109
|
insuranceFundVault: spotMarket.insuranceFund.vault,
|
|
4081
4110
|
driftSigner: this.getSignerPublicKey(),
|
|
4082
|
-
tokenProgram:
|
|
4111
|
+
tokenProgram: tokenProgramId,
|
|
4083
4112
|
},
|
|
4084
4113
|
remainingAccounts: remainingAccounts,
|
|
4085
4114
|
});
|
|
@@ -4101,6 +4130,13 @@ class DriftClient {
|
|
|
4101
4130
|
});
|
|
4102
4131
|
return ix;
|
|
4103
4132
|
}
|
|
4133
|
+
/**
|
|
4134
|
+
* This ix will donate your funds to drift revenue pool. It does not deposit into your user account
|
|
4135
|
+
* @param marketIndex
|
|
4136
|
+
* @param amount
|
|
4137
|
+
* @param userTokenAccountPublicKey
|
|
4138
|
+
* @returns
|
|
4139
|
+
*/
|
|
4104
4140
|
async depositIntoSpotMarketRevenuePool(marketIndex, amount, userTokenAccountPublicKey) {
|
|
4105
4141
|
const ix = await this.getDepositIntoSpotMarketRevenuePoolIx(marketIndex, amount, userTokenAccountPublicKey);
|
|
4106
4142
|
const tx = await this.buildTransaction([ix]);
|
|
@@ -4148,7 +4184,14 @@ class DriftClient {
|
|
|
4148
4184
|
else {
|
|
4149
4185
|
marketAccount = this.getSpotMarketAccount(marketIndex);
|
|
4150
4186
|
}
|
|
4151
|
-
|
|
4187
|
+
let takeFeeAdjustment;
|
|
4188
|
+
if (user && user.isHighLeverageMode()) {
|
|
4189
|
+
takeFeeAdjustment = 100;
|
|
4190
|
+
}
|
|
4191
|
+
else {
|
|
4192
|
+
takeFeeAdjustment = marketAccount.feeAdjustment;
|
|
4193
|
+
}
|
|
4194
|
+
takerFee += (takerFee * takeFeeAdjustment) / 100;
|
|
4152
4195
|
makerFee += (makerFee * marketAccount.feeAdjustment) / 100;
|
|
4153
4196
|
}
|
|
4154
4197
|
return {
|
|
@@ -4289,7 +4332,7 @@ class DriftClient {
|
|
|
4289
4332
|
},
|
|
4290
4333
|
});
|
|
4291
4334
|
}
|
|
4292
|
-
async getPostSwitchboardOnDemandUpdateAtomicIx(feed, numSignatures = 3) {
|
|
4335
|
+
async getPostSwitchboardOnDemandUpdateAtomicIx(feed, recentSlothash, numSignatures = 3) {
|
|
4293
4336
|
const program = await this.getSwitchboardOnDemandProgram();
|
|
4294
4337
|
const feedAccount = new on_demand_1.PullFeed(program, feed);
|
|
4295
4338
|
if (!this.sbProgramFeedConfigs) {
|
|
@@ -4301,14 +4344,16 @@ class DriftClient {
|
|
|
4301
4344
|
}
|
|
4302
4345
|
const [pullIx, _responses, success] = await feedAccount.fetchUpdateIx({
|
|
4303
4346
|
numSignatures,
|
|
4304
|
-
}
|
|
4347
|
+
}, recentSlothash
|
|
4348
|
+
? [[new anchor_1.BN(recentSlothash.slot), recentSlothash.hash]]
|
|
4349
|
+
: undefined);
|
|
4305
4350
|
if (!success) {
|
|
4306
4351
|
return undefined;
|
|
4307
4352
|
}
|
|
4308
4353
|
return pullIx;
|
|
4309
4354
|
}
|
|
4310
|
-
async postSwitchboardOnDemandUpdate(feed, numSignatures = 3) {
|
|
4311
|
-
const pullIx = await this.getPostSwitchboardOnDemandUpdateAtomicIx(feed, numSignatures);
|
|
4355
|
+
async postSwitchboardOnDemandUpdate(feed, recentSlothash, numSignatures = 3) {
|
|
4356
|
+
const pullIx = await this.getPostSwitchboardOnDemandUpdateAtomicIx(feed, recentSlothash, numSignatures);
|
|
4312
4357
|
if (!pullIx) {
|
|
4313
4358
|
return undefined;
|
|
4314
4359
|
}
|