@kamino-finance/kliquidity-sdk 7.0.10 → 7.0.12

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.
Files changed (32) hide show
  1. package/dist/Kamino.d.ts.map +1 -1
  2. package/dist/Kamino.js +35 -31
  3. package/dist/Kamino.js.map +1 -1
  4. package/dist/rebalance_methods/autodriftRebalance.d.ts.map +1 -1
  5. package/dist/rebalance_methods/autodriftRebalance.js +5 -5
  6. package/dist/rebalance_methods/autodriftRebalance.js.map +1 -1
  7. package/dist/rebalance_methods/driftRebalance.d.ts.map +1 -1
  8. package/dist/rebalance_methods/driftRebalance.js +5 -5
  9. package/dist/rebalance_methods/driftRebalance.js.map +1 -1
  10. package/dist/rebalance_methods/takeProfitRebalance.js +3 -3
  11. package/dist/rebalance_methods/takeProfitRebalance.js.map +1 -1
  12. package/dist/services/RaydiumPoolsResponse.d.ts +2 -2
  13. package/dist/services/RaydiumPoolsResponse.d.ts.map +1 -1
  14. package/dist/services/RaydiumService.d.ts +2 -0
  15. package/dist/services/RaydiumService.d.ts.map +1 -1
  16. package/dist/services/RaydiumService.js +20 -23
  17. package/dist/services/RaydiumService.js.map +1 -1
  18. package/dist/utils/utils.d.ts +1 -0
  19. package/dist/utils/utils.d.ts.map +1 -1
  20. package/dist/utils/utils.js +6 -5
  21. package/dist/utils/utils.js.map +1 -1
  22. package/dist/whirlpools-client/shim/remove-liquidity.js +5 -5
  23. package/dist/whirlpools-client/shim/remove-liquidity.js.map +1 -1
  24. package/package.json +3 -3
  25. package/src/Kamino.ts +16 -10
  26. package/src/rebalance_methods/autodriftRebalance.ts +1 -1
  27. package/src/rebalance_methods/driftRebalance.ts +1 -1
  28. package/src/rebalance_methods/takeProfitRebalance.ts +1 -1
  29. package/src/services/RaydiumPoolsResponse.ts +2 -2
  30. package/src/services/RaydiumService.ts +27 -26
  31. package/src/utils/utils.ts +3 -1
  32. 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.10",
3
+ "version": "7.0.12",
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.24",
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.3.1-beta.5",
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 {
@@ -2205,6 +2207,10 @@ export class Kamino {
2205
2207
  console.log(`Could not find collateral info for token ${token.toString()}`);
2206
2208
  continue;
2207
2209
  }
2210
+ // if there already is a spot price for this token, skip it
2211
+ if (spotPrices[token.toString()]) {
2212
+ continue;
2213
+ }
2208
2214
  spotPrices[token.toString()] = {
2209
2215
  price: new Decimal(price),
2210
2216
  name: getTokenNameFromCollateralInfo(collInfo),
@@ -7391,7 +7397,7 @@ export class Kamino {
7391
7397
  throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);
7392
7398
  }
7393
7399
 
7394
- return { amountSlippageA: new BN(0), amountSlippageB: new BN(0) };
7400
+ return { amountSlippageA: ZERO_BN, amountSlippageB: ZERO_BN };
7395
7401
  }
7396
7402
 
7397
7403
  private async getDepositRatioFromBMeteora(
@@ -7408,7 +7414,7 @@ export class Kamino {
7408
7414
  throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);
7409
7415
  }
7410
7416
 
7411
- return { amountSlippageA: new BN(0), amountSlippageB: new BN(0) };
7417
+ return { amountSlippageA: ZERO_BN, amountSlippageB: ZERO_BN };
7412
7418
  }
7413
7419
 
7414
7420
  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 { AmmV3ConfigInfo } from '@raydium-io/raydium-sdk';
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: AmmV3ConfigInfo;
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: AmmV3PoolInfo;
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 } = AmmV3.estimateAprsForPriceRangeMultiplier(params);
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: AmmV3PoolInfo;
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 } = AmmV3.estimateAprsForPriceRangeMultiplier(params);
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));
@@ -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 { ZERO } from '@raydium-io/raydium-sdk';
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: ZERO,
61
+ minTokenB: ZERO_BN,
62
62
  estTokenA,
63
- estTokenB: ZERO,
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: ZERO,
122
+ minTokenA: ZERO_BN,
123
123
  minTokenB,
124
- estTokenA: ZERO,
124
+ estTokenA: ZERO_BN,
125
125
  estTokenB,
126
126
  liquidity,
127
127
  };