@sonarwatch/portfolio-plugins 0.14.192 → 0.14.194

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 (113) hide show
  1. package/CHANGELOG.md +2425 -2402
  2. package/README.md +3 -3
  3. package/package.json +1 -1
  4. package/src/index.js +2 -0
  5. package/src/index.js.map +1 -1
  6. package/src/plugins/aurory/constants.js +1 -1
  7. package/src/plugins/balancer/helpers/pools.js +21 -21
  8. package/src/plugins/debridge/dlmmVaultsJob.js +2 -2
  9. package/src/plugins/debridge/dlmmVaultsJob.js.map +1 -1
  10. package/src/plugins/fragmetric/constants.js +6 -0
  11. package/src/plugins/fragmetric/constants.js.map +1 -1
  12. package/src/plugins/hawksight/positionsFetcher.js +1 -1
  13. package/src/plugins/hawksight/positionsFetcher.js.map +1 -1
  14. package/src/plugins/jupiter/helpers.js +3 -3
  15. package/src/plugins/jupiter/helpers.js.map +1 -1
  16. package/src/plugins/kamino/helpers/vaults.d.ts +1 -1
  17. package/src/plugins/kamino/helpers/vaults.js +4 -4
  18. package/src/plugins/kamino/helpers/vaults.js.map +1 -1
  19. package/src/plugins/kamino/poolsJob.js +2 -2
  20. package/src/plugins/kamino/poolsJob.js.map +1 -1
  21. package/src/plugins/lavarage/constants.d.ts +6 -0
  22. package/src/plugins/lavarage/constants.js +8 -0
  23. package/src/plugins/lavarage/constants.js.map +1 -0
  24. package/src/plugins/lavarage/index.d.ts +4 -0
  25. package/src/plugins/lavarage/index.js +11 -0
  26. package/src/plugins/lavarage/index.js.map +1 -0
  27. package/src/plugins/lavarage/poolsJob.js +43 -0
  28. package/src/plugins/lavarage/poolsJob.js.map +1 -0
  29. package/src/plugins/lavarage/positionsFetcher.js +119 -0
  30. package/src/plugins/lavarage/positionsFetcher.js.map +1 -0
  31. package/src/plugins/lavarage/structs.d.ts +31 -0
  32. package/src/plugins/lavarage/structs.js +33 -0
  33. package/src/plugins/lavarage/structs.js.map +1 -0
  34. package/src/plugins/lavarage/types.d.ts +15 -0
  35. package/src/plugins/lavarage/types.js +3 -0
  36. package/src/plugins/lavarage/types.js.map +1 -0
  37. package/src/plugins/meteora/constants.d.ts +1 -0
  38. package/src/plugins/meteora/constants.js +2 -1
  39. package/src/plugins/meteora/constants.js.map +1 -1
  40. package/src/plugins/meteora/cpamm/cpammPositionsFetcher.d.ts +3 -0
  41. package/src/plugins/meteora/cpamm/cpammPositionsFetcher.js +86 -0
  42. package/src/plugins/meteora/cpamm/cpammPositionsFetcher.js.map +1 -0
  43. package/src/plugins/meteora/cpamm/cpammV2Job.d.ts +3 -0
  44. package/src/plugins/meteora/cpamm/cpammV2Job.js +83 -0
  45. package/src/plugins/meteora/cpamm/cpammV2Job.js.map +1 -0
  46. package/src/plugins/meteora/cpamm/helpers.d.ts +17 -0
  47. package/src/plugins/meteora/cpamm/helpers.js +83 -0
  48. package/src/plugins/meteora/cpamm/helpers.js.map +1 -0
  49. package/src/plugins/meteora/cpamm/structs.d.ts +131 -0
  50. package/src/plugins/meteora/cpamm/structs.js +128 -0
  51. package/src/plugins/meteora/cpamm/structs.js.map +1 -0
  52. package/src/plugins/meteora/{dlmmHelper.d.ts → dlmm/dlmmHelper.d.ts} +2 -2
  53. package/src/plugins/meteora/{dlmmHelper.js → dlmm/dlmmHelper.js} +3 -3
  54. package/src/plugins/meteora/dlmm/dlmmHelper.js.map +1 -0
  55. package/src/plugins/meteora/dlmm/dlmmPositionsFetcher.d.ts +3 -0
  56. package/src/plugins/meteora/{dlmmPositionsFetcher.js → dlmm/dlmmPositionsFetcher.js} +12 -12
  57. package/src/plugins/meteora/dlmm/dlmmPositionsFetcher.js.map +1 -0
  58. package/src/plugins/meteora/{dlmmVaultsFetcher.d.ts → dlmm/dlmmVaultsFetcher.d.ts} +1 -1
  59. package/src/plugins/meteora/{dlmmVaultsFetcher.js → dlmm/dlmmVaultsFetcher.js} +5 -5
  60. package/src/plugins/meteora/dlmm/dlmmVaultsFetcher.js.map +1 -0
  61. package/src/plugins/meteora/{dlmmVaultsJob.d.ts → dlmm/dlmmVaultsJob.d.ts} +1 -1
  62. package/src/plugins/meteora/{dlmmVaultsJob.js → dlmm/dlmmVaultsJob.js} +6 -6
  63. package/src/plugins/meteora/dlmm/dlmmVaultsJob.js.map +1 -0
  64. package/src/plugins/meteora/dlmm/structs.d.ts +159 -0
  65. package/src/plugins/meteora/dlmm/structs.js +163 -0
  66. package/src/plugins/meteora/dlmm/structs.js.map +1 -0
  67. package/src/plugins/meteora/index.js +13 -9
  68. package/src/plugins/meteora/index.js.map +1 -1
  69. package/src/plugins/meteora/{multiTokenPoolsJob.d.ts → multiTokenPools/multiTokenPoolsJob.d.ts} +1 -1
  70. package/src/plugins/meteora/{multiTokenPoolsJob.js → multiTokenPools/multiTokenPoolsJob.js} +4 -4
  71. package/src/plugins/meteora/multiTokenPools/multiTokenPoolsJob.js.map +1 -0
  72. package/src/plugins/meteora/{farmsFetcher.d.ts → pools/farmsFetcher.d.ts} +1 -1
  73. package/src/plugins/meteora/{farmsFetcher.js → pools/farmsFetcher.js} +6 -6
  74. package/src/plugins/meteora/pools/farmsFetcher.js.map +1 -0
  75. package/src/plugins/meteora/{farmsJob.d.ts → pools/farmsJob.d.ts} +1 -1
  76. package/src/plugins/meteora/{farmsJob.js → pools/farmsJob.js} +6 -6
  77. package/src/plugins/meteora/pools/farmsJob.js.map +1 -0
  78. package/src/plugins/meteora/pools/poolsJob.d.ts +3 -0
  79. package/src/plugins/meteora/{poolsJob.js → pools/poolsJob.js} +6 -6
  80. package/src/plugins/meteora/pools/poolsJob.js.map +1 -0
  81. package/src/plugins/meteora/{stakeForFeeFetcher.d.ts → stake2earn/stakeForFeeFetcher.d.ts} +1 -1
  82. package/src/plugins/meteora/{stakeForFeeFetcher.js → stake2earn/stakeForFeeFetcher.js} +9 -9
  83. package/src/plugins/meteora/stake2earn/stakeForFeeFetcher.js.map +1 -0
  84. package/src/plugins/meteora/{stakeForFeeVaultsJob.d.ts → stake2earn/stakeForFeeVaultsJob.d.ts} +1 -1
  85. package/src/plugins/meteora/{stakeForFeeVaultsJob.js → stake2earn/stakeForFeeVaultsJob.js} +6 -6
  86. package/src/plugins/meteora/stake2earn/stakeForFeeVaultsJob.js.map +1 -0
  87. package/src/plugins/meteora/stake2earn/structs.d.ts +44 -0
  88. package/src/plugins/meteora/stake2earn/structs.js +42 -0
  89. package/src/plugins/meteora/stake2earn/structs.js.map +1 -0
  90. package/src/plugins/meteora/struct.d.ts +0 -191
  91. package/src/plugins/meteora/struct.js +1 -192
  92. package/src/plugins/meteora/struct.js.map +1 -1
  93. package/src/plugins/meteora/types.d.ts +1 -1
  94. package/src/plugins/sushiswap/helpers.js +24 -24
  95. package/src/plugins/uniswap-v2/helpers.js +22 -22
  96. package/src/plugins/zeta/airdropFetcher.js +14 -14
  97. package/src/utils/elementbuilder/ElementLeverageBuilder.js +4 -0
  98. package/src/utils/elementbuilder/ElementLeverageBuilder.js.map +1 -1
  99. package/src/utils/sei/constants.js +8 -8
  100. package/src/utils/sei/getQueryBalanceByOwner.js +4 -4
  101. package/src/plugins/meteora/dlmmHelper.js.map +0 -1
  102. package/src/plugins/meteora/dlmmPositionsFetcher.js.map +0 -1
  103. package/src/plugins/meteora/dlmmVaultsFetcher.js.map +0 -1
  104. package/src/plugins/meteora/dlmmVaultsJob.js.map +0 -1
  105. package/src/plugins/meteora/farmsFetcher.js.map +0 -1
  106. package/src/plugins/meteora/farmsJob.js.map +0 -1
  107. package/src/plugins/meteora/multiTokenPoolsJob.js.map +0 -1
  108. package/src/plugins/meteora/poolsJob.js.map +0 -1
  109. package/src/plugins/meteora/stakeForFeeFetcher.js.map +0 -1
  110. package/src/plugins/meteora/stakeForFeeVaultsJob.js.map +0 -1
  111. /package/src/plugins/{meteora → lavarage}/poolsJob.d.ts +0 -0
  112. /package/src/plugins/{meteora/dlmmPositionsFetcher.d.ts → lavarage/positionsFetcher.d.ts} +0 -0
  113. /package/src/plugins/meteora/{multiTokenPools.json → multiTokenPools/multiTokenPools.json} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/lavarage/structs.ts"],"names":[],"mappings":";;;AAAA,oDAImC;AACnC,kEAA6D;AAG7D,+CAA8C;AAa9C,kBAAkB;AACL,QAAA,UAAU,GAAG,IAAI,iBAAU,CACtC;IACE,CAAC,eAAe,EAAE,IAAA,4BAAqB,EAAC,SAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,cAAc,EAAE,SAAE,CAAC;IACpB,CAAC,gBAAgB,EAAE,uBAAS,CAAC;IAC7B,CAAC,WAAW,EAAE,YAAG,CAAC;IAClB,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,aAAa,EAAE,YAAG,CAAC;IACpB,CAAC,iBAAiB,EAAE,YAAG,CAAC;CACzB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAY,CACvB,CAAC;AAmBF,sBAAsB;AACT,QAAA,cAAc,GAAG,IAAI,iBAAU,CAC1C;IACE,CAAC,eAAe,EAAE,IAAA,4BAAqB,EAAC,SAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,MAAM,EAAE,uBAAS,CAAC;IACnB,CAAC,4BAA4B,EAAE,YAAG,CAAC;IACnC,CAAC,QAAQ,EAAE,YAAG,CAAC;IACf,CAAC,UAAU,EAAE,YAAG,CAAC;IACjB,CAAC,kBAAkB,EAAE,YAAG,CAAC;IACzB,CAAC,WAAW,EAAE,YAAG,CAAC;IAClB,CAAC,QAAQ,EAAE,uBAAS,CAAC;IACrB,CAAC,MAAM,EAAE,uBAAS,CAAC;IACnB,CAAC,gBAAgB,EAAE,YAAG,CAAC;IACvB,CAAC,qBAAqB,EAAE,YAAG,CAAC;IAC5B,CAAC,cAAc,EAAE,SAAE,CAAC;IACpB,CAAC,qBAAqB,EAAE,YAAG,CAAC;CAC7B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAgB,CAC3B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { ID } from '../../utils/sui/types/id';
2
+ export type Receipt = {
3
+ id: ID;
4
+ amountDeposited: string;
5
+ };
6
+ export type CachedPool = {
7
+ pubkey: string;
8
+ discriminator: number[];
9
+ interestRate: number;
10
+ collateralType: string;
11
+ maxBorrow: string;
12
+ nodeWallet: string;
13
+ maxExposure: string;
14
+ currentExposure: string;
15
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/lavarage/types.ts"],"names":[],"mappings":""}
@@ -12,3 +12,4 @@ export declare const farmProgramId: PublicKey;
12
12
  export declare const dlmmProgramId: PublicKey;
13
13
  export declare const dlmmVaultProgramId: PublicKey;
14
14
  export declare const stakeForFeeProgramId: PublicKey;
15
+ export declare const cpammProgramId: PublicKey;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stakeForFeeProgramId = exports.dlmmVaultProgramId = exports.dlmmProgramId = exports.farmProgramId = exports.poolsProgramId = exports.vaultsProgramId = exports.feeVaultsKey = exports.dlmmVaultsKey = exports.farmsKey = exports.prefixVaults = exports.platformId = void 0;
3
+ exports.cpammProgramId = exports.stakeForFeeProgramId = exports.dlmmVaultProgramId = exports.dlmmProgramId = exports.farmProgramId = exports.poolsProgramId = exports.vaultsProgramId = exports.feeVaultsKey = exports.dlmmVaultsKey = exports.farmsKey = exports.prefixVaults = exports.platformId = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  exports.platformId = 'meteora';
6
6
  exports.prefixVaults = `${exports.platformId}-vaults`;
@@ -13,4 +13,5 @@ exports.farmProgramId = new web3_js_1.PublicKey('FarmuwXPWXvefWUeqFAa5w6rifLkq5X
13
13
  exports.dlmmProgramId = new web3_js_1.PublicKey('LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo');
14
14
  exports.dlmmVaultProgramId = new web3_js_1.PublicKey('vaU6kP7iNEGkbmPkLmZfGwiGxd4Mob24QQCie5R9kd2');
15
15
  exports.stakeForFeeProgramId = new web3_js_1.PublicKey('FEESngU3neckdwib9X3KWqdL7Mjmqk9XNp3uh5JbP4KP');
16
+ exports.cpammProgramId = new web3_js_1.PublicKey('cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG');
16
17
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/meteora/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE/B,QAAA,UAAU,GAAG,SAAS,CAAC;AAEvB,QAAA,YAAY,GAAG,GAAG,kBAAU,SAAS,CAAC;AACtC,QAAA,QAAQ,GAAG,OAAO,CAAC;AACnB,QAAA,aAAa,GAAG,eAAe,CAAC;AAChC,QAAA,YAAY,GAAG,YAAY,CAAC;AAE5B,QAAA,eAAe,GAAG,IAAI,mBAAS,CAC1C,8CAA8C,CAC/C,CAAC;AAEW,QAAA,cAAc,GAAG,IAAI,mBAAS,CACzC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,aAAa,GAAG,IAAI,mBAAS,CACxC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,aAAa,GAAG,IAAI,mBAAS,CACxC,6CAA6C,CAC9C,CAAC;AAEW,QAAA,kBAAkB,GAAG,IAAI,mBAAS,CAC7C,6CAA6C,CAC9C,CAAC;AAEW,QAAA,oBAAoB,GAAG,IAAI,mBAAS,CAC/C,8CAA8C,CAC/C,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/meteora/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE/B,QAAA,UAAU,GAAG,SAAS,CAAC;AAEvB,QAAA,YAAY,GAAG,GAAG,kBAAU,SAAS,CAAC;AACtC,QAAA,QAAQ,GAAG,OAAO,CAAC;AACnB,QAAA,aAAa,GAAG,eAAe,CAAC;AAChC,QAAA,YAAY,GAAG,YAAY,CAAC;AAE5B,QAAA,eAAe,GAAG,IAAI,mBAAS,CAC1C,8CAA8C,CAC/C,CAAC;AAEW,QAAA,cAAc,GAAG,IAAI,mBAAS,CACzC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,aAAa,GAAG,IAAI,mBAAS,CACxC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,aAAa,GAAG,IAAI,mBAAS,CACxC,6CAA6C,CAC9C,CAAC;AAEW,QAAA,kBAAkB,GAAG,IAAI,mBAAS,CAC7C,6CAA6C,CAC9C,CAAC;AAEW,QAAA,oBAAoB,GAAG,IAAI,mBAAS,CAC/C,8CAA8C,CAC/C,CAAC;AAEW,QAAA,cAAc,GAAG,IAAI,mBAAS,CACzC,6CAA6C,CAC9C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher } from '../../../Fetcher';
2
+ declare const fetcher: Fetcher;
3
+ export default fetcher;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
13
+ const web3_js_1 = require("@solana/web3.js");
14
+ const constants_1 = require("../constants");
15
+ const clients_1 = require("../../../utils/clients");
16
+ const solana_1 = require("../../../utils/solana");
17
+ const helpers_1 = require("./helpers");
18
+ const structs_1 = require("./structs");
19
+ const dlmmHelper_1 = require("../dlmm/dlmmHelper");
20
+ const ElementRegistry_1 = require("../../../utils/elementbuilder/ElementRegistry");
21
+ const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
22
+ const client = (0, clients_1.getClientSolana)();
23
+ const tokenAccounts = yield client.getTokenAccountsByOwner(new web3_js_1.PublicKey(owner), {
24
+ programId: solana_1.solanaToken2022PidPk,
25
+ });
26
+ const nftAccounts = tokenAccounts.value.map((account) => {
27
+ const parsedAccount = solana_1.tokenAccountStruct.deserialize(account.account.data)[0];
28
+ if (parsedAccount.amount.toNumber() === 1)
29
+ return Object.assign(Object.assign({}, parsedAccount), { pubkey: account.pubkey });
30
+ return undefined;
31
+ });
32
+ const pdas = nftAccounts
33
+ .map((account) => (account ? (0, helpers_1.derivePositionAddress)(account.mint) : []))
34
+ .flat();
35
+ const positions = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, structs_1.positionStruct, pdas);
36
+ const pools = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, structs_1.poolStruct, positions.map((position) => (position ? position.pool : [])).flat());
37
+ const registry = new ElementRegistry_1.ElementRegistry(portfolio_core_1.NetworkId.solana, constants_1.platformId);
38
+ const liqElement = registry.addElementLiquidity({ label: 'LiquidityPool' });
39
+ for (const position of positions) {
40
+ if (!position)
41
+ continue;
42
+ const pool = pools.find((p) => p === null || p === void 0 ? void 0 : p.pubkey.equals(position.pool));
43
+ if (!pool)
44
+ continue;
45
+ const liq = liqElement.addLiquidity({
46
+ ref: position.pubkey.toString(),
47
+ sourceRefs: [{ address: pool.pubkey.toString(), name: 'Pool' }],
48
+ link: `https://www.meteora.ag/dammv2/${pool.pubkey.toString()}`,
49
+ });
50
+ const tokenAmountA = (0, helpers_1.getAmountAFromLiquidityDelta)(position.unlockedLiquidity
51
+ .plus(position.vestedLiquidity)
52
+ .plus(position.permanentLockedLiquidity), pool.sqrtPrice, pool.sqrtMaxPrice, dlmmHelper_1.Rounding.Down);
53
+ liq.addAsset({
54
+ address: pool.tokenAMint,
55
+ amount: tokenAmountA,
56
+ });
57
+ const tokenAmountB = (0, helpers_1.getAmountBFromLiquidityDelta)(position.unlockedLiquidity, pool.sqrtPrice, pool.sqrtMinPrice, dlmmHelper_1.Rounding.Down);
58
+ liq.addAsset({
59
+ address: pool.tokenBMint,
60
+ amount: tokenAmountB,
61
+ });
62
+ const { rewards, feeTokenA, feeTokenB } = (0, helpers_1.getUnClaimReward)(pool, position);
63
+ for (let i = 0; i < rewards.length; i++) {
64
+ liq.addRewardAsset({
65
+ address: pool.rewardInfos[i].mint,
66
+ amount: rewards[i],
67
+ });
68
+ }
69
+ liq.addRewardAsset({
70
+ address: pool.tokenAMint.toString(),
71
+ amount: feeTokenA,
72
+ });
73
+ liq.addRewardAsset({
74
+ address: pool.tokenBMint.toString(),
75
+ amount: feeTokenB,
76
+ });
77
+ }
78
+ return registry.getElements(cache);
79
+ });
80
+ const fetcher = {
81
+ id: `${constants_1.platformId}-cpamm-positions`,
82
+ networkId: portfolio_core_1.NetworkId.solana,
83
+ executor,
84
+ };
85
+ exports.default = fetcher;
86
+ //# sourceMappingURL=cpammPositionsFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpammPositionsFetcher.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/meteora/cpamm/cpammPositionsFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '../../../Job';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
13
+ const clients_1 = require("../../../utils/clients");
14
+ const ParsedGpa_1 = require("../../../utils/solana/beets/ParsedGpa");
15
+ const constants_1 = require("../constants");
16
+ const dlmmHelper_1 = require("../dlmm/dlmmHelper");
17
+ const helpers_1 = require("./helpers");
18
+ const structs_1 = require("./structs");
19
+ const getLpUnderlyingTokenSource_1 = require("../../../utils/misc/getLpUnderlyingTokenSource");
20
+ const getDecimalsForToken_1 = require("../../../utils/misc/getDecimalsForToken");
21
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
22
+ const client = (0, clients_1.getClientSolana)();
23
+ const poolsAccounts = yield ParsedGpa_1.ParsedGpa.build(client, structs_1.poolStruct, constants_1.cpammProgramId)
24
+ .addFilter('discriminator', [241, 154, 109, 4, 17, 177, 109, 188])
25
+ .addDataSizeFilter(1112)
26
+ .run();
27
+ const vaultAccounts = [];
28
+ const mints = new Set();
29
+ const tokensA = [];
30
+ const tokensB = [];
31
+ poolsAccounts.forEach((poolAccount) => {
32
+ vaultAccounts.push(poolAccount.tokenAVault, poolAccount.tokenBVault);
33
+ mints.add(poolAccount.tokenAMint.toString());
34
+ mints.add(poolAccount.tokenBMint.toString());
35
+ tokensA.push(poolAccount.tokenAMint.toString());
36
+ tokensB.push(poolAccount.tokenBMint.toString());
37
+ });
38
+ const decimalsA = yield Promise.all([
39
+ ...tokensA.map((m) => (0, getDecimalsForToken_1.getDecimalsForToken)(m, portfolio_core_1.NetworkId.solana)),
40
+ ]);
41
+ const decimalsB = yield Promise.all([
42
+ ...tokensB.map((m) => (0, getDecimalsForToken_1.getDecimalsForToken)(m, portfolio_core_1.NetworkId.solana)),
43
+ ]);
44
+ const tokenPrices = yield cache.getTokenPricesAsMap(mints, portfolio_core_1.NetworkId.solana);
45
+ const sources = [];
46
+ poolsAccounts.forEach((poolAccount, index) => {
47
+ const tokenPriceA = tokenPrices.get(poolAccount.tokenAMint.toString());
48
+ const tokenPriceB = tokenPrices.get(poolAccount.tokenBMint.toString());
49
+ const decimalA = decimalsA[index];
50
+ const decimalB = decimalsB[index];
51
+ const amountA = (0, helpers_1.getAmountAFromLiquidityDelta)(poolAccount.liquidity, poolAccount.sqrtPrice, poolAccount.sqrtMaxPrice, dlmmHelper_1.Rounding.Down);
52
+ const amountB = (0, helpers_1.getAmountBFromLiquidityDelta)(poolAccount.liquidity, poolAccount.sqrtPrice, poolAccount.sqrtMinPrice, dlmmHelper_1.Rounding.Down);
53
+ const underlyingSources = (0, getLpUnderlyingTokenSource_1.getLpUnderlyingTokenSource)({
54
+ networkId: portfolio_core_1.NetworkId.solana,
55
+ sourceId: poolAccount.pubkey.toString(),
56
+ poolUnderlyings: [
57
+ {
58
+ address: poolAccount.tokenAMint.toString(),
59
+ decimals: Number(decimalA),
60
+ reserveAmount: amountA.dividedBy(Math.pow(10, Number(decimalA))).toNumber(),
61
+ weight: 0.5,
62
+ tokenPrice: tokenPriceA,
63
+ },
64
+ {
65
+ address: poolAccount.tokenBMint.toString(),
66
+ decimals: Number(decimalB),
67
+ reserveAmount: amountB.dividedBy(Math.pow(10, Number(decimalB))).toNumber(),
68
+ weight: 0.5,
69
+ tokenPrice: tokenPriceB,
70
+ },
71
+ ],
72
+ });
73
+ sources.push(...underlyingSources);
74
+ });
75
+ yield cache.setTokenPriceSources(sources);
76
+ });
77
+ const job = {
78
+ id: `${constants_1.platformId}-cpamm-pools`,
79
+ executor,
80
+ labels: ['normal'],
81
+ };
82
+ exports.default = job;
83
+ //# sourceMappingURL=cpammV2Job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpammV2Job.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/meteora/cpamm/cpammV2Job.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="@drift-labs/sdk/node_modules/@solana/web3.js" />
2
+ /// <reference types="jito-ts/node_modules/@solana/web3.js" />
3
+ import BigNumber from 'bignumber.js';
4
+ import { PublicKey } from '@solana/web3.js';
5
+ import { Pool, Position } from './structs';
6
+ import { Rounding } from '../dlmm/dlmmHelper';
7
+ export declare const getUnClaimReward: (poolState: Pool, positionState: Position) => {
8
+ feeTokenA: BigNumber;
9
+ feeTokenB: BigNumber;
10
+ rewards: BigNumber[];
11
+ };
12
+ export declare function getAmountAFromLiquidityDelta(liquidity: BigNumber, currentSqrtPrice: BigNumber, // current sqrt price
13
+ maxSqrtPrice: BigNumber, rounding: Rounding): BigNumber;
14
+ export declare function getAmountBFromLiquidityDelta(liquidity: BigNumber, currentSqrtPrice: BigNumber, // current sqrt price,
15
+ minSqrtPrice: BigNumber, rounding: Rounding): BigNumber;
16
+ export declare function derivePositionAddress(positionNft: PublicKey): PublicKey;
17
+ export declare const getPriceFromSqrtPrice: (sqrtPrice: BigNumber, tokenADecimal: number, tokenBDecimal: number) => string;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPriceFromSqrtPrice = exports.derivePositionAddress = exports.getAmountBFromLiquidityDelta = exports.getAmountAFromLiquidityDelta = exports.getUnClaimReward = void 0;
7
+ const bn_js_1 = __importDefault(require("bn.js"));
8
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ const decimal_js_1 = __importDefault(require("decimal.js"));
11
+ const dlmmHelper_1 = require("../dlmm/dlmmHelper");
12
+ const constants_1 = require("../constants");
13
+ const getUnClaimReward = (poolState, positionState) => {
14
+ const totalPositionLiquidity = (0, bignumber_js_1.default)(positionState.unlockedLiquidity.toString())
15
+ .plus((0, bignumber_js_1.default)(positionState.vestedLiquidity.toString()))
16
+ .plus((0, bignumber_js_1.default)(positionState.permanentLockedLiquidity.toString()));
17
+ const feeAPerTokenStored = new bn_js_1.default(Buffer.from(poolState.feeAPerLiquidity).reverse()).sub(new bn_js_1.default(Buffer.from(positionState.feeAPerTokenCheckpoint).reverse()));
18
+ const feeBPerTokenStored = new bn_js_1.default(Buffer.from(poolState.feeBPerLiquidity).reverse()).sub(new bn_js_1.default(Buffer.from(positionState.feeBPerTokenCheckpoint).reverse()));
19
+ const denominator = new bignumber_js_1.default(2).pow(128);
20
+ const feeA = totalPositionLiquidity
21
+ .times(feeAPerTokenStored.toString())
22
+ .dividedBy(denominator);
23
+ const feeB = totalPositionLiquidity
24
+ .times(feeBPerTokenStored.toString())
25
+ .dividedBy(denominator);
26
+ return {
27
+ feeTokenA: (0, bignumber_js_1.default)(positionState.feeAPending.toString()).plus(feeA),
28
+ feeTokenB: (0, bignumber_js_1.default)(positionState.feeBPending.toString()).plus(feeB),
29
+ rewards: positionState.rewardInfos.length > 0
30
+ ? positionState.rewardInfos.map((item) => item.rewardPendings)
31
+ : [],
32
+ };
33
+ };
34
+ exports.getUnClaimReward = getUnClaimReward;
35
+ // L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)
36
+ // Δa = L * (√P_upper - √P_lower) / √P_upper * √P_lower
37
+ function getAmountAFromLiquidityDelta(liquidity, currentSqrtPrice, // current sqrt price
38
+ maxSqrtPrice, rounding) {
39
+ // Q128.128
40
+ const product = liquidity.times(maxSqrtPrice.minus(currentSqrtPrice));
41
+ // Q128.128
42
+ const denominator = currentSqrtPrice.times(maxSqrtPrice);
43
+ // Q64.64
44
+ if (rounding === dlmmHelper_1.Rounding.Up) {
45
+ return new bignumber_js_1.default(product
46
+ .plus(denominator.minus(new bignumber_js_1.default(1)))
47
+ .div(denominator)
48
+ .toString());
49
+ }
50
+ return new bignumber_js_1.default(product.dividedBy(denominator).toString());
51
+ }
52
+ exports.getAmountAFromLiquidityDelta = getAmountAFromLiquidityDelta;
53
+ // L = Δb / (√P_upper - √P_lower)
54
+ // Δb = L * (√P_upper - √P_lower)
55
+ function getAmountBFromLiquidityDelta(liquidity, currentSqrtPrice, // current sqrt price,
56
+ minSqrtPrice, rounding) {
57
+ // const one = new BigNumber(1).shiftedBy(-128);
58
+ const one = new bignumber_js_1.default(2).pow(128);
59
+ const deltaPrice = currentSqrtPrice.minus(minSqrtPrice);
60
+ const result = liquidity.times(deltaPrice); // Q128
61
+ if (rounding === dlmmHelper_1.Rounding.Up) {
62
+ return new bignumber_js_1.default(result.plus(one.minus(1)).div(one));
63
+ }
64
+ // return result.shiftedBy(128);
65
+ return result.dividedBy(one);
66
+ }
67
+ exports.getAmountBFromLiquidityDelta = getAmountBFromLiquidityDelta;
68
+ function derivePositionAddress(positionNft) {
69
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('position'), positionNft.toBuffer()], constants_1.cpammProgramId)[0];
70
+ }
71
+ exports.derivePositionAddress = derivePositionAddress;
72
+ // (sqrtPrice)^2 * 10 ** (base_decimal - quote_decimal) / 2^128
73
+ const getPriceFromSqrtPrice = (sqrtPrice, tokenADecimal, tokenBDecimal) => {
74
+ const decimalSqrtPrice = new decimal_js_1.default(sqrtPrice.toString());
75
+ const price = decimalSqrtPrice
76
+ .mul(decimalSqrtPrice)
77
+ .mul(new decimal_js_1.default(Math.pow(10, (tokenADecimal - tokenBDecimal))))
78
+ .div(decimal_js_1.default.pow(2, 128))
79
+ .toString();
80
+ return price;
81
+ };
82
+ exports.getPriceFromSqrtPrice = getPriceFromSqrtPrice;
83
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/meteora/cpamm/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /// <reference types="@drift-labs/sdk/node_modules/@solana/web3.js" />
2
+ /// <reference types="jito-ts/node_modules/@solana/web3.js" />
3
+ import { BeetStruct, FixableBeetStruct } from '@metaplex-foundation/beet';
4
+ import { PublicKey } from '@solana/web3.js';
5
+ import BigNumber from 'bignumber.js';
6
+ export type BaseFee = {
7
+ cliffFeeNumerator: BigNumber;
8
+ feeSchedulerMode: number;
9
+ padding0: number[];
10
+ numberOfPeriod: number;
11
+ periodFrequency: BigNumber;
12
+ reductionFactor: BigNumber;
13
+ padding1: BigNumber;
14
+ };
15
+ export declare const baseFeeStruct: BeetStruct<BaseFee, Partial<BaseFee>>;
16
+ export type DynamicFee = {
17
+ initialized: number;
18
+ padding: number[];
19
+ maxVolatilityAccumulator: number;
20
+ variableFeeControl: number;
21
+ binStep: number;
22
+ filterPeriod: number;
23
+ decayPeriod: number;
24
+ reductionFactor: number;
25
+ lastUpdateTimestamp: BigNumber;
26
+ binStepU128: BigNumber;
27
+ sqrtPriceReference: BigNumber;
28
+ volatilityAccumulator: BigNumber;
29
+ volatilityReference: BigNumber;
30
+ };
31
+ export declare const dynamicFeeStruct: BeetStruct<DynamicFee, Partial<DynamicFee>>;
32
+ export type PoolFees = {
33
+ baseFee: BaseFee;
34
+ protocolFeePercent: number;
35
+ partnerFeePercent: number;
36
+ referralFeePercent: number;
37
+ padding0: number[];
38
+ dynamicFee: DynamicFee;
39
+ padding1: BigNumber;
40
+ padding2: BigNumber;
41
+ };
42
+ export declare const poolFeesStruct: BeetStruct<PoolFees, Partial<PoolFees>>;
43
+ export type PoolMetrics = {
44
+ totalLpAFee: BigNumber;
45
+ totalLpBFee: BigNumber;
46
+ totalProtocolAFee: BigNumber;
47
+ totalProtocolBFee: BigNumber;
48
+ totalPartnerAFee: BigNumber;
49
+ totalPartnerBFee: BigNumber;
50
+ totalPosition: BigNumber;
51
+ padding: BigNumber;
52
+ };
53
+ export declare const poolMetricsStruct: BeetStruct<PoolMetrics, Partial<PoolMetrics>>;
54
+ export type RewardInfo = {
55
+ initialized: number;
56
+ rewardTokenFlag: number;
57
+ padding0: number[];
58
+ padding1: number[];
59
+ mint: PublicKey;
60
+ vault: PublicKey;
61
+ funder: PublicKey;
62
+ rewardDuration: BigNumber;
63
+ rewardDurationEnd: BigNumber;
64
+ rewardRate: BigNumber;
65
+ rewardPerTokenStored: number[];
66
+ lastUpdateTime: BigNumber;
67
+ cumulativeSecondsWithEmptyLiquidityReward: BigNumber;
68
+ };
69
+ export declare const rewardInfoStruct: BeetStruct<RewardInfo, Partial<RewardInfo>>;
70
+ export type Pool = {
71
+ discriminator: number[];
72
+ poolFees: PoolFees;
73
+ tokenAMint: PublicKey;
74
+ tokenBMint: PublicKey;
75
+ tokenAVault: PublicKey;
76
+ tokenBVault: PublicKey;
77
+ whitelistedVault: PublicKey;
78
+ partner: PublicKey;
79
+ liquidity: BigNumber;
80
+ tokenAReserve: BigNumber;
81
+ tokenBReserve: BigNumber;
82
+ protocolAFee: BigNumber;
83
+ protocolBFee: BigNumber;
84
+ partnerAFee: BigNumber;
85
+ partnerBFee: BigNumber;
86
+ sqrtMinPrice: BigNumber;
87
+ sqrtMaxPrice: BigNumber;
88
+ sqrtPrice: BigNumber;
89
+ activationPoint: BigNumber;
90
+ activationType: number;
91
+ poolStatus: number;
92
+ tokenAFlag: number;
93
+ tokenBFlag: number;
94
+ collectFeeMode: number;
95
+ poolType: number;
96
+ padding0: number[];
97
+ feeAPerLiquidity: number[];
98
+ feeBPerLiquidity: number[];
99
+ permanentLockLiquidity: BigNumber;
100
+ metrics: PoolMetrics;
101
+ padding1: BigNumber[];
102
+ rewardInfos: RewardInfo[];
103
+ };
104
+ export declare const poolStruct: FixableBeetStruct<Pool, Partial<Pool>>;
105
+ export type PositionMetrics = {
106
+ totalClaimedAFee: BigNumber;
107
+ totalClaimedBFee: BigNumber;
108
+ };
109
+ export declare const positionMetricsStruct: BeetStruct<PositionMetrics, Partial<PositionMetrics>>;
110
+ export type UserRewardInfo = {
111
+ rewardPerTokenCheckpoint: number[];
112
+ rewardPendings: BigNumber;
113
+ totalClaimedRewards: BigNumber;
114
+ };
115
+ export declare const userRewardInfoStruct: BeetStruct<UserRewardInfo, Partial<UserRewardInfo>>;
116
+ export type Position = {
117
+ discriminator: number[];
118
+ pool: PublicKey;
119
+ nftMint: PublicKey;
120
+ feeAPerTokenCheckpoint: number[];
121
+ feeBPerTokenCheckpoint: number[];
122
+ feeAPending: BigNumber;
123
+ feeBPending: BigNumber;
124
+ unlockedLiquidity: BigNumber;
125
+ vestedLiquidity: BigNumber;
126
+ permanentLockedLiquidity: BigNumber;
127
+ metrics: PositionMetrics;
128
+ rewardInfos: UserRewardInfo[];
129
+ padding: BigNumber[];
130
+ };
131
+ export declare const positionStruct: FixableBeetStruct<Position, Partial<Position>>;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.positionStruct = exports.userRewardInfoStruct = exports.positionMetricsStruct = exports.poolStruct = exports.rewardInfoStruct = exports.poolMetricsStruct = exports.poolFeesStruct = exports.dynamicFeeStruct = exports.baseFeeStruct = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
+ const solana_1 = require("../../../utils/solana");
7
+ exports.baseFeeStruct = new beet_1.BeetStruct([
8
+ ['cliffFeeNumerator', solana_1.u64],
9
+ ['feeSchedulerMode', beet_1.u8],
10
+ ['padding0', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 5)],
11
+ ['numberOfPeriod', beet_1.u16],
12
+ ['periodFrequency', solana_1.u64],
13
+ ['reductionFactor', solana_1.u64],
14
+ ['padding1', solana_1.u64],
15
+ ], (args) => args);
16
+ exports.dynamicFeeStruct = new beet_1.BeetStruct([
17
+ ['initialized', beet_1.u8],
18
+ ['padding', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 7)],
19
+ ['maxVolatilityAccumulator', beet_1.u32],
20
+ ['variableFeeControl', beet_1.u32],
21
+ ['binStep', beet_1.u16],
22
+ ['filterPeriod', beet_1.u16],
23
+ ['decayPeriod', beet_1.u16],
24
+ ['reductionFactor', beet_1.u16],
25
+ ['lastUpdateTimestamp', solana_1.u64],
26
+ ['binStepU128', solana_1.u128],
27
+ ['sqrtPriceReference', solana_1.u128],
28
+ ['volatilityAccumulator', solana_1.u128],
29
+ ['volatilityReference', solana_1.u128],
30
+ ], (args) => args);
31
+ exports.poolFeesStruct = new beet_1.BeetStruct([
32
+ ['baseFee', exports.baseFeeStruct],
33
+ ['protocolFeePercent', beet_1.u8],
34
+ ['partnerFeePercent', beet_1.u8],
35
+ ['referralFeePercent', beet_1.u8],
36
+ ['padding0', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 5)],
37
+ ['dynamicFee', exports.dynamicFeeStruct],
38
+ ['padding1', solana_1.u64],
39
+ ['padding2', solana_1.u64],
40
+ ], (args) => args);
41
+ // Struct for PoolMetrics
42
+ exports.poolMetricsStruct = new beet_1.BeetStruct([
43
+ ['totalLpAFee', solana_1.u128],
44
+ ['totalLpBFee', solana_1.u128],
45
+ ['totalProtocolAFee', solana_1.u64],
46
+ ['totalProtocolBFee', solana_1.u64],
47
+ ['totalPartnerAFee', solana_1.u64],
48
+ ['totalPartnerBFee', solana_1.u64],
49
+ ['totalPosition', solana_1.u64],
50
+ ['padding', solana_1.u64],
51
+ ], (args) => args);
52
+ exports.rewardInfoStruct = new beet_1.BeetStruct([
53
+ ['initialized', beet_1.u8],
54
+ ['rewardTokenFlag', beet_1.u8],
55
+ ['padding0', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 6)],
56
+ ['padding1', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 8)],
57
+ ['mint', beet_solana_1.publicKey],
58
+ ['vault', beet_solana_1.publicKey],
59
+ ['funder', beet_solana_1.publicKey],
60
+ ['rewardDuration', solana_1.u64],
61
+ ['rewardDurationEnd', solana_1.u64],
62
+ ['rewardRate', solana_1.u128],
63
+ ['rewardPerTokenStored', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
64
+ ['lastUpdateTime', solana_1.u64],
65
+ ['cumulativeSecondsWithEmptyLiquidityReward', solana_1.u64],
66
+ ], (args) => args);
67
+ // Struct for Pool
68
+ exports.poolStruct = new beet_1.FixableBeetStruct([
69
+ ['discriminator', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 8)],
70
+ ['poolFees', exports.poolFeesStruct],
71
+ ['tokenAMint', beet_solana_1.publicKey],
72
+ ['tokenBMint', beet_solana_1.publicKey],
73
+ ['tokenAVault', beet_solana_1.publicKey],
74
+ ['tokenBVault', beet_solana_1.publicKey],
75
+ ['whitelistedVault', beet_solana_1.publicKey],
76
+ ['partner', beet_solana_1.publicKey],
77
+ ['liquidity', solana_1.u128],
78
+ ['tokenAReserve', solana_1.u64],
79
+ ['tokenBReserve', solana_1.u64],
80
+ ['protocolAFee', solana_1.u64],
81
+ ['protocolBFee', solana_1.u64],
82
+ ['partnerAFee', solana_1.u64],
83
+ ['partnerBFee', solana_1.u64],
84
+ ['sqrtMinPrice', solana_1.u128],
85
+ ['sqrtMaxPrice', solana_1.u128],
86
+ ['sqrtPrice', solana_1.u128],
87
+ ['activationPoint', solana_1.u64],
88
+ ['activationType', beet_1.u8],
89
+ ['poolStatus', beet_1.u8],
90
+ ['tokenAFlag', beet_1.u8],
91
+ ['tokenBFlag', beet_1.u8],
92
+ ['collectFeeMode', beet_1.u8],
93
+ ['poolType', beet_1.u8],
94
+ ['padding0', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 2)],
95
+ ['feeAPerLiquidity', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
96
+ ['feeBPerLiquidity', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
97
+ ['permanentLockLiquidity', solana_1.u128],
98
+ ['metrics', exports.poolMetricsStruct],
99
+ ['padding1', (0, beet_1.uniformFixedSizeArray)(solana_1.u64, 10)],
100
+ ['rewardInfos', (0, beet_1.uniformFixedSizeArray)(exports.rewardInfoStruct, 2)],
101
+ ], (args) => args);
102
+ // Struct for PositionMetrics
103
+ exports.positionMetricsStruct = new beet_1.BeetStruct([
104
+ ['totalClaimedAFee', solana_1.u64],
105
+ ['totalClaimedBFee', solana_1.u64],
106
+ ], (args) => args);
107
+ exports.userRewardInfoStruct = new beet_1.BeetStruct([
108
+ ['rewardPerTokenCheckpoint', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
109
+ ['rewardPendings', solana_1.u64],
110
+ ['totalClaimedRewards', solana_1.u64],
111
+ ], (args) => args);
112
+ // Struct for Position
113
+ exports.positionStruct = new beet_1.FixableBeetStruct([
114
+ ['discriminator', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 8)],
115
+ ['pool', beet_solana_1.publicKey],
116
+ ['nftMint', beet_solana_1.publicKey],
117
+ ['feeAPerTokenCheckpoint', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
118
+ ['feeBPerTokenCheckpoint', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 32)],
119
+ ['feeAPending', solana_1.u64],
120
+ ['feeBPending', solana_1.u64],
121
+ ['unlockedLiquidity', solana_1.u128],
122
+ ['vestedLiquidity', solana_1.u128],
123
+ ['permanentLockedLiquidity', solana_1.u128],
124
+ ['metrics', exports.positionMetricsStruct],
125
+ ['rewardInfos', (0, beet_1.uniformFixedSizeArray)(exports.userRewardInfoStruct, 2)],
126
+ ['padding', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 6)],
127
+ ], (args) => args);
128
+ //# sourceMappingURL=structs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/meteora/cpamm/structs.ts"],"names":[],"mappings":"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"}