@stabbleorg/mclmm-sdk 0.2.2 → 0.3.0
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/lib/index.js +81 -20
- package/lib/index.mjs +88 -22
- package/lib/position-manager.d.ts +10 -1
- package/lib/position-manager.d.ts.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -7916,6 +7916,7 @@ var NATIVE_MINT_2022 = new import_web3.PublicKey("9pan9bMn5HatX4EJdBwg9VgCa7Uz5H
|
|
|
7916
7916
|
// src/position-manager.ts
|
|
7917
7917
|
var import_system = require("@solana-program/system");
|
|
7918
7918
|
var import_decimal4 = __toESM(require("decimal.js"));
|
|
7919
|
+
var TOKEN_ACCOUNT_SIZE = 165n;
|
|
7919
7920
|
var PositionManager = class {
|
|
7920
7921
|
constructor(config) {
|
|
7921
7922
|
this.config = config;
|
|
@@ -7958,6 +7959,52 @@ var PositionManager = class {
|
|
|
7958
7959
|
})
|
|
7959
7960
|
];
|
|
7960
7961
|
}
|
|
7962
|
+
/**
|
|
7963
|
+
* Build partial unwrap SOL instructions using a temp account:
|
|
7964
|
+
* 1. Create temp account
|
|
7965
|
+
* 2. Initialize as WSOL token account
|
|
7966
|
+
* 3. Transfer specific amount from source ATA to temp
|
|
7967
|
+
* 4. Close temp account (lamports go to destination)
|
|
7968
|
+
*/
|
|
7969
|
+
async buildPartialUnwrapSolInstructions(params) {
|
|
7970
|
+
const { payer, sourceAta, destination, amount } = params;
|
|
7971
|
+
const rentExemptLamports = await this.config.rpc.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE).send();
|
|
7972
|
+
const tempAccount = await (0, import_kit53.generateKeyPairSigner)();
|
|
7973
|
+
const createTempAccountIx = (0, import_system.getCreateAccountInstruction)({
|
|
7974
|
+
payer,
|
|
7975
|
+
newAccount: tempAccount,
|
|
7976
|
+
lamports: rentExemptLamports,
|
|
7977
|
+
space: TOKEN_ACCOUNT_SIZE,
|
|
7978
|
+
programAddress: import_token4.TOKEN_PROGRAM_ADDRESS
|
|
7979
|
+
});
|
|
7980
|
+
const initTempAccountIx = (0, import_token4.getInitializeAccount3Instruction)({
|
|
7981
|
+
account: tempAccount.address,
|
|
7982
|
+
mint: (0, import_kit53.address)(NATIVE_MINT.toString()),
|
|
7983
|
+
owner: destination
|
|
7984
|
+
});
|
|
7985
|
+
const transferIx = (0, import_token4.getTransferCheckedInstruction)({
|
|
7986
|
+
source: sourceAta,
|
|
7987
|
+
mint: (0, import_kit53.address)(NATIVE_MINT.toString()),
|
|
7988
|
+
destination: tempAccount.address,
|
|
7989
|
+
authority: payer,
|
|
7990
|
+
amount,
|
|
7991
|
+
decimals: 9
|
|
7992
|
+
});
|
|
7993
|
+
const closeIx = (0, import_token4.getCloseAccountInstruction)({
|
|
7994
|
+
account: tempAccount.address,
|
|
7995
|
+
destination,
|
|
7996
|
+
owner: destination
|
|
7997
|
+
});
|
|
7998
|
+
return {
|
|
7999
|
+
instructions: [
|
|
8000
|
+
createTempAccountIx,
|
|
8001
|
+
initTempAccountIx,
|
|
8002
|
+
transferIx,
|
|
8003
|
+
closeIx
|
|
8004
|
+
],
|
|
8005
|
+
signers: [tempAccount]
|
|
8006
|
+
};
|
|
8007
|
+
}
|
|
7961
8008
|
/**
|
|
7962
8009
|
* Make open position from liquidity instructions
|
|
7963
8010
|
* Use this when you know the exact liquidity amount you want to provide
|
|
@@ -8255,6 +8302,7 @@ var PositionManager = class {
|
|
|
8255
8302
|
/**
|
|
8256
8303
|
* Make decrease liquidity V2 instructions
|
|
8257
8304
|
* @param params - Decrease liquidity parameters
|
|
8305
|
+
* @param params.isNative - Whether to unwrap WSOL to native SOL after decrease
|
|
8258
8306
|
* @returns Instruction result following Raydium pattern
|
|
8259
8307
|
*/
|
|
8260
8308
|
async makeDecreaseLiquidityV2Instructions(params) {
|
|
@@ -8264,8 +8312,10 @@ var PositionManager = class {
|
|
|
8264
8312
|
ownerInfo,
|
|
8265
8313
|
liquidity,
|
|
8266
8314
|
amountMinA,
|
|
8267
|
-
amountMinB
|
|
8315
|
+
amountMinB,
|
|
8316
|
+
isNative = false
|
|
8268
8317
|
} = params;
|
|
8318
|
+
const signers = [];
|
|
8269
8319
|
const [personalPosition] = await PdaUtils.getPositionStatePda(
|
|
8270
8320
|
ownerPosition.nftMint
|
|
8271
8321
|
);
|
|
@@ -8321,9 +8371,35 @@ var PositionManager = class {
|
|
|
8321
8371
|
...instruction,
|
|
8322
8372
|
accounts: [...instruction.accounts, ...remAccounts]
|
|
8323
8373
|
};
|
|
8374
|
+
const instructions = [ixWithRemAccounts];
|
|
8375
|
+
if (isNative) {
|
|
8376
|
+
const destination = ownerInfo.wallet.address;
|
|
8377
|
+
const isFullWithdrawal = liquidity === ownerPosition.liquidity;
|
|
8378
|
+
const isTokenANative = poolState.data.tokenMint0.toString() === NATIVE_MINT.toString();
|
|
8379
|
+
const wsolAta = isTokenANative ? ownerInfo.tokenAccountA : ownerInfo.tokenAccountB;
|
|
8380
|
+
const amount = isTokenANative ? amountMinA : amountMinB;
|
|
8381
|
+
if (isFullWithdrawal) {
|
|
8382
|
+
const unwrapIxs = this.buildUnwrapSolInstruction({
|
|
8383
|
+
payer: ownerInfo.wallet,
|
|
8384
|
+
ata: wsolAta,
|
|
8385
|
+
owner: ownerInfo.wallet.address,
|
|
8386
|
+
destination
|
|
8387
|
+
});
|
|
8388
|
+
instructions.push(...unwrapIxs);
|
|
8389
|
+
} else {
|
|
8390
|
+
const { instructions: partialUnwrapIxs, signers: partialSigners } = await this.buildPartialUnwrapSolInstructions({
|
|
8391
|
+
payer: ownerInfo.wallet,
|
|
8392
|
+
sourceAta: wsolAta,
|
|
8393
|
+
destination,
|
|
8394
|
+
amount
|
|
8395
|
+
});
|
|
8396
|
+
instructions.push(...partialUnwrapIxs);
|
|
8397
|
+
signers.push(...partialSigners);
|
|
8398
|
+
}
|
|
8399
|
+
}
|
|
8324
8400
|
return {
|
|
8325
|
-
instructions
|
|
8326
|
-
signers
|
|
8401
|
+
instructions,
|
|
8402
|
+
signers,
|
|
8327
8403
|
instructionTypes: ["DecreaseLiquidityV2"],
|
|
8328
8404
|
address: {
|
|
8329
8405
|
tickArrayLower,
|
|
@@ -8341,7 +8417,7 @@ var PositionManager = class {
|
|
|
8341
8417
|
* @returns Instruction result following established pattern
|
|
8342
8418
|
*/
|
|
8343
8419
|
async makeClosePositionInstructions(params) {
|
|
8344
|
-
const { ownerPosition, ownerInfo
|
|
8420
|
+
const { ownerPosition, ownerInfo } = params;
|
|
8345
8421
|
const [personalPosition] = await PdaUtils.getPositionStatePda(
|
|
8346
8422
|
ownerPosition.nftMint
|
|
8347
8423
|
);
|
|
@@ -8357,23 +8433,8 @@ var PositionManager = class {
|
|
|
8357
8433
|
personalPosition,
|
|
8358
8434
|
tokenProgram: import_token_20222.TOKEN_2022_PROGRAM_ADDRESS
|
|
8359
8435
|
});
|
|
8360
|
-
let unrwrapWsolInstructions = [];
|
|
8361
|
-
if (isNative) {
|
|
8362
|
-
const ownerWallet = ownerInfo.wallet;
|
|
8363
|
-
const [ata] = await (0, import_token4.findAssociatedTokenPda)({
|
|
8364
|
-
mint: (0, import_kit53.address)(NATIVE_MINT.toString()),
|
|
8365
|
-
owner: ownerWallet.address,
|
|
8366
|
-
tokenProgram: import_token4.TOKEN_PROGRAM_ADDRESS
|
|
8367
|
-
});
|
|
8368
|
-
unrwrapWsolInstructions = this.buildUnwrapSolInstruction({
|
|
8369
|
-
payer: ownerWallet,
|
|
8370
|
-
ata,
|
|
8371
|
-
owner: ownerWallet.address,
|
|
8372
|
-
destination: ownerWallet.address
|
|
8373
|
-
});
|
|
8374
|
-
}
|
|
8375
8436
|
return {
|
|
8376
|
-
instructions: [instruction
|
|
8437
|
+
instructions: [instruction],
|
|
8377
8438
|
signers: [],
|
|
8378
8439
|
instructionTypes: ["ClosePosition"],
|
|
8379
8440
|
address: { positionNftAccount, personalPosition },
|
package/lib/index.mjs
CHANGED
|
@@ -8474,7 +8474,9 @@ import {
|
|
|
8474
8474
|
findAssociatedTokenPda,
|
|
8475
8475
|
TOKEN_PROGRAM_ADDRESS as TOKEN_PROGRAM_ADDRESS3,
|
|
8476
8476
|
getCreateAssociatedTokenIdempotentInstruction,
|
|
8477
|
-
getCloseAccountInstruction
|
|
8477
|
+
getCloseAccountInstruction,
|
|
8478
|
+
getInitializeAccount3Instruction,
|
|
8479
|
+
getTransferCheckedInstruction
|
|
8478
8480
|
} from "@solana-program/token";
|
|
8479
8481
|
import { TOKEN_2022_PROGRAM_ADDRESS as TOKEN_2022_PROGRAM_ADDRESS2 } from "@solana-program/token-2022";
|
|
8480
8482
|
import BN6 from "bn.js";
|
|
@@ -8488,8 +8490,12 @@ var NATIVE_MINT = new PublicKey("So11111111111111111111111111111111111111112");
|
|
|
8488
8490
|
var NATIVE_MINT_2022 = new PublicKey("9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP");
|
|
8489
8491
|
|
|
8490
8492
|
// src/position-manager.ts
|
|
8491
|
-
import {
|
|
8493
|
+
import {
|
|
8494
|
+
getTransferSolInstruction,
|
|
8495
|
+
getCreateAccountInstruction
|
|
8496
|
+
} from "@solana-program/system";
|
|
8492
8497
|
import Decimal4 from "decimal.js";
|
|
8498
|
+
var TOKEN_ACCOUNT_SIZE = 165n;
|
|
8493
8499
|
var PositionManager = class {
|
|
8494
8500
|
constructor(config) {
|
|
8495
8501
|
this.config = config;
|
|
@@ -8532,6 +8538,52 @@ var PositionManager = class {
|
|
|
8532
8538
|
})
|
|
8533
8539
|
];
|
|
8534
8540
|
}
|
|
8541
|
+
/**
|
|
8542
|
+
* Build partial unwrap SOL instructions using a temp account:
|
|
8543
|
+
* 1. Create temp account
|
|
8544
|
+
* 2. Initialize as WSOL token account
|
|
8545
|
+
* 3. Transfer specific amount from source ATA to temp
|
|
8546
|
+
* 4. Close temp account (lamports go to destination)
|
|
8547
|
+
*/
|
|
8548
|
+
async buildPartialUnwrapSolInstructions(params) {
|
|
8549
|
+
const { payer, sourceAta, destination, amount } = params;
|
|
8550
|
+
const rentExemptLamports = await this.config.rpc.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE).send();
|
|
8551
|
+
const tempAccount = await generateKeyPairSigner();
|
|
8552
|
+
const createTempAccountIx = getCreateAccountInstruction({
|
|
8553
|
+
payer,
|
|
8554
|
+
newAccount: tempAccount,
|
|
8555
|
+
lamports: rentExemptLamports,
|
|
8556
|
+
space: TOKEN_ACCOUNT_SIZE,
|
|
8557
|
+
programAddress: TOKEN_PROGRAM_ADDRESS3
|
|
8558
|
+
});
|
|
8559
|
+
const initTempAccountIx = getInitializeAccount3Instruction({
|
|
8560
|
+
account: tempAccount.address,
|
|
8561
|
+
mint: address4(NATIVE_MINT.toString()),
|
|
8562
|
+
owner: destination
|
|
8563
|
+
});
|
|
8564
|
+
const transferIx = getTransferCheckedInstruction({
|
|
8565
|
+
source: sourceAta,
|
|
8566
|
+
mint: address4(NATIVE_MINT.toString()),
|
|
8567
|
+
destination: tempAccount.address,
|
|
8568
|
+
authority: payer,
|
|
8569
|
+
amount,
|
|
8570
|
+
decimals: 9
|
|
8571
|
+
});
|
|
8572
|
+
const closeIx = getCloseAccountInstruction({
|
|
8573
|
+
account: tempAccount.address,
|
|
8574
|
+
destination,
|
|
8575
|
+
owner: destination
|
|
8576
|
+
});
|
|
8577
|
+
return {
|
|
8578
|
+
instructions: [
|
|
8579
|
+
createTempAccountIx,
|
|
8580
|
+
initTempAccountIx,
|
|
8581
|
+
transferIx,
|
|
8582
|
+
closeIx
|
|
8583
|
+
],
|
|
8584
|
+
signers: [tempAccount]
|
|
8585
|
+
};
|
|
8586
|
+
}
|
|
8535
8587
|
/**
|
|
8536
8588
|
* Make open position from liquidity instructions
|
|
8537
8589
|
* Use this when you know the exact liquidity amount you want to provide
|
|
@@ -8829,6 +8881,7 @@ var PositionManager = class {
|
|
|
8829
8881
|
/**
|
|
8830
8882
|
* Make decrease liquidity V2 instructions
|
|
8831
8883
|
* @param params - Decrease liquidity parameters
|
|
8884
|
+
* @param params.isNative - Whether to unwrap WSOL to native SOL after decrease
|
|
8832
8885
|
* @returns Instruction result following Raydium pattern
|
|
8833
8886
|
*/
|
|
8834
8887
|
async makeDecreaseLiquidityV2Instructions(params) {
|
|
@@ -8838,8 +8891,10 @@ var PositionManager = class {
|
|
|
8838
8891
|
ownerInfo,
|
|
8839
8892
|
liquidity,
|
|
8840
8893
|
amountMinA,
|
|
8841
|
-
amountMinB
|
|
8894
|
+
amountMinB,
|
|
8895
|
+
isNative = false
|
|
8842
8896
|
} = params;
|
|
8897
|
+
const signers = [];
|
|
8843
8898
|
const [personalPosition] = await PdaUtils.getPositionStatePda(
|
|
8844
8899
|
ownerPosition.nftMint
|
|
8845
8900
|
);
|
|
@@ -8895,9 +8950,35 @@ var PositionManager = class {
|
|
|
8895
8950
|
...instruction,
|
|
8896
8951
|
accounts: [...instruction.accounts, ...remAccounts]
|
|
8897
8952
|
};
|
|
8953
|
+
const instructions = [ixWithRemAccounts];
|
|
8954
|
+
if (isNative) {
|
|
8955
|
+
const destination = ownerInfo.wallet.address;
|
|
8956
|
+
const isFullWithdrawal = liquidity === ownerPosition.liquidity;
|
|
8957
|
+
const isTokenANative = poolState.data.tokenMint0.toString() === NATIVE_MINT.toString();
|
|
8958
|
+
const wsolAta = isTokenANative ? ownerInfo.tokenAccountA : ownerInfo.tokenAccountB;
|
|
8959
|
+
const amount = isTokenANative ? amountMinA : amountMinB;
|
|
8960
|
+
if (isFullWithdrawal) {
|
|
8961
|
+
const unwrapIxs = this.buildUnwrapSolInstruction({
|
|
8962
|
+
payer: ownerInfo.wallet,
|
|
8963
|
+
ata: wsolAta,
|
|
8964
|
+
owner: ownerInfo.wallet.address,
|
|
8965
|
+
destination
|
|
8966
|
+
});
|
|
8967
|
+
instructions.push(...unwrapIxs);
|
|
8968
|
+
} else {
|
|
8969
|
+
const { instructions: partialUnwrapIxs, signers: partialSigners } = await this.buildPartialUnwrapSolInstructions({
|
|
8970
|
+
payer: ownerInfo.wallet,
|
|
8971
|
+
sourceAta: wsolAta,
|
|
8972
|
+
destination,
|
|
8973
|
+
amount
|
|
8974
|
+
});
|
|
8975
|
+
instructions.push(...partialUnwrapIxs);
|
|
8976
|
+
signers.push(...partialSigners);
|
|
8977
|
+
}
|
|
8978
|
+
}
|
|
8898
8979
|
return {
|
|
8899
|
-
instructions
|
|
8900
|
-
signers
|
|
8980
|
+
instructions,
|
|
8981
|
+
signers,
|
|
8901
8982
|
instructionTypes: ["DecreaseLiquidityV2"],
|
|
8902
8983
|
address: {
|
|
8903
8984
|
tickArrayLower,
|
|
@@ -8915,7 +8996,7 @@ var PositionManager = class {
|
|
|
8915
8996
|
* @returns Instruction result following established pattern
|
|
8916
8997
|
*/
|
|
8917
8998
|
async makeClosePositionInstructions(params) {
|
|
8918
|
-
const { ownerPosition, ownerInfo
|
|
8999
|
+
const { ownerPosition, ownerInfo } = params;
|
|
8919
9000
|
const [personalPosition] = await PdaUtils.getPositionStatePda(
|
|
8920
9001
|
ownerPosition.nftMint
|
|
8921
9002
|
);
|
|
@@ -8931,23 +9012,8 @@ var PositionManager = class {
|
|
|
8931
9012
|
personalPosition,
|
|
8932
9013
|
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS2
|
|
8933
9014
|
});
|
|
8934
|
-
let unrwrapWsolInstructions = [];
|
|
8935
|
-
if (isNative) {
|
|
8936
|
-
const ownerWallet = ownerInfo.wallet;
|
|
8937
|
-
const [ata] = await findAssociatedTokenPda({
|
|
8938
|
-
mint: address4(NATIVE_MINT.toString()),
|
|
8939
|
-
owner: ownerWallet.address,
|
|
8940
|
-
tokenProgram: TOKEN_PROGRAM_ADDRESS3
|
|
8941
|
-
});
|
|
8942
|
-
unrwrapWsolInstructions = this.buildUnwrapSolInstruction({
|
|
8943
|
-
payer: ownerWallet,
|
|
8944
|
-
ata,
|
|
8945
|
-
owner: ownerWallet.address,
|
|
8946
|
-
destination: ownerWallet.address
|
|
8947
|
-
});
|
|
8948
|
-
}
|
|
8949
9015
|
return {
|
|
8950
|
-
instructions: [instruction
|
|
9016
|
+
instructions: [instruction],
|
|
8951
9017
|
signers: [],
|
|
8952
9018
|
instructionTypes: ["ClosePosition"],
|
|
8953
9019
|
address: { positionNftAccount, personalPosition },
|
|
@@ -6,6 +6,14 @@ export declare class PositionManager {
|
|
|
6
6
|
constructor(config: ClmmSdkConfig);
|
|
7
7
|
private buildWrapSolInstructions;
|
|
8
8
|
private buildUnwrapSolInstruction;
|
|
9
|
+
/**
|
|
10
|
+
* Build partial unwrap SOL instructions using a temp account:
|
|
11
|
+
* 1. Create temp account
|
|
12
|
+
* 2. Initialize as WSOL token account
|
|
13
|
+
* 3. Transfer specific amount from source ATA to temp
|
|
14
|
+
* 4. Close temp account (lamports go to destination)
|
|
15
|
+
*/
|
|
16
|
+
private buildPartialUnwrapSolInstructions;
|
|
9
17
|
/**
|
|
10
18
|
* Make open position from liquidity instructions
|
|
11
19
|
* Use this when you know the exact liquidity amount you want to provide
|
|
@@ -81,6 +89,7 @@ export declare class PositionManager {
|
|
|
81
89
|
/**
|
|
82
90
|
* Make decrease liquidity V2 instructions
|
|
83
91
|
* @param params - Decrease liquidity parameters
|
|
92
|
+
* @param params.isNative - Whether to unwrap WSOL to native SOL after decrease
|
|
84
93
|
* @returns Instruction result following Raydium pattern
|
|
85
94
|
*/
|
|
86
95
|
makeDecreaseLiquidityV2Instructions(params: {
|
|
@@ -94,6 +103,7 @@ export declare class PositionManager {
|
|
|
94
103
|
liquidity: bigint;
|
|
95
104
|
amountMinA: bigint;
|
|
96
105
|
amountMinB: bigint;
|
|
106
|
+
isNative?: boolean;
|
|
97
107
|
}): Promise<MakeInstructionResult<{}>>;
|
|
98
108
|
/**
|
|
99
109
|
* Make close position instructions
|
|
@@ -105,7 +115,6 @@ export declare class PositionManager {
|
|
|
105
115
|
ownerInfo: {
|
|
106
116
|
wallet: TransactionSigner;
|
|
107
117
|
};
|
|
108
|
-
isNative: boolean;
|
|
109
118
|
}): Promise<MakeInstructionResult<{}>>;
|
|
110
119
|
/**
|
|
111
120
|
* Get position information by NFT mint
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position-manager.d.ts","sourceRoot":"","sources":["../src/position-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EAKvB,MAAM,aAAa,CAAC;AAErB,OAAO,EAOL,qBAAqB,EACrB,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,YAAY,EACb,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"position-manager.d.ts","sourceRoot":"","sources":["../src/position-manager.ts"],"names":[],"mappings":"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"}
|