@kamino-finance/kliquidity-sdk 7.0.10 → 7.0.11
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/Kamino.d.ts.map +1 -1
- package/dist/Kamino.js +31 -31
- package/dist/Kamino.js.map +1 -1
- package/dist/rebalance_methods/autodriftRebalance.d.ts.map +1 -1
- package/dist/rebalance_methods/autodriftRebalance.js +5 -5
- package/dist/rebalance_methods/autodriftRebalance.js.map +1 -1
- package/dist/rebalance_methods/driftRebalance.d.ts.map +1 -1
- package/dist/rebalance_methods/driftRebalance.js +5 -5
- package/dist/rebalance_methods/driftRebalance.js.map +1 -1
- package/dist/rebalance_methods/takeProfitRebalance.js +3 -3
- package/dist/rebalance_methods/takeProfitRebalance.js.map +1 -1
- package/dist/services/RaydiumPoolsResponse.d.ts +2 -2
- package/dist/services/RaydiumPoolsResponse.d.ts.map +1 -1
- package/dist/services/RaydiumService.d.ts +2 -0
- package/dist/services/RaydiumService.d.ts.map +1 -1
- package/dist/services/RaydiumService.js +20 -23
- package/dist/services/RaydiumService.js.map +1 -1
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +6 -5
- package/dist/utils/utils.js.map +1 -1
- package/dist/whirlpools-client/shim/remove-liquidity.js +5 -5
- package/dist/whirlpools-client/shim/remove-liquidity.js.map +1 -1
- package/package.json +3 -3
- package/src/Kamino.ts +12 -10
- package/src/rebalance_methods/autodriftRebalance.ts +1 -1
- package/src/rebalance_methods/driftRebalance.ts +1 -1
- package/src/rebalance_methods/takeProfitRebalance.ts +1 -1
- package/src/services/RaydiumPoolsResponse.ts +2 -2
- package/src/services/RaydiumService.ts +27 -26
- package/src/utils/utils.ts +3 -1
- package/src/whirlpools-client/shim/remove-liquidity.ts +5 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kamino-finance/kliquidity-sdk",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.11",
|
|
4
4
|
"description": "Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -49,11 +49,11 @@
|
|
|
49
49
|
"@coral-xyz/anchor": "^0.29.0",
|
|
50
50
|
"@coral-xyz/borsh": "^0.30.1",
|
|
51
51
|
"@hubbleprotocol/hubble-config": "^5.0.0",
|
|
52
|
-
"@jup-ag/api": "^6.0.
|
|
52
|
+
"@jup-ag/api": "^6.0.38",
|
|
53
53
|
"@kamino-finance/scope-sdk": "^8.0.2",
|
|
54
54
|
"@orca-so/whirlpool-client-sdk": "^0.0.8",
|
|
55
55
|
"@orca-so/whirlpool-sdk": "^0.4.2",
|
|
56
|
-
"@raydium-io/raydium-sdk": "=1.
|
|
56
|
+
"@raydium-io/raydium-sdk-v2": "=0.1.111-alpha",
|
|
57
57
|
"@solana/spl-token": "^0.4.9",
|
|
58
58
|
"@solana/web3.js": "^1.95.8",
|
|
59
59
|
"axios": "^1.7.8",
|
package/src/Kamino.ts
CHANGED
|
@@ -119,6 +119,7 @@ import {
|
|
|
119
119
|
getTokenNameFromCollateralInfo,
|
|
120
120
|
keyOrDefault,
|
|
121
121
|
getMintDecimals,
|
|
122
|
+
ZERO_BN,
|
|
122
123
|
} from './utils';
|
|
123
124
|
import {
|
|
124
125
|
ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
@@ -180,14 +181,6 @@ import {
|
|
|
180
181
|
} from './kamino-client/types';
|
|
181
182
|
import { AmmConfig, PersonalPositionState, PoolState } from './raydium_client';
|
|
182
183
|
import { setRaydiumProgramId } from './raydium_client/programId';
|
|
183
|
-
import {
|
|
184
|
-
getPdaProtocolPositionAddress,
|
|
185
|
-
i32ToBytes,
|
|
186
|
-
LiquidityMath,
|
|
187
|
-
SqrtPriceMath,
|
|
188
|
-
TickMath,
|
|
189
|
-
TickUtils,
|
|
190
|
-
} from '@raydium-io/raydium-sdk';
|
|
191
184
|
|
|
192
185
|
import KaminoIdl from './kamino-client/idl.json';
|
|
193
186
|
import { OrcaService, RaydiumService, Whirlpool as OrcaPool, WhirlpoolAprApy } from './services';
|
|
@@ -345,6 +338,15 @@ import { BinArray, LbPair, PositionV2 } from './meteora_client/accounts';
|
|
|
345
338
|
import LbPairWithAddress from './models/LbPairWithAddress';
|
|
346
339
|
import { initializeBinArray, InitializeBinArrayAccounts, InitializeBinArrayArgs } from './meteora_client/instructions';
|
|
347
340
|
import { PubkeyHashMap } from './utils/pubkey';
|
|
341
|
+
import {
|
|
342
|
+
LiquidityMath,
|
|
343
|
+
SqrtPriceMath,
|
|
344
|
+
TickMath,
|
|
345
|
+
getPdaProtocolPositionAddress,
|
|
346
|
+
i32ToBytes,
|
|
347
|
+
TickUtils,
|
|
348
|
+
} from '@raydium-io/raydium-sdk-v2/lib';
|
|
349
|
+
|
|
348
350
|
export const KAMINO_IDL = KaminoIdl;
|
|
349
351
|
|
|
350
352
|
export class Kamino {
|
|
@@ -7391,7 +7393,7 @@ export class Kamino {
|
|
|
7391
7393
|
throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);
|
|
7392
7394
|
}
|
|
7393
7395
|
|
|
7394
|
-
return { amountSlippageA:
|
|
7396
|
+
return { amountSlippageA: ZERO_BN, amountSlippageB: ZERO_BN };
|
|
7395
7397
|
}
|
|
7396
7398
|
|
|
7397
7399
|
private async getDepositRatioFromBMeteora(
|
|
@@ -7408,7 +7410,7 @@ export class Kamino {
|
|
|
7408
7410
|
throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);
|
|
7409
7411
|
}
|
|
7410
7412
|
|
|
7411
|
-
return { amountSlippageA:
|
|
7413
|
+
return { amountSlippageA: ZERO_BN, amountSlippageB: ZERO_BN };
|
|
7412
7414
|
}
|
|
7413
7415
|
|
|
7414
7416
|
private getDepositRatioFromBOrca = async (
|
|
@@ -2,11 +2,11 @@ import Decimal from 'decimal.js';
|
|
|
2
2
|
import { PositionRange, RebalanceFieldInfo, RebalanceFieldsDict } from '../utils/types';
|
|
3
3
|
import { Dex, readPriceOption } from '../utils';
|
|
4
4
|
import { priceToTickIndex, sqrtPriceX64ToPrice, tickIndexToPrice } from '@orca-so/whirlpool-sdk';
|
|
5
|
-
import { SqrtPriceMath } from '@raydium-io/raydium-sdk';
|
|
6
5
|
import { RebalanceRaw } from '../kamino-client/types';
|
|
7
6
|
import { RebalanceTypeLabelName } from './consts';
|
|
8
7
|
import { upsertManyRebalanceFieldInfos } from './utils';
|
|
9
8
|
import { getPriceOfBinByBinIdWithDecimals } from '../utils/meteora';
|
|
9
|
+
import { SqrtPriceMath } from '@raydium-io/raydium-sdk-v2/lib';
|
|
10
10
|
|
|
11
11
|
export const DEFAULT_DRIFT_TICKS_PER_EPOCH = new Decimal(1);
|
|
12
12
|
export const DEFAULT_TICKS_BELOW_MID = new Decimal(10);
|
|
@@ -2,11 +2,11 @@ import Decimal from 'decimal.js';
|
|
|
2
2
|
import { PositionRange, RebalanceFieldInfo, RebalanceFieldsDict } from '../utils/types';
|
|
3
3
|
import { Dex } from '../utils';
|
|
4
4
|
import { priceToTickIndex, sqrtPriceX64ToPrice, tickIndexToPrice } from '@orca-so/whirlpool-sdk';
|
|
5
|
-
import { SqrtPriceMath } from '@raydium-io/raydium-sdk';
|
|
6
5
|
import { RebalanceRaw } from '../kamino-client/types';
|
|
7
6
|
import { RebalanceTypeLabelName } from './consts';
|
|
8
7
|
import { upsertManyRebalanceFieldInfos } from './utils';
|
|
9
8
|
import { getPriceOfBinByBinIdWithDecimals } from '../utils/meteora';
|
|
9
|
+
import { SqrtPriceMath } from '@raydium-io/raydium-sdk-v2/lib';
|
|
10
10
|
|
|
11
11
|
export const DEFAULT_TICKS_BELOW_MID = new Decimal(10);
|
|
12
12
|
export const DEFAULT_TICKS_ABOVE_MID = new Decimal(10);
|
|
@@ -5,8 +5,8 @@ import { Dex, readBigUint128LE } from '../utils';
|
|
|
5
5
|
import { sqrtPriceX64ToPrice } from '@orca-so/whirlpool-sdk';
|
|
6
6
|
import BN from 'bn.js';
|
|
7
7
|
import { RebalanceRaw } from '../kamino-client/types';
|
|
8
|
-
import { SqrtPriceMath } from '@raydium-io/raydium-sdk';
|
|
9
8
|
import { getPriceFromQ64Price } from '../utils/meteora';
|
|
9
|
+
import { SqrtPriceMath } from '@raydium-io/raydium-sdk-v2/lib';
|
|
10
10
|
|
|
11
11
|
export const DEFAULT_LOWER_RANGE_PRICE_DIFF_BPS = new Decimal(500);
|
|
12
12
|
export const DEFAULT_UPPER_RANGE_PRICE_DIFF_BPS = new Decimal(500);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ClmmConfigInfo } from "@raydium-io/raydium-sdk-v2/lib";
|
|
2
2
|
|
|
3
3
|
export interface RaydiumPoolsResponse {
|
|
4
4
|
data: Pool[];
|
|
@@ -12,7 +12,7 @@ export interface Pool {
|
|
|
12
12
|
vaultB: string;
|
|
13
13
|
mintDecimalsA: number;
|
|
14
14
|
mintDecimalsB: number;
|
|
15
|
-
ammConfig:
|
|
15
|
+
ammConfig: ClmmConfigInfo;
|
|
16
16
|
tvl: number;
|
|
17
17
|
day: Day;
|
|
18
18
|
week: Week;
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
} from './RaydiumPoolsResponse';
|
|
7
7
|
import { PersonalPositionState, PoolState } from '../raydium_client';
|
|
8
8
|
import Decimal from 'decimal.js';
|
|
9
|
-
import { AmmV3, AmmV3PoolInfo, PositionInfoLayout, TickMath, SqrtPriceMath } from '@raydium-io/raydium-sdk';
|
|
10
9
|
import { WhirlpoolAprApy } from './WhirlpoolAprApy';
|
|
11
10
|
import { WhirlpoolStrategy } from '../kamino-client/accounts';
|
|
12
11
|
import {
|
|
@@ -21,6 +20,16 @@ import axios from 'axios';
|
|
|
21
20
|
import { FullPercentage } from '../utils/CreationParameters';
|
|
22
21
|
import { PROGRAM_ID as RAYDIUM_PROGRAM_ID } from '../raydium_client/programId';
|
|
23
22
|
import { priceToTickIndexWithRounding } from '../utils/raydium';
|
|
23
|
+
import {
|
|
24
|
+
ApiV3PoolInfoConcentratedItem,
|
|
25
|
+
Clmm,
|
|
26
|
+
PoolUtils,
|
|
27
|
+
PositionInfoLayout,
|
|
28
|
+
Raydium,
|
|
29
|
+
RaydiumLoadParams,
|
|
30
|
+
SqrtPriceMath,
|
|
31
|
+
TickMath,
|
|
32
|
+
} from '@raydium-io/raydium-sdk-v2/lib';
|
|
24
33
|
|
|
25
34
|
export class RaydiumService {
|
|
26
35
|
private readonly _connection: Connection;
|
|
@@ -38,6 +47,15 @@ export class RaydiumService {
|
|
|
38
47
|
async getRaydiumWhirlpools(): Promise<RaydiumPoolsResponse> {
|
|
39
48
|
return (await axios.get<RaydiumPoolsResponse>(`https://api.kamino.finance/v2/raydium/ammPools`)).data;
|
|
40
49
|
}
|
|
50
|
+
|
|
51
|
+
async getRaydiumPoolInfo(poolPubkey: PublicKey): Promise<ApiV3PoolInfoConcentratedItem> {
|
|
52
|
+
const raydiumLoadParams: RaydiumLoadParams = { connection: this._connection };
|
|
53
|
+
const raydium = await Raydium.load(raydiumLoadParams);
|
|
54
|
+
const rayClmm = new Clmm({ scope: raydium, moduleName: '' });
|
|
55
|
+
const otherPoolInfo = await rayClmm.getPoolInfoFromRpc(poolPubkey.toString());
|
|
56
|
+
console.log('otherPoolInfo', otherPoolInfo);
|
|
57
|
+
return otherPoolInfo.poolInfo;
|
|
58
|
+
}
|
|
41
59
|
|
|
42
60
|
async getRaydiumPoolLiquidityDistribution(
|
|
43
61
|
pool: PublicKey,
|
|
@@ -122,16 +140,6 @@ export class RaydiumService {
|
|
|
122
140
|
throw Error(`Could not get find Raydium amm pool ${strategy.pool} from Raydium API`);
|
|
123
141
|
}
|
|
124
142
|
|
|
125
|
-
const poolInfo = (
|
|
126
|
-
await AmmV3.fetchMultiplePoolInfos({
|
|
127
|
-
connection: this._connection,
|
|
128
|
-
// @ts-ignore
|
|
129
|
-
poolKeys: [raydiumPool],
|
|
130
|
-
batchRequest: true,
|
|
131
|
-
chainTime: new Date().getTime() / 1000,
|
|
132
|
-
})
|
|
133
|
-
)[strategy.pool.toString()].state;
|
|
134
|
-
|
|
135
143
|
const priceRange = getStrategyPriceRangeRaydium(
|
|
136
144
|
position.tickLowerIndex,
|
|
137
145
|
position.tickUpperIndex,
|
|
@@ -151,19 +159,21 @@ export class RaydiumService {
|
|
|
151
159
|
};
|
|
152
160
|
}
|
|
153
161
|
|
|
162
|
+
const raydiumPoolInfo = await this.getRaydiumPoolInfo(strategy.pool);
|
|
163
|
+
console.log('raydiumPoolInfo', raydiumPoolInfo);
|
|
154
164
|
const params: {
|
|
155
|
-
poolInfo:
|
|
165
|
+
poolInfo: ApiV3PoolInfoConcentratedItem;
|
|
156
166
|
aprType: 'day' | 'week' | 'month';
|
|
157
167
|
positionTickLowerIndex: number;
|
|
158
168
|
positionTickUpperIndex: number;
|
|
159
169
|
} = {
|
|
160
|
-
poolInfo,
|
|
170
|
+
poolInfo: raydiumPoolInfo,
|
|
161
171
|
aprType: 'day',
|
|
162
172
|
positionTickLowerIndex: position.tickLowerIndex,
|
|
163
173
|
positionTickUpperIndex: position.tickUpperIndex,
|
|
164
174
|
};
|
|
165
175
|
|
|
166
|
-
const { apr, feeApr, rewardsApr } =
|
|
176
|
+
const { apr, feeApr, rewardsApr } = PoolUtils.estimateAprsForPriceRangeMultiplier(params);
|
|
167
177
|
const totalApr = new Decimal(apr).div(100);
|
|
168
178
|
const fee = new Decimal(feeApr).div(100);
|
|
169
179
|
const rewards = rewardsApr.map((reward) => new Decimal(reward).div(100));
|
|
@@ -203,16 +213,6 @@ export class RaydiumService {
|
|
|
203
213
|
throw Error(`Could not get find Raydium amm pool ${poolPubkey.toString()} from Raydium API`);
|
|
204
214
|
}
|
|
205
215
|
|
|
206
|
-
const poolInfo = (
|
|
207
|
-
await AmmV3.fetchMultiplePoolInfos({
|
|
208
|
-
connection: this._connection,
|
|
209
|
-
// @ts-ignore
|
|
210
|
-
poolKeys: [raydiumPool],
|
|
211
|
-
batchRequest: true,
|
|
212
|
-
chainTime: new Date().getTime() / 1000,
|
|
213
|
-
})
|
|
214
|
-
)[poolPubkey.toString()].state;
|
|
215
|
-
|
|
216
216
|
const tickLowerIndex = TickMath.getTickWithPriceAndTickspacing(
|
|
217
217
|
priceLower,
|
|
218
218
|
poolState.tickSpacing,
|
|
@@ -246,8 +246,9 @@ export class RaydiumService {
|
|
|
246
246
|
};
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
+
const poolInfo = await this.getRaydiumPoolInfo(poolPubkey);
|
|
249
250
|
const params: {
|
|
250
|
-
poolInfo:
|
|
251
|
+
poolInfo: ApiV3PoolInfoConcentratedItem;
|
|
251
252
|
aprType: 'day' | 'week' | 'month';
|
|
252
253
|
positionTickLowerIndex: number;
|
|
253
254
|
positionTickUpperIndex: number;
|
|
@@ -258,7 +259,7 @@ export class RaydiumService {
|
|
|
258
259
|
positionTickUpperIndex: tickUpperIndex,
|
|
259
260
|
};
|
|
260
261
|
|
|
261
|
-
const { apr, feeApr, rewardsApr } =
|
|
262
|
+
const { apr, feeApr, rewardsApr } = PoolUtils.estimateAprsForPriceRangeMultiplier(params);
|
|
262
263
|
const totalApr = new Decimal(apr).div(100);
|
|
263
264
|
const fee = new Decimal(feeApr).div(100);
|
|
264
265
|
const rewards = rewardsApr.map((reward) => new Decimal(reward).div(100));
|
package/src/utils/utils.ts
CHANGED
|
@@ -19,19 +19,21 @@ import {
|
|
|
19
19
|
UpdateStrategyConfigArgs,
|
|
20
20
|
updateStrategyConfig,
|
|
21
21
|
} from '../kamino-client/instructions';
|
|
22
|
-
import { SqrtPriceMath } from '@raydium-io/raydium-sdk';
|
|
23
22
|
import { RebalanceFieldInfo, RebalanceFieldsDict } from './types';
|
|
24
23
|
import BN from 'bn.js';
|
|
25
24
|
import { PoolPriceReferenceType, TwapPriceReferenceType } from './priceReferenceTypes';
|
|
26
25
|
import { sqrtPriceX64ToPrice } from '@orca-so/whirlpool-sdk';
|
|
27
26
|
import { METEORA_PROGRAM_ID } from '../meteora_client/programId';
|
|
28
27
|
import { U64_MAX } from '../constants/numericalValues';
|
|
28
|
+
import { SqrtPriceMath } from '@raydium-io/raydium-sdk-v2/lib/raydium/clmm/utils/math';
|
|
29
29
|
|
|
30
30
|
export const DolarBasedMintingMethod = new Decimal(0);
|
|
31
31
|
export const ProportionalMintingMethod = new Decimal(1);
|
|
32
32
|
|
|
33
33
|
export const RebalanceParamOffset = new Decimal(256);
|
|
34
34
|
|
|
35
|
+
export const ZERO_BN = new BN(0);
|
|
36
|
+
|
|
35
37
|
export function sleep(ms: number) {
|
|
36
38
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
37
39
|
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
adjustForSlippage, getTokenAFromLiquidity,
|
|
10
10
|
getTokenBFromLiquidity, Percentage, PositionStatus, PositionUtil, RemoveLiquidityQuote,
|
|
11
11
|
} from '@orca-so/whirlpool-sdk';
|
|
12
|
-
import {
|
|
12
|
+
import { ZERO_BN } from "../../utils";
|
|
13
13
|
|
|
14
14
|
export type InternalRemoveLiquidityQuoteParam = {
|
|
15
15
|
positionAddress: PublicKey;
|
|
@@ -58,9 +58,9 @@ function getRemoveLiquidityQuoteWhenPositionIsBelowRange(
|
|
|
58
58
|
return {
|
|
59
59
|
positionAddress,
|
|
60
60
|
minTokenA,
|
|
61
|
-
minTokenB:
|
|
61
|
+
minTokenB: ZERO_BN,
|
|
62
62
|
estTokenA,
|
|
63
|
-
estTokenB:
|
|
63
|
+
estTokenB: ZERO_BN,
|
|
64
64
|
liquidity,
|
|
65
65
|
};
|
|
66
66
|
}
|
|
@@ -119,9 +119,9 @@ function getRemoveLiquidityQuoteWhenPositionIsAboveRange(
|
|
|
119
119
|
|
|
120
120
|
return {
|
|
121
121
|
positionAddress,
|
|
122
|
-
minTokenA:
|
|
122
|
+
minTokenA: ZERO_BN,
|
|
123
123
|
minTokenB,
|
|
124
|
-
estTokenA:
|
|
124
|
+
estTokenA: ZERO_BN,
|
|
125
125
|
estTokenB,
|
|
126
126
|
liquidity,
|
|
127
127
|
};
|