@alphafi/alphafi-sdk 1.0.0 → 1.0.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/dist/cjs/core/index.js +1 -1
- package/dist/cjs/core/index.js.map +1 -1
- package/dist/cjs/core/types.d.ts +2 -0
- package/dist/cjs/core/types.d.ts.map +1 -1
- package/dist/cjs/core/types.js.map +1 -1
- package/dist/cjs/models/strategyContext.d.ts +2 -1
- package/dist/cjs/models/strategyContext.d.ts.map +1 -1
- package/dist/cjs/models/strategyContext.js +9 -9
- package/dist/cjs/models/strategyContext.js.map +1 -1
- package/dist/cjs/models/types.d.ts +6 -0
- package/dist/cjs/models/types.d.ts.map +1 -1
- package/dist/cjs/models/types.js.map +1 -1
- package/dist/cjs/strategies/alphaVault.d.ts.map +1 -1
- package/dist/cjs/strategies/alphaVault.js +2 -0
- package/dist/cjs/strategies/alphaVault.js.map +1 -1
- package/dist/cjs/strategies/autobalanceLp.d.ts.map +1 -1
- package/dist/cjs/strategies/autobalanceLp.js +3 -0
- package/dist/cjs/strategies/autobalanceLp.js.map +1 -1
- package/dist/cjs/strategies/fungibleLending.d.ts.map +1 -1
- package/dist/cjs/strategies/fungibleLending.js +2 -0
- package/dist/cjs/strategies/fungibleLending.js.map +1 -1
- package/dist/cjs/strategies/fungibleLp.d.ts.map +1 -1
- package/dist/cjs/strategies/fungibleLp.js +5 -2
- package/dist/cjs/strategies/fungibleLp.js.map +1 -1
- package/dist/cjs/strategies/lending.d.ts.map +1 -1
- package/dist/cjs/strategies/lending.js +5 -2
- package/dist/cjs/strategies/lending.js.map +1 -1
- package/dist/cjs/strategies/looping.d.ts.map +1 -1
- package/dist/cjs/strategies/looping.js +3 -2
- package/dist/cjs/strategies/looping.js.map +1 -1
- package/dist/cjs/strategies/lp.d.ts.map +1 -1
- package/dist/cjs/strategies/lp.js +3 -0
- package/dist/cjs/strategies/lp.js.map +1 -1
- package/dist/cjs/strategies/lyf.d.ts.map +1 -1
- package/dist/cjs/strategies/lyf.js +3 -0
- package/dist/cjs/strategies/lyf.js.map +1 -1
- package/dist/cjs/strategies/singleAssetLooping.d.ts.map +1 -1
- package/dist/cjs/strategies/singleAssetLooping.js +2 -0
- package/dist/cjs/strategies/singleAssetLooping.js.map +1 -1
- package/dist/cjs/strategies/slushLending.d.ts.map +1 -1
- package/dist/cjs/strategies/slushLending.js +2 -0
- package/dist/cjs/strategies/slushLending.js.map +1 -1
- package/dist/cjs/utils/constants.d.ts +1 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +2 -1
- package/dist/cjs/utils/constants.js.map +1 -1
- package/dist/cjs/utils/testing-pools.js +4 -4
- package/dist/cjs/utils/testing-pools.js.map +1 -1
- package/dist/esm/core/index.js +1 -1
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/core/types.d.ts +2 -0
- package/dist/esm/core/types.d.ts.map +1 -1
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/models/strategyContext.d.ts +2 -1
- package/dist/esm/models/strategyContext.d.ts.map +1 -1
- package/dist/esm/models/strategyContext.js +9 -9
- package/dist/esm/models/strategyContext.js.map +1 -1
- package/dist/esm/models/types.d.ts +6 -0
- package/dist/esm/models/types.d.ts.map +1 -1
- package/dist/esm/models/types.js.map +1 -1
- package/dist/esm/strategies/alphaVault.d.ts.map +1 -1
- package/dist/esm/strategies/alphaVault.js +2 -0
- package/dist/esm/strategies/alphaVault.js.map +1 -1
- package/dist/esm/strategies/autobalanceLp.d.ts.map +1 -1
- package/dist/esm/strategies/autobalanceLp.js +3 -0
- package/dist/esm/strategies/autobalanceLp.js.map +1 -1
- package/dist/esm/strategies/fungibleLending.d.ts.map +1 -1
- package/dist/esm/strategies/fungibleLending.js +2 -0
- package/dist/esm/strategies/fungibleLending.js.map +1 -1
- package/dist/esm/strategies/fungibleLp.d.ts.map +1 -1
- package/dist/esm/strategies/fungibleLp.js +5 -2
- package/dist/esm/strategies/fungibleLp.js.map +1 -1
- package/dist/esm/strategies/lending.d.ts.map +1 -1
- package/dist/esm/strategies/lending.js +5 -2
- package/dist/esm/strategies/lending.js.map +1 -1
- package/dist/esm/strategies/looping.d.ts.map +1 -1
- package/dist/esm/strategies/looping.js +3 -2
- package/dist/esm/strategies/looping.js.map +1 -1
- package/dist/esm/strategies/lp.d.ts.map +1 -1
- package/dist/esm/strategies/lp.js +3 -0
- package/dist/esm/strategies/lp.js.map +1 -1
- package/dist/esm/strategies/lyf.d.ts.map +1 -1
- package/dist/esm/strategies/lyf.js +3 -0
- package/dist/esm/strategies/lyf.js.map +1 -1
- package/dist/esm/strategies/singleAssetLooping.d.ts.map +1 -1
- package/dist/esm/strategies/singleAssetLooping.js +2 -0
- package/dist/esm/strategies/singleAssetLooping.js.map +1 -1
- package/dist/esm/strategies/slushLending.d.ts.map +1 -1
- package/dist/esm/strategies/slushLending.js +2 -0
- package/dist/esm/strategies/slushLending.js.map +1 -1
- package/dist/esm/utils/constants.d.ts +1 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +2 -1
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/esm/utils/testing-pools.js +4 -4
- package/dist/esm/utils/testing-pools.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alphaVault.d.ts","sourceRoot":"","sources":["../../../src/strategies/alphaVault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAkB,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAU1E;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY,CAClD,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,EAAE,8CAA8C;AACrD,uBAAuB,CACxB;IACC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,OAAO,CAAkB;gBAG/B,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,GAAG,EACf,cAAc,EAAE,GAAG,EACnB,OAAO,EAAE,eAAe;IAS1B,YAAY,IAAI,mBAAmB;IAInC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAItE,cAAc,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI;IAK5D;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,eAAe;IA6B/C;;;OAGG;IACH,YAAY,IAAI,OAAO;IAWvB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"alphaVault.d.ts","sourceRoot":"","sources":["../../../src/strategies/alphaVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alphaVault.js","sourceRoot":"","sources":["../../../src/strategies/alphaVault.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from 'decimal.js';\nimport { AlphaMiningData, BaseStrategy, StringMap, ProtocolType } from './strategy.js';\nimport { AlphaFiReceipt, PoolBalance, PoolData, SingleTvl } from '../models/types.js';\nimport { StrategyContext } from '../models/strategyContext.js';\nimport { DepositOptions, WithdrawOptions } from '../core/types.js';\nimport { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport {\n ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES,\n CLOCK_PACKAGE_ID,\n PACKAGE_IDS,\n POOLS,\n VERSIONS,\n} from '../utils/constants.js';\nimport { AlphalendClient, getConstants, getUserPositionCapId } from '@alphafi/alphalend-sdk';\n\n/**\n * AlphaVault Strategy\n */\nexport class AlphaVaultStrategy extends BaseStrategy<\n AlphaVaultPoolObject,\n AlphaVaultInvestorObject,\n never, // AlphaVault doesn't have parent pool objects\n AlphaVaultReceiptObject\n> {\n private poolLabel: AlphaVaultPoolLabel;\n private poolObject: AlphaVaultPoolObject;\n private investorObject: AlphaVaultInvestorObject;\n private legacyReceiptObjects: AlphaVaultLegacyReceiptObject[] = [];\n private receiptObjects: AlphaVaultReceiptObject[] = [];\n private context: StrategyContext;\n\n constructor(\n poolLabel: AlphaVaultPoolLabel,\n poolObject: any,\n investorObject: any,\n context: StrategyContext,\n ) {\n super();\n this.poolLabel = poolLabel;\n this.poolObject = this.parsePoolObject(poolObject);\n this.investorObject = this.parseInvestorObject(investorObject);\n this.context = context;\n }\n\n getPoolLabel(): AlphaVaultPoolLabel {\n return this.poolLabel;\n }\n\n getOtherAmount(_amount: string, _isAmountA: boolean): [string, string] {\n throw new Error('getOtherAmount is not supported for single-asset AlphaVault strategy');\n }\n\n updateReceipts(legacyReceipts: any[], receipts: any[]): void {\n this.legacyReceiptObjects = this.parseLegacyReceiptObjects(legacyReceipts);\n this.receiptObjects = this.parseReceiptObjects(receipts);\n }\n\n /**\n * Get data needed for alpha mining rewards calculation.\n * Uses positions (receiptObjects) or legacy receipts if available.\n */\n protected getAlphaMiningData(): AlphaMiningData {\n // Get receipt data from positions or legacy receipts\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : null;\n\n let receiptData = null;\n if (position) {\n receiptData = {\n lastAccRewardPerXtoken: position.lastAccRewardPerXtoken,\n pendingRewards: position.pendingRewards,\n xTokenBalance: position.xTokens,\n };\n } else if (legacyReceipt) {\n receiptData = {\n lastAccRewardPerXtoken: legacyReceipt.lastAccRewardPerXtoken,\n pendingRewards: legacyReceipt.pendingRewards,\n xTokenBalance: legacyReceipt.xTokenBalance,\n };\n }\n\n return {\n poolId: this.poolLabel.poolId,\n accRewardsPerXtoken: this.poolObject.accRewardsPerXtoken,\n xTokenSupply: this.poolObject.xTokenSupply,\n receipt: receiptData,\n };\n }\n\n /**\n * Calculate exchange rate: tokens_invested / xtoken_supply\n * Returns 1 if no tokens are supplied.\n */\n exchangeRate(): Decimal {\n const tokensInvested = new Decimal(this.poolObject.tokensInvested);\n const xtokenSupply = new Decimal(this.poolObject.xTokenSupply);\n\n if (xtokenSupply.isZero()) {\n return new Decimal(1); // Default exchange rate when no tokens are supplied\n }\n\n return tokensInvested.div(xtokenSupply);\n }\n\n /**\n * Get pool summary data including APR and TVL\n */\n async getData(): Promise<PoolData> {\n const [alphafi, apr] = await Promise.all([\n this.getTvl(),\n this.context.getAprData(this.poolLabel.poolId),\n ]);\n return {\n poolId: this.poolLabel.poolId,\n poolName: this.poolLabel.poolName,\n apr,\n tvl: {\n alphafi,\n parent: alphafi,\n },\n };\n }\n\n /**\n * Calculate TVL in USD using token amount and price\n */\n async getTvl(): Promise<SingleTvl> {\n const coinType = this.poolLabel.asset.type;\n const decimals = await this.context.getCoinDecimals(coinType);\n const price = await this.context.getCoinPrice(coinType);\n const tokenAmount = new Decimal(this.poolObject.tokensInvested).div(\n new Decimal(10).pow(decimals),\n );\n const usdValue = tokenAmount.mul(price);\n return { tokenAmount, usdValue };\n }\n\n async getParentTvl(): Promise<SingleTvl> {\n throw new Error('AlphaVault strategy does not have a parent pool');\n }\n\n /**\n * Get user's balance including staked amount, pending deposits, withdrawals, and claimable airdrop\n * @param userAddress - User's wallet address\n */\n async getBalance(userAddress: string): Promise<PoolBalance> {\n // Get all required data concurrently\n const [tokenDecimals, tokenPrice, pendingDepositsOption, withdrawalData, claimableAirdrop] =\n await Promise.all([\n this.getTokenDecimals(),\n this.getTokenPriceUsd(),\n this.getPendingDeposits(userAddress),\n this.getWithdrawals(),\n this.getUserClaimableAirdropAmount(),\n ]);\n\n const totalAirdropClaimed = this.getUserTotalAirdropClaimed();\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n\n // If no receipts and no position, return zeros\n if (this.legacyReceiptObjects.length === 0 && !position) {\n return {\n stakedAlphaAmount: new Decimal(0),\n stakedAlphaUsdValue: new Decimal(0),\n pendingDeposits: new Decimal(0),\n withdrawals: [],\n claimableAirdrop: new Decimal(0),\n totalAirdropClaimed: new Decimal(0),\n };\n }\n\n // Get staked xtokens from position if available, otherwise from receipts\n let stakedXtokens: Decimal;\n if (position) {\n stakedXtokens = new Decimal(position.xTokens || '0');\n } else {\n stakedXtokens = new Decimal(this.legacyReceiptObjects[0]?.xTokenBalance || '0');\n }\n\n const exchangeRate = this.exchangeRate();\n\n // Calculate staked alpha amount\n let stakedAlphaAmount = stakedXtokens.mul(exchangeRate).div(new Decimal(10).pow(tokenDecimals));\n\n // Add pending deposits\n const pendingDeposits = pendingDepositsOption || new Decimal(0);\n stakedAlphaAmount = stakedAlphaAmount.add(pendingDeposits);\n\n // Subtract pending withdrawals (status == 0)\n for (const withdrawal of withdrawalData) {\n if (withdrawal.status === 0) {\n stakedAlphaAmount = stakedAlphaAmount.sub(new Decimal(withdrawal.alphaAmount || '0'));\n }\n }\n\n return {\n stakedAlphaAmount,\n stakedAlphaUsdValue: stakedAlphaAmount.mul(tokenPrice),\n pendingDeposits,\n withdrawals: withdrawalData,\n claimableAirdrop,\n totalAirdropClaimed,\n };\n }\n\n /**\n * Get token decimals for the pool's asset\n */\n async getTokenDecimals(): Promise<number> {\n return this.context.getCoinDecimals(this.poolLabel.asset.type);\n }\n\n /**\n * Get token price in USD for the pool's asset\n */\n async getTokenPriceUsd(): Promise<Decimal> {\n return this.context.getCoinPrice(this.poolLabel.asset.type);\n }\n\n /**\n * Get pending deposits amount by checking recently_updated_alphafi_receipts\n * @param userAddress - User's wallet address\n */\n async getPendingDeposits(userAddress: string): Promise<Decimal> {\n const alphafiReceipts = await this.context.getAlphaFiReceipts(userAddress);\n if (alphafiReceipts.length === 0) {\n return new Decimal(0);\n }\n\n const receiptId = alphafiReceipts[0].id;\n const entry = this.poolObject.recentlyUpdatedAlphafiReceipts.find(\n (item) => item.key === receiptId,\n );\n\n if (!entry) {\n return new Decimal(0);\n }\n\n // Parse the xtokensToAdd from the entry value\n const xtokensToAdd = entry.value.xtokensToAdd;\n if (xtokensToAdd === '0' || !xtokensToAdd) {\n return new Decimal(0);\n }\n\n const [exchangeRate, decimals] = await Promise.all([\n Promise.resolve(this.exchangeRate()),\n this.getTokenDecimals(),\n ]);\n\n const result = new Decimal(xtokensToAdd).mul(exchangeRate).div(new Decimal(10).pow(decimals));\n\n return result;\n }\n\n /**\n * Get all withdrawal requests with status and ETA timestamps\n * Status: 0 = pending, 1 = accepted, 2 = claimable\n */\n async getWithdrawals(): Promise<\n {\n ticketId: string;\n alphaAmount: string;\n status: number; // 0 for pending, 1 for accepted, 2 for claimable\n withdrawalEtaTimestamp: number;\n }[]\n > {\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n if (!position) {\n return [];\n }\n\n const decimals = await this.getTokenDecimals();\n const nowMs = Date.now();\n const dayOfWeek = new Date().getDay(); // 0 = Sunday\n const numDaysFromNextSunday = 7 - dayOfWeek;\n\n const results: {\n ticketId: string;\n alphaAmount: string;\n status: number; // 0 for pending, 1 for accepted, 2 for claimable\n withdrawalEtaTimestamp: number;\n }[] = [];\n\n for (const entry of position.withdrawRequests) {\n const timeOfUnlock = parseInt(entry.value.timeOfUnlock || '0', 10);\n const timeOfRequest = parseInt(entry.value.timeOfRequest || '0', 10);\n const lockingPeriod = parseInt(this.poolObject.lockingPeriod || '0', 10);\n\n // Determine status: 2 if claimable (time_of_unlock > 0 and passed), else use stored status\n let status: number;\n if (timeOfUnlock > 0 && nowMs >= timeOfUnlock) {\n status = 2; // claimable\n } else {\n status = parseInt(entry.value.status || '0', 10);\n }\n\n // Calculate ETA\n let eta: number;\n if (timeOfUnlock === 0) {\n eta = timeOfRequest + lockingPeriod + numDaysFromNextSunday * 86400000;\n } else {\n eta = timeOfUnlock;\n }\n\n const tokenAmount = entry.value.tokenAmount || '0';\n const alphaAmount = new Decimal(tokenAmount).div(new Decimal(10).pow(decimals)).toString();\n\n results.push({\n ticketId: entry.key,\n alphaAmount,\n status, // 0 = pending, 1 = accepted, 2 = claimable\n withdrawalEtaTimestamp: eta,\n });\n }\n\n return results;\n }\n\n /**\n * Calculate user's claimable SUI airdrop based on accrued rewards per xtoken and pending rewards\n */\n async getUserClaimableAirdropAmount(): Promise<Decimal> {\n const rewardType =\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\n const rewardDecimals = await this.context.getCoinDecimals(rewardType);\n\n // Get current accumulated rewards per xtoken from pool\n const curAccEntry = this.poolObject.accRewardsPerXtoken.find(\n (item) => item.key === rewardType.slice(2),\n );\n const curAcc = new Decimal(curAccEntry?.value || '0');\n\n // Get user's position\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n\n // Get user's last accumulated reward per xtoken\n const userLastAccEntry = position?.lastAccRewardPerXtoken.find(\n (item) => item.key === rewardType.slice(2),\n );\n const userLastAcc = new Decimal(userLastAccEntry?.value || '0');\n\n // Get user's xtokens\n let userXtokens: Decimal;\n if (position) {\n userXtokens = new Decimal(position.xTokens || '0');\n } else if (this.legacyReceiptObjects.length > 0) {\n userXtokens = new Decimal(this.legacyReceiptObjects[0].xTokenBalance || '0');\n } else {\n userXtokens = new Decimal(0);\n }\n\n // Get pending rewards\n const pendingRewardsEntry = position?.pendingRewards.find(\n (item) => item.key === rewardType.slice(2),\n );\n const pendingRewards = new Decimal(pendingRewardsEntry?.value || '0');\n\n // Calculate: (((curAcc - userLastAcc) / 1e18) * userXtokens + pendingRewards) / 10^rewardDecimals\n const accDiff = curAcc.sub(userLastAcc).div(new Decimal(10).pow(18));\n const claimable = accDiff.mul(userXtokens).add(pendingRewards);\n return claimable.div(new Decimal(10).pow(rewardDecimals));\n }\n\n /**\n * Get user's total SUI airdrop claimed so far\n */\n getUserTotalAirdropClaimed(): Decimal {\n const rewardType =\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n if (!position) {\n return new Decimal(0);\n }\n\n const totalClaimedEntry = position.totalCollectedRewards.find(\n (item) => item.key === rewardType.slice(2),\n );\n const totalClaimed = new Decimal(totalClaimedEntry?.value || '0');\n\n // SUI has 9 decimals\n return totalClaimed.div(new Decimal(10).pow(9));\n }\n\n /**\n * Get total SUI airdrop distributed from the pool\n */\n getTotalAirdropDistributed(): Decimal {\n const rewardType =\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\n // totalDistributed is stored as a string, but in Rust it's VecMap<TypeName, u64>\n // If it's a single value, use it directly; otherwise search the array\n let totalDistributedValue = '0';\n\n if (typeof this.poolObject.totalDistributed === 'string') {\n // If it's stored as a simple string\n totalDistributedValue = this.poolObject.totalDistributed;\n } else if (Array.isArray(this.poolObject.totalDistributed)) {\n // If it's stored as an array of key-value pairs\n const entry = (this.poolObject.totalDistributed as unknown as StringMap[]).find(\n (item) => item.key === rewardType.slice(2),\n );\n totalDistributedValue = entry?.value || '0';\n }\n\n const totalDistributed = new Decimal(totalDistributedValue);\n // SUI has 9 decimals\n return totalDistributed.div(new Decimal(10).pow(9));\n }\n\n /**\n * Parse VecMap of position updates into structured entries\n */\n private parsePositionUpdateVecMap(vecMapField: any): PositionUpdateEntry[] {\n const contents = vecMapField?.fields?.contents ?? vecMapField?.contents ?? vecMapField;\n if (!Array.isArray(contents)) {\n return [];\n }\n\n return contents\n .map((entry: any) => {\n const ef = entry?.fields ?? entry ?? {};\n const key = this.getStringField(ef, 'key');\n const valueFields = ef.value?.fields ?? ef.value ?? {};\n return {\n key,\n value: {\n xtokensToAdd:\n this.getStringField(valueFields, 'xtokens_to_add') ||\n this.getStringField(valueFields, 'xtokensToAdd') ||\n '0',\n xtokensToRemove:\n this.getStringField(valueFields, 'xtokens_to_remove') ||\n this.getStringField(valueFields, 'xtokensToRemove') ||\n '0',\n },\n };\n })\n .filter((e: PositionUpdateEntry) => e.key);\n }\n\n /**\n * Parse pool object from blockchain response\n */\n parsePoolObject(response: any): AlphaVaultPoolObject {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n\n return {\n id: this.getStringField(fields, 'id'),\n xTokenSupply: this.getStringField(fields, 'xTokenSupply'),\n tokensInvested: this.getStringField(fields, 'tokensInvested'),\n unsuppliedBalance: this.getStringField(fields, 'unsupplied_balance'),\n claimableBalance: this.getStringField(fields, 'claimable_balance'),\n positions: (() => {\n const idVal = this.getNestedField(fields, 'positions.id');\n const sizeVal = this.getNestedField(fields, 'positions.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n recentlyUpdatedAlphafiReceipts: this.parsePositionUpdateVecMap(\n fields.recently_updated_alphafi_receipts || {},\n ),\n withdrawRequests: fields.withdraw_requests?.contents?.map((entry: any) => ({\n timestamp: entry.key,\n leftoverAmount: this.getNestedField(entry, 'value.leftover_amount'),\n totalAmountToWithdraw: this.getNestedField(entry, 'value.total_amount_to_withdraw'),\n })),\n feeCollected: this.getStringField(fields, 'fee_collected'),\n lastDistributionTime: this.getStringField(fields, 'last_distribution_time'),\n lastAutocompoundTime: this.getStringField(fields, 'last_autocompound_time'),\n lockingPeriod: this.getStringField(fields, 'locking_period'),\n timeFromLockingPeriodForUnstakingToStart: this.getStringField(\n fields,\n 'time_from_locking_period_for_unstaking_to_start',\n ),\n currentExchangeRate: this.getNestedField(fields, 'current_exchange_rate.value'),\n rewards: (() => {\n const idVal = this.getNestedField(fields, 'rewards.id');\n const sizeVal = this.getNestedField(fields, 'rewards.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n accRewardsPerXtoken: this.parseVecMap(fields.acc_rewards_per_xtoken).map(\n (item) =>\n ({\n key: item.key,\n value: item.value.value,\n }) as StringMap,\n ),\n totalDistributed: this.parseVecMap(fields.total_distributed || {}),\n depositFee: this.getStringField(fields, 'deposit_fee') || '0',\n depositFeeMaxCap: this.getStringField(fields, 'deposit_fee_max_cap') || '0',\n withdrawalFee: this.getStringField(fields, 'withdrawal_fee') || '0',\n withdrawFeeMaxCap: this.getStringField(fields, 'withdraw_fee_max_cap') || '0',\n feeAddress: this.getStringField(fields, 'fee_address'),\n isDepositPaused: this.getBooleanField(fields, 'is_deposit_paused', false),\n isWithdrawPaused: this.getBooleanField(fields, 'is_withdraw_paused', false),\n alphafiPartnerCap: this.getNestedField(fields, 'alphafi_partner_cap.id'),\n activeInvestorId: this.getStringField(fields, 'active_investor_id'),\n additionalFields: (() => {\n const idVal = this.getNestedField(fields, 'additional_fields.id');\n const sizeVal = this.getNestedField(fields, 'additional_fields.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n };\n }, 'Failed to parse AlphaVault pool object');\n }\n\n /**\n * Parse investor object from blockchain response\n */\n parseInvestorObject(response: any): AlphaVaultInvestorObject {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n const allowedCoinTypesArray = fields.allowed_coin_types_for_swap?.contents;\n const withdrawTicketsArray = fields.withdraw_tickets?.contents;\n\n const parseWithdrawTicketInner = (val: any): WithdrawalRequest | null => {\n const vf = val?.fields ?? val ?? {};\n return {\n owner: this.getStringField(vf, 'owner'),\n receiver: this.getStringField(vf, 'receiver'),\n shares: this.getStringField(vf, 'shares'),\n estimatedWithdrawAmount: this.getStringField(vf, 'estimated_withdraw_amount'),\n timestamp: this.getStringField(vf, 'timestamp'),\n sequenceNumber: this.getStringField(vf, 'sequence_number'),\n };\n };\n\n const withdrawTickets = withdrawTicketsArray\n .map((entry: any) => {\n const key = this.getNestedField(entry, 'key.@variant');\n const innerContents = entry.value?.contents;\n const value: WithdrawalRequest[] = innerContents\n .map((inner: any) => {\n const innerVal = parseWithdrawTicketInner(inner.value);\n return innerVal;\n })\n .filter((v: WithdrawalRequest | null): v is WithdrawalRequest => v !== null);\n return { key, value };\n })\n .filter(\n (\n v: { key: string; value: WithdrawalRequest[] } | null,\n ): v is {\n key: string;\n value: WithdrawalRequest[];\n } => v !== null,\n );\n\n return {\n id: this.getStringField(fields, 'id'),\n unsuppliedBalance: this.getStringField(fields, 'unsupplied_balance'),\n claimableBalance: this.getStringField(fields, 'claimable_balance'),\n alphalendPositionCap: {\n positionId: this.getNestedField(fields, 'alphalend_position_cap.id'),\n },\n curDebt: this.getStringField(fields, 'cur_debt'),\n currentDebtToSupplyRatio: this.getNestedField(fields, 'current_debt_to_supply_ratio.value'),\n borrowTokenToTokenRatio: this.getNestedField(fields, 'borrow_token_to_token_ratio.value'),\n safeBorrowPercentage: this.getStringField(fields, 'safe_borrow_percentage'),\n allowedCoinTypesForSwap: Array.isArray(allowedCoinTypesArray)\n ? allowedCoinTypesArray\n .map((entry: any) => {\n const ef = entry?.fields ?? entry ?? {};\n const value = ef.value;\n if (value !== true) return null;\n const keyName = ef.key?.fields?.name ?? ef.key?.name ?? ef.key;\n return typeof keyName === 'string' ? keyName : null;\n })\n .filter((v: string | null): v is string => Boolean(v))\n : [],\n minimumSwapAmount: this.getStringField(fields, 'minimum_swap_amount'),\n primaryMarketId: this.getStringField(fields, 'primary_market_id'),\n borrowMarketId: this.getStringField(fields, 'borrow_market_id'),\n resupplyMarketId: this.getStringField(fields, 'resupply_market_id'),\n freeRewards: (() => {\n const idVal = this.getNestedField(fields, 'free_rewards.id');\n const sizeVal = this.getNestedField(fields, 'free_rewards.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n withdrawReceiversAddress: this.getStringField(fields, 'withdraw_receivers_address'),\n withdrawTickets,\n totalPendingWithdrawals: this.getStringField(fields, 'total_pending_withdrawals'),\n performanceFee: this.getStringField(fields, 'performance_fee'),\n performanceFeeCap: this.getStringField(fields, 'performance_fee_cap'),\n additionalFields: (() => {\n const idVal = this.getNestedField(fields, 'additional_fields.id');\n const sizeVal = this.getNestedField(fields, 'additional_fields.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n };\n }, 'Failed to parse AlphaVault investor object');\n }\n\n /**\n * Parse parent pool object from blockchain response (not applicable for AlphaVault)\n */\n parseParentPoolObject(_response: any): never {\n throw new Error('AlphaVault strategy does not have parent pool objects');\n }\n\n /**\n * Parse legacy receipt objects from blockchain responses\n */\n parseLegacyReceiptObjects(responses: any[]): AlphaVaultLegacyReceiptObject[] {\n return responses.map((response, index) => {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n\n return {\n id: this.getStringField(fields, 'id'),\n imageUrl: this.getStringField(fields, 'image_url'),\n lastAccRewardPerXtoken: this.parseVecMap(fields.last_acc_reward_per_xtoken || {}),\n lockedBalance: {\n id: this.getNestedField(fields, 'locked_balance.id'),\n size: this.getNestedField(fields, 'locked_balance.size'),\n head: this.getNestedField(fields, 'locked_balance.head'),\n tail: this.getNestedField(fields, 'locked_balance.tail'),\n },\n name: this.getStringField(fields, 'name'),\n owner: this.getStringField(fields, 'owner'),\n pendingRewards: this.parseVecMap(fields.pending_rewards || {}),\n poolId: this.getStringField(fields, 'pool_id'),\n unlockedXtokens: this.getStringField(fields, 'unlocked_xtokens'),\n xTokenBalance: this.getStringField(fields, 'xTokenBalance'),\n };\n }, `Failed to parse AlphaVault receipt object at index ${index}`);\n });\n }\n\n /**\n * Parse AlphaVault receipt objects\n */\n parseReceiptObjects(responses: any[]): AlphaVaultReceiptObject[] {\n return responses.map((response, index) => {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n\n const parseTableInfo = (tableField: any): TableInfo => {\n return {\n id: this.getStringField(tableField, 'id'),\n size: this.getStringField(tableField, 'size'),\n };\n };\n\n const totalCollectedRewards = this.parseVecMap(fields.total_collected_rewards || {});\n\n // Parse withdraw_requests as VecMap<ID, UserWithdrawRequest> - matches Rust's structure\n const parseWithdrawRequestKV = (\n kv: any,\n ): {\n key: string;\n value: UserWithdrawRequest;\n } | null => {\n const key = this.getStringField(kv, 'key');\n const valFields = kv.value;\n const value: UserWithdrawRequest = {\n id: this.getStringField(valFields, 'id'),\n timeOfRequest: this.getStringField(valFields, 'time_of_request'),\n timeOfAcceptance: this.getStringField(valFields, 'time_of_acceptance'),\n timeOfClaim: this.getStringField(valFields, 'time_of_claim'),\n timeOfUnlock: this.getStringField(valFields, 'time_of_unlock'),\n status: this.getStringField(valFields, 'status'),\n tokenAmount: this.getStringField(valFields, 'token_amount'),\n };\n return { key, value };\n };\n\n const withdrawRequestsKV = fields.withdraw_requests.contents.map(parseWithdrawRequestKV);\n\n return {\n id: this.getStringField(fields, 'id'),\n alphafiReceiptId: this.getStringField(fields, 'alphafi_receipt_id'),\n poolId: this.getStringField(fields, 'pool_id'),\n coinType: this.getNestedField(fields, 'coin_type.name'),\n xTokens: this.getStringField(fields, 'xtokens'),\n withdrawRequests: withdrawRequestsKV as {\n key: string;\n value: UserWithdrawRequest;\n }[],\n allWithdrawals: parseTableInfo(fields.all_withdrawals),\n allDeposits: parseTableInfo(fields.all_deposits),\n lastAccRewardPerXtoken: this.parseVecMap(fields.last_acc_reward_per_xtoken).map(\n (item) =>\n ({\n key: item.key,\n value: item.value.value,\n }) as StringMap,\n ),\n pendingRewards: this.parseVecMap(fields.pending_rewards || {}),\n totalCollectedRewards,\n };\n }, `Failed to parse AlphaVault position object at index ${index}`);\n });\n }\n\n async deposit(tx: Transaction, options: DepositOptions) {\n const depositCoin = await this.context.blockchain.getCoinObject(\n tx,\n this.poolLabel.asset.type,\n options.address,\n options.amount,\n );\n\n const alphafiReceipts = await this.context.getAlphaFiReceipts(options.address);\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : null;\n\n if (alphafiReceipts.length === 0) {\n const alphafiReceiptObj = this.createAlphaFiReceipt(tx);\n\n // Convert alpha receipt to ember position if alpha receipt exists\n if (legacyReceipt) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n alphafiReceiptObj,\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n\n // Deposit to ember pool\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_deposit`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n alphafiReceiptObj,\n tx.object(this.poolLabel.poolId),\n depositCoin,\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHAFI_RECEIPT}::alphafi_receipt::transfer_receipt_to_new_owner`,\n arguments: [\n alphafiReceiptObj,\n tx.pure.address(options.address),\n tx.object(ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES),\n ],\n });\n } else {\n // Convert alpha receipt to ember position if needed\n if (legacyReceipt && this.receiptObjects.length === 0) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n tx.object(alphafiReceipts[0].id),\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n // Deposit to ember pool\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_deposit`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(alphafiReceipts[0].id),\n tx.object(this.poolLabel.poolId),\n depositCoin,\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n }\n }\n\n private async getAlphaTotalShares(alphafiReceipt: AlphaFiReceipt): Promise<string> {\n const entry = alphafiReceipt.positionPoolMap.find(\n (item) => item.value.poolId === this.poolLabel.poolId,\n );\n if (!entry) {\n console.error('no position for pool id found');\n return '0';\n }\n const position = await this.context.blockchain.getObject(entry.key);\n return (position as any).data?.content.fields.xtokens.toString();\n }\n\n async withdraw(tx: Transaction, options: WithdrawOptions) {\n const { amount, withdrawMax, address } = options;\n const alphafiReceipts = await this.context.getAlphaFiReceipts(address);\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : undefined;\n if (alphafiReceipts.length === 0 && !legacyReceipt) {\n throw new Error(`No AlphaFi receipts or receit found for address ${address}`);\n }\n\n // Calculate xtokens based on amount or withdrawMax\n let xtokens = new Decimal(amount)\n .div(new Decimal(this.poolObject.currentExchangeRate).div(1e18))\n .ceil()\n .toNumber();\n if (withdrawMax) {\n if (alphafiReceipts.length === 0 && legacyReceipt) {\n xtokens = Number(legacyReceipt.xTokenBalance);\n } else {\n const positionUpdate = this.poolObject.recentlyUpdatedAlphafiReceipts.find(\n (item) => item.key === alphafiReceipts[0].id,\n );\n xtokens =\n Number(await this.getAlphaTotalShares(alphafiReceipts[0])) -\n (positionUpdate\n ? Number(positionUpdate.value.xtokensToRemove) -\n Number(positionUpdate.value.xtokensToAdd)\n : 0);\n }\n }\n\n if (alphafiReceipts.length === 0) {\n // Create new AlphaFi receipt\n const alphafiReceiptObj = this.createAlphaFiReceipt(tx);\n if (!legacyReceipt) {\n throw new Error('No alphafi receipt and no alpha receipt found');\n }\n\n // Convert alpha receipt to ember position\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n alphafiReceiptObj,\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n\n // Initiate withdrawal\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_initiate_withdraw`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n alphafiReceiptObj,\n tx.object(this.poolLabel.poolId),\n tx.pure.u64(xtokens),\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHAFI_RECEIPT}::alphafi_receipt::transfer_receipt_to_new_owner`,\n arguments: [\n alphafiReceiptObj,\n tx.pure.address(address),\n tx.object(ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES),\n ],\n });\n } else {\n const existingReceipt = alphafiReceipts[0];\n const isPresent = this.receiptObjects.length > 0;\n\n if (!isPresent && !legacyReceipt) {\n throw new Error('No position or old alpha receipt found');\n }\n\n // Convert alpha receipt to ember position if needed\n if (!isPresent && legacyReceipt) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n tx.object(existingReceipt.id),\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n\n // Initiate withdrawal\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_initiate_withdraw`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(existingReceipt.id),\n tx.object(this.poolLabel.poolId),\n tx.pure.u64(xtokens),\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n }\n }\n\n async claimWithdraw(tx: Transaction, ticketId: string, address: string) {\n const alphafiReceipts = await this.context.getAlphaFiReceipts(address);\n\n if (alphafiReceipts.length === 0) {\n throw new Error('No Alphafi receipt found!');\n }\n\n const coin = tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_claim_withdraw`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(alphafiReceipts[0].id),\n tx.object(this.poolLabel.poolId),\n tx.pure.id(ticketId),\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n tx.transferObjects([coin], address);\n }\n\n async claimAirdrop(tx: Transaction, address: string, transferToWallet: boolean) {\n const alphalendClient = new AlphalendClient('mainnet', this.context.blockchain.suiClient);\n let airdropCoin;\n const [suiCoin, alphaCoin] = await this.context.getCoinsBySymbols(['SUI', 'ALPHA']);\n const airdropCoinMarketId = '1';\n const airdropCoinType = suiCoin.coinType;\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : undefined;\n const alphafiReceipts = await this.context.getAlphaFiReceipts(address);\n if (alphafiReceipts.length === 0) {\n // Create new AlphaFi receipt\n const alphafiReceiptObj = this.createAlphaFiReceipt(tx);\n\n if (!legacyReceipt) {\n throw new Error('No alphafi receipt and no alpha receipt found');\n }\n\n // Convert alpha receipt to ember position\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [alphaCoin.coinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n alphafiReceiptObj,\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n\n // Get user rewards\n airdropCoin = tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::get_user_rewards`,\n typeArguments: [alphaCoin.coinType, airdropCoinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n alphafiReceiptObj,\n tx.object(this.poolLabel.poolId),\n ],\n });\n\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHAFI_RECEIPT}::alphafi_receipt::transfer_receipt_to_new_owner`,\n arguments: [\n alphafiReceiptObj,\n tx.pure.address(address),\n tx.object(ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES),\n ],\n });\n } else {\n const existingReceipt = alphafiReceipts[0];\n const isPresent = this.receiptObjects.length > 0;\n\n if (!isPresent && !legacyReceipt) {\n throw new Error('No position or old alpha receipt found');\n }\n\n // Convert alpha receipt to ember position if needed\n if (!isPresent && legacyReceipt) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [alphaCoin.coinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n tx.object(existingReceipt.id),\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n\n // Get user rewards\n airdropCoin = tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::get_user_rewards`,\n typeArguments: [alphaCoin.coinType, airdropCoinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(existingReceipt.id),\n tx.object(this.poolLabel.poolId),\n ],\n });\n }\n\n if (!transferToWallet) {\n await alphalendClient.updatePrices(tx, ['0x2::sui::SUI']);\n const alphalendConstants = getConstants('mainnet');\n const userPositionCapId = await getUserPositionCapId(\n this.context.blockchain.suiClient,\n 'mainnet',\n address,\n );\n if (!userPositionCapId) {\n const positionCap = alphalendClient.createPosition(tx);\n tx.moveCall({\n target: `${alphalendConstants.ALPHALEND_LATEST_PACKAGE_ID}::alpha_lending::add_collateral`,\n typeArguments: [airdropCoinType],\n arguments: [\n tx.object(alphalendConstants.LENDING_PROTOCOL_ID), // Protocol object\n positionCap, // Position capability\n tx.pure.u64(airdropCoinMarketId), // Market ID\n airdropCoin, // Coin to supply as collateral\n tx.object(alphalendConstants.SUI_CLOCK_OBJECT_ID), // Clock object\n ],\n });\n tx.transferObjects([positionCap], address);\n } else {\n const portfolio =\n await alphalendClient.getUserPortfolioFromPositionCapId(userPositionCapId);\n if (portfolio && portfolio.borrowedAmounts.has(Number(airdropCoinMarketId))) {\n airdropCoin = tx.moveCall({\n target: `${alphalendConstants.ALPHALEND_LATEST_PACKAGE_ID}::alpha_lending::repay`,\n typeArguments: [airdropCoinType],\n arguments: [\n tx.object(alphalendConstants.LENDING_PROTOCOL_ID), // Protocol object\n tx.object(userPositionCapId), // Position capability\n tx.pure.u64(airdropCoinMarketId), // Market ID\n airdropCoin, // Coin to repay with\n tx.object(alphalendConstants.SUI_CLOCK_OBJECT_ID), // Clock object\n ],\n });\n tx.transferObjects([airdropCoin], address);\n } else {\n tx.moveCall({\n target: `${alphalendConstants.ALPHALEND_LATEST_PACKAGE_ID}::alpha_lending::add_collateral`,\n typeArguments: [airdropCoinType],\n arguments: [\n tx.object(alphalendConstants.LENDING_PROTOCOL_ID), // Protocol object\n tx.object(userPositionCapId), // Position capability\n tx.pure.u64(airdropCoinMarketId), // Market ID\n airdropCoin, // Coin to supply as collateral\n tx.object(alphalendConstants.SUI_CLOCK_OBJECT_ID), // Clock object\n ],\n });\n }\n }\n } else {\n tx.transferObjects([airdropCoin], address);\n }\n\n return tx;\n }\n\n async claimRewards(_tx: Transaction, _alphaReceipt: TransactionResult) {\n return;\n }\n}\n\n// ===== Types =====\n\n/**\n * AlphaVault Pool object data structure\n */\n\ninterface TableInfo {\n id: string;\n size: string;\n}\n\ninterface PositionUpdateEntry {\n key: string; // Receipt ID\n value: {\n xtokensToAdd: string;\n xtokensToRemove: string;\n };\n}\n\nexport interface AlphaVaultPoolObject {\n id: string;\n xTokenSupply: string;\n tokensInvested: string;\n unsuppliedBalance: string;\n claimableBalance: string;\n positions: TableInfo;\n recentlyUpdatedAlphafiReceipts: PositionUpdateEntry[];\n withdrawRequests: {\n timestamp: string;\n leftoverAmount: string;\n totalAmountToWithdraw: string;\n }[];\n feeCollected: string;\n lastDistributionTime: string;\n lastAutocompoundTime: string;\n lockingPeriod: string;\n timeFromLockingPeriodForUnstakingToStart: string;\n currentExchangeRate: string;\n rewards: {\n id: string;\n size: string;\n };\n accRewardsPerXtoken: StringMap[];\n totalDistributed: StringMap[];\n depositFee: string;\n depositFeeMaxCap: string;\n withdrawalFee: string;\n withdrawFeeMaxCap: string;\n feeAddress: string;\n isDepositPaused: boolean;\n isWithdrawPaused: boolean;\n alphafiPartnerCap: string;\n activeInvestorId: string;\n additionalFields: TableInfo;\n}\n\n/**\n * AlphaVault Investor object data structure\n */\ninterface WithdrawalRequest {\n owner: string;\n receiver: string;\n shares: string;\n estimatedWithdrawAmount: string;\n timestamp: string;\n sequenceNumber: string;\n}\n\nexport interface AlphaVaultInvestorObject {\n id: string;\n unsuppliedBalance: string;\n claimableBalance: string;\n alphalendPositionCap: {\n positionId: string;\n };\n curDebt: string;\n allowedCoinTypesForSwap: string[];\n currentDebtToSupplyRatio: string;\n borrowTokenToTokenRatio: string;\n safeBorrowPercentage: string;\n minimumSwapAmount: string;\n primaryMarketId: string;\n borrowMarketId: string;\n resupplyMarketId: string;\n freeRewards: {\n id: string;\n size: string;\n };\n withdrawReceiversAddress: string;\n withdrawTickets: Array<{\n key: string;\n value: WithdrawalRequest[];\n }>;\n totalPendingWithdrawals: string;\n performanceFee: string;\n performanceFeeCap: string;\n additionalFields: TableInfo;\n}\n\n/**\n * UserWithdrawRequest - Used in AlphaVaultPositionObject's withdraw_requests\n * Matches Rust's UserWithdrawRequest struct\n */\nexport interface UserWithdrawRequest {\n id: string;\n timeOfRequest: string;\n timeOfAcceptance: string;\n timeOfClaim: string;\n timeOfUnlock: string;\n status: string; // 0 for requested, 1 for accepted, 2 for claimed\n tokenAmount: string;\n}\n\n/**\n * AlphaVault Legacy Receipt object data structure\n */\nexport interface AlphaVaultLegacyReceiptObject {\n id: string;\n imageUrl: string;\n lastAccRewardPerXtoken: StringMap[];\n lockedBalance: {\n id: string;\n size: string;\n head: string;\n tail: string;\n };\n name: string;\n owner: string;\n pendingRewards: StringMap[];\n poolId: string;\n unlockedXtokens: string;\n xTokenBalance: string;\n}\n\n/**\n * AlphaVault Receipt object data structure\n */\nexport interface AlphaVaultReceiptObject {\n id: string;\n alphafiReceiptId: string;\n poolId: string;\n coinType: string;\n xTokens: string;\n withdrawRequests: {\n key: string;\n value: UserWithdrawRequest;\n }[];\n allWithdrawals: TableInfo;\n allDeposits: TableInfo;\n lastAccRewardPerXtoken: StringMap[];\n pendingRewards: StringMap[];\n totalCollectedRewards: StringMap[];\n}\n\n// ===== Pool Label =====\n\n/**\n * AlphaVault Pool Label - Configuration for AlphaVault strategy pools\n */\nexport interface AlphaVaultPoolLabel {\n poolId: string;\n investorId: string;\n packageId: string;\n packageNumber: number;\n strategyType: 'AlphaVault';\n parentProtocol: ProtocolType;\n receipt: StringMap;\n asset: StringMap;\n events: {\n autocompoundEventType: string;\n liquidityChangeEventType: string;\n withdrawV2EventType: string;\n afterTransactionEventType: string;\n airdropAddEventType: string;\n };\n isActive: boolean;\n poolName: string;\n isNative: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"alphaVault.js","sourceRoot":"","sources":["../../../src/strategies/alphaVault.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from 'decimal.js';\nimport { AlphaMiningData, BaseStrategy, StringMap, ProtocolType } from './strategy.js';\nimport { AlphaFiReceipt, PoolBalance, PoolData, SingleTvl } from '../models/types.js';\nimport { StrategyContext } from '../models/strategyContext.js';\nimport { DepositOptions, WithdrawOptions } from '../core/types.js';\nimport { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport {\n ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES,\n CLOCK_PACKAGE_ID,\n PACKAGE_IDS,\n POOLS,\n VERSIONS,\n} from '../utils/constants.js';\nimport { AlphalendClient, getConstants, getUserPositionCapId } from '@alphafi/alphalend-sdk';\n\n/**\n * AlphaVault Strategy\n */\nexport class AlphaVaultStrategy extends BaseStrategy<\n AlphaVaultPoolObject,\n AlphaVaultInvestorObject,\n never, // AlphaVault doesn't have parent pool objects\n AlphaVaultReceiptObject\n> {\n private poolLabel: AlphaVaultPoolLabel;\n private poolObject: AlphaVaultPoolObject;\n private investorObject: AlphaVaultInvestorObject;\n private legacyReceiptObjects: AlphaVaultLegacyReceiptObject[] = [];\n private receiptObjects: AlphaVaultReceiptObject[] = [];\n private context: StrategyContext;\n\n constructor(\n poolLabel: AlphaVaultPoolLabel,\n poolObject: any,\n investorObject: any,\n context: StrategyContext,\n ) {\n super();\n this.poolLabel = poolLabel;\n this.poolObject = this.parsePoolObject(poolObject);\n this.investorObject = this.parseInvestorObject(investorObject);\n this.context = context;\n }\n\n getPoolLabel(): AlphaVaultPoolLabel {\n return this.poolLabel;\n }\n\n getOtherAmount(_amount: string, _isAmountA: boolean): [string, string] {\n throw new Error('getOtherAmount is not supported for single-asset AlphaVault strategy');\n }\n\n updateReceipts(legacyReceipts: any[], receipts: any[]): void {\n this.legacyReceiptObjects = this.parseLegacyReceiptObjects(legacyReceipts);\n this.receiptObjects = this.parseReceiptObjects(receipts);\n }\n\n /**\n * Get data needed for alpha mining rewards calculation.\n * Uses positions (receiptObjects) or legacy receipts if available.\n */\n protected getAlphaMiningData(): AlphaMiningData {\n // Get receipt data from positions or legacy receipts\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : null;\n\n let receiptData = null;\n if (position) {\n receiptData = {\n lastAccRewardPerXtoken: position.lastAccRewardPerXtoken,\n pendingRewards: position.pendingRewards,\n xTokenBalance: position.xTokens,\n };\n } else if (legacyReceipt) {\n receiptData = {\n lastAccRewardPerXtoken: legacyReceipt.lastAccRewardPerXtoken,\n pendingRewards: legacyReceipt.pendingRewards,\n xTokenBalance: legacyReceipt.xTokenBalance,\n };\n }\n\n return {\n poolId: this.poolLabel.poolId,\n accRewardsPerXtoken: this.poolObject.accRewardsPerXtoken,\n xTokenSupply: this.poolObject.xTokenSupply,\n receipt: receiptData,\n };\n }\n\n /**\n * Calculate exchange rate: tokens_invested / xtoken_supply\n * Returns 1 if no tokens are supplied.\n */\n exchangeRate(): Decimal {\n const tokensInvested = new Decimal(this.poolObject.tokensInvested);\n const xtokenSupply = new Decimal(this.poolObject.xTokenSupply);\n\n if (xtokenSupply.isZero()) {\n return new Decimal(1); // Default exchange rate when no tokens are supplied\n }\n\n return tokensInvested.div(xtokenSupply);\n }\n\n /**\n * Get pool summary data including APR and TVL\n */\n async getData(): Promise<PoolData> {\n const [alphafi, apr] = await Promise.all([\n this.getTvl(),\n this.context.getAprData(this.poolLabel.poolId),\n ]);\n return {\n poolId: this.poolLabel.poolId,\n strategyType: this.poolLabel.strategyType,\n coinType: this.poolLabel.asset.type,\n poolName: this.poolLabel.poolName,\n apr,\n tvl: {\n alphafi,\n parent: alphafi,\n },\n };\n }\n\n /**\n * Calculate TVL in USD using token amount and price\n */\n async getTvl(): Promise<SingleTvl> {\n const coinType = this.poolLabel.asset.type;\n const decimals = await this.context.getCoinDecimals(coinType);\n const price = await this.context.getCoinPrice(coinType);\n const tokenAmount = new Decimal(this.poolObject.tokensInvested).div(\n new Decimal(10).pow(decimals),\n );\n const usdValue = tokenAmount.mul(price);\n return { tokenAmount, usdValue };\n }\n\n async getParentTvl(): Promise<SingleTvl> {\n throw new Error('AlphaVault strategy does not have a parent pool');\n }\n\n /**\n * Get user's balance including staked amount, pending deposits, withdrawals, and claimable airdrop\n * @param userAddress - User's wallet address\n */\n async getBalance(userAddress: string): Promise<PoolBalance> {\n // Get all required data concurrently\n const [tokenDecimals, tokenPrice, pendingDepositsOption, withdrawalData, claimableAirdrop] =\n await Promise.all([\n this.getTokenDecimals(),\n this.getTokenPriceUsd(),\n this.getPendingDeposits(userAddress),\n this.getWithdrawals(),\n this.getUserClaimableAirdropAmount(),\n ]);\n\n const totalAirdropClaimed = this.getUserTotalAirdropClaimed();\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n\n // If no receipts and no position, return zeros\n if (this.legacyReceiptObjects.length === 0 && !position) {\n return {\n stakedAlphaAmount: new Decimal(0),\n stakedAlphaUsdValue: new Decimal(0),\n pendingDeposits: new Decimal(0),\n withdrawals: [],\n claimableAirdrop: new Decimal(0),\n totalAirdropClaimed: new Decimal(0),\n };\n }\n\n // Get staked xtokens from position if available, otherwise from receipts\n let stakedXtokens: Decimal;\n if (position) {\n stakedXtokens = new Decimal(position.xTokens || '0');\n } else {\n stakedXtokens = new Decimal(this.legacyReceiptObjects[0]?.xTokenBalance || '0');\n }\n\n const exchangeRate = this.exchangeRate();\n\n // Calculate staked alpha amount\n let stakedAlphaAmount = stakedXtokens.mul(exchangeRate).div(new Decimal(10).pow(tokenDecimals));\n\n // Add pending deposits\n const pendingDeposits = pendingDepositsOption || new Decimal(0);\n stakedAlphaAmount = stakedAlphaAmount.add(pendingDeposits);\n\n // Subtract pending withdrawals (status == 0)\n for (const withdrawal of withdrawalData) {\n if (withdrawal.status === 0) {\n stakedAlphaAmount = stakedAlphaAmount.sub(new Decimal(withdrawal.alphaAmount || '0'));\n }\n }\n\n return {\n stakedAlphaAmount,\n stakedAlphaUsdValue: stakedAlphaAmount.mul(tokenPrice),\n pendingDeposits,\n withdrawals: withdrawalData,\n claimableAirdrop,\n totalAirdropClaimed,\n };\n }\n\n /**\n * Get token decimals for the pool's asset\n */\n async getTokenDecimals(): Promise<number> {\n return this.context.getCoinDecimals(this.poolLabel.asset.type);\n }\n\n /**\n * Get token price in USD for the pool's asset\n */\n async getTokenPriceUsd(): Promise<Decimal> {\n return this.context.getCoinPrice(this.poolLabel.asset.type);\n }\n\n /**\n * Get pending deposits amount by checking recently_updated_alphafi_receipts\n * @param userAddress - User's wallet address\n */\n async getPendingDeposits(userAddress: string): Promise<Decimal> {\n const alphafiReceipts = await this.context.getAlphaFiReceipts(userAddress);\n if (alphafiReceipts.length === 0) {\n return new Decimal(0);\n }\n\n const receiptId = alphafiReceipts[0].id;\n const entry = this.poolObject.recentlyUpdatedAlphafiReceipts.find(\n (item) => item.key === receiptId,\n );\n\n if (!entry) {\n return new Decimal(0);\n }\n\n // Parse the xtokensToAdd from the entry value\n const xtokensToAdd = entry.value.xtokensToAdd;\n if (xtokensToAdd === '0' || !xtokensToAdd) {\n return new Decimal(0);\n }\n\n const [exchangeRate, decimals] = await Promise.all([\n Promise.resolve(this.exchangeRate()),\n this.getTokenDecimals(),\n ]);\n\n const result = new Decimal(xtokensToAdd).mul(exchangeRate).div(new Decimal(10).pow(decimals));\n\n return result;\n }\n\n /**\n * Get all withdrawal requests with status and ETA timestamps\n * Status: 0 = pending, 1 = accepted, 2 = claimable\n */\n async getWithdrawals(): Promise<\n {\n ticketId: string;\n alphaAmount: string;\n status: number; // 0 for pending, 1 for accepted, 2 for claimable\n withdrawalEtaTimestamp: number;\n }[]\n > {\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n if (!position) {\n return [];\n }\n\n const decimals = await this.getTokenDecimals();\n const nowMs = Date.now();\n const dayOfWeek = new Date().getDay(); // 0 = Sunday\n const numDaysFromNextSunday = 7 - dayOfWeek;\n\n const results: {\n ticketId: string;\n alphaAmount: string;\n status: number; // 0 for pending, 1 for accepted, 2 for claimable\n withdrawalEtaTimestamp: number;\n }[] = [];\n\n for (const entry of position.withdrawRequests) {\n const timeOfUnlock = parseInt(entry.value.timeOfUnlock || '0', 10);\n const timeOfRequest = parseInt(entry.value.timeOfRequest || '0', 10);\n const lockingPeriod = parseInt(this.poolObject.lockingPeriod || '0', 10);\n\n // Determine status: 2 if claimable (time_of_unlock > 0 and passed), else use stored status\n let status: number;\n if (timeOfUnlock > 0 && nowMs >= timeOfUnlock) {\n status = 2; // claimable\n } else {\n status = parseInt(entry.value.status || '0', 10);\n }\n\n // Calculate ETA\n let eta: number;\n if (timeOfUnlock === 0) {\n eta = timeOfRequest + lockingPeriod + numDaysFromNextSunday * 86400000;\n } else {\n eta = timeOfUnlock;\n }\n\n const tokenAmount = entry.value.tokenAmount || '0';\n const alphaAmount = new Decimal(tokenAmount).div(new Decimal(10).pow(decimals)).toString();\n\n results.push({\n ticketId: entry.key,\n alphaAmount,\n status, // 0 = pending, 1 = accepted, 2 = claimable\n withdrawalEtaTimestamp: eta,\n });\n }\n\n return results;\n }\n\n /**\n * Calculate user's claimable SUI airdrop based on accrued rewards per xtoken and pending rewards\n */\n async getUserClaimableAirdropAmount(): Promise<Decimal> {\n const rewardType =\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\n const rewardDecimals = await this.context.getCoinDecimals(rewardType);\n\n // Get current accumulated rewards per xtoken from pool\n const curAccEntry = this.poolObject.accRewardsPerXtoken.find(\n (item) => item.key === rewardType.slice(2),\n );\n const curAcc = new Decimal(curAccEntry?.value || '0');\n\n // Get user's position\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n\n // Get user's last accumulated reward per xtoken\n const userLastAccEntry = position?.lastAccRewardPerXtoken.find(\n (item) => item.key === rewardType.slice(2),\n );\n const userLastAcc = new Decimal(userLastAccEntry?.value || '0');\n\n // Get user's xtokens\n let userXtokens: Decimal;\n if (position) {\n userXtokens = new Decimal(position.xTokens || '0');\n } else if (this.legacyReceiptObjects.length > 0) {\n userXtokens = new Decimal(this.legacyReceiptObjects[0].xTokenBalance || '0');\n } else {\n userXtokens = new Decimal(0);\n }\n\n // Get pending rewards\n const pendingRewardsEntry = position?.pendingRewards.find(\n (item) => item.key === rewardType.slice(2),\n );\n const pendingRewards = new Decimal(pendingRewardsEntry?.value || '0');\n\n // Calculate: (((curAcc - userLastAcc) / 1e18) * userXtokens + pendingRewards) / 10^rewardDecimals\n const accDiff = curAcc.sub(userLastAcc).div(new Decimal(10).pow(18));\n const claimable = accDiff.mul(userXtokens).add(pendingRewards);\n return claimable.div(new Decimal(10).pow(rewardDecimals));\n }\n\n /**\n * Get user's total SUI airdrop claimed so far\n */\n getUserTotalAirdropClaimed(): Decimal {\n const rewardType =\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\n const position = this.receiptObjects.length > 0 ? this.receiptObjects[0] : null;\n if (!position) {\n return new Decimal(0);\n }\n\n const totalClaimedEntry = position.totalCollectedRewards.find(\n (item) => item.key === rewardType.slice(2),\n );\n const totalClaimed = new Decimal(totalClaimedEntry?.value || '0');\n\n // SUI has 9 decimals\n return totalClaimed.div(new Decimal(10).pow(9));\n }\n\n /**\n * Get total SUI airdrop distributed from the pool\n */\n getTotalAirdropDistributed(): Decimal {\n const rewardType =\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\n // totalDistributed is stored as a string, but in Rust it's VecMap<TypeName, u64>\n // If it's a single value, use it directly; otherwise search the array\n let totalDistributedValue = '0';\n\n if (typeof this.poolObject.totalDistributed === 'string') {\n // If it's stored as a simple string\n totalDistributedValue = this.poolObject.totalDistributed;\n } else if (Array.isArray(this.poolObject.totalDistributed)) {\n // If it's stored as an array of key-value pairs\n const entry = (this.poolObject.totalDistributed as unknown as StringMap[]).find(\n (item) => item.key === rewardType.slice(2),\n );\n totalDistributedValue = entry?.value || '0';\n }\n\n const totalDistributed = new Decimal(totalDistributedValue);\n // SUI has 9 decimals\n return totalDistributed.div(new Decimal(10).pow(9));\n }\n\n /**\n * Parse VecMap of position updates into structured entries\n */\n private parsePositionUpdateVecMap(vecMapField: any): PositionUpdateEntry[] {\n const contents = vecMapField?.fields?.contents ?? vecMapField?.contents ?? vecMapField;\n if (!Array.isArray(contents)) {\n return [];\n }\n\n return contents\n .map((entry: any) => {\n const ef = entry?.fields ?? entry ?? {};\n const key = this.getStringField(ef, 'key');\n const valueFields = ef.value?.fields ?? ef.value ?? {};\n return {\n key,\n value: {\n xtokensToAdd:\n this.getStringField(valueFields, 'xtokens_to_add') ||\n this.getStringField(valueFields, 'xtokensToAdd') ||\n '0',\n xtokensToRemove:\n this.getStringField(valueFields, 'xtokens_to_remove') ||\n this.getStringField(valueFields, 'xtokensToRemove') ||\n '0',\n },\n };\n })\n .filter((e: PositionUpdateEntry) => e.key);\n }\n\n /**\n * Parse pool object from blockchain response\n */\n parsePoolObject(response: any): AlphaVaultPoolObject {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n\n return {\n id: this.getStringField(fields, 'id'),\n xTokenSupply: this.getStringField(fields, 'xTokenSupply'),\n tokensInvested: this.getStringField(fields, 'tokensInvested'),\n unsuppliedBalance: this.getStringField(fields, 'unsupplied_balance'),\n claimableBalance: this.getStringField(fields, 'claimable_balance'),\n positions: (() => {\n const idVal = this.getNestedField(fields, 'positions.id');\n const sizeVal = this.getNestedField(fields, 'positions.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n recentlyUpdatedAlphafiReceipts: this.parsePositionUpdateVecMap(\n fields.recently_updated_alphafi_receipts || {},\n ),\n withdrawRequests: fields.withdraw_requests?.contents?.map((entry: any) => ({\n timestamp: entry.key,\n leftoverAmount: this.getNestedField(entry, 'value.leftover_amount'),\n totalAmountToWithdraw: this.getNestedField(entry, 'value.total_amount_to_withdraw'),\n })),\n feeCollected: this.getStringField(fields, 'fee_collected'),\n lastDistributionTime: this.getStringField(fields, 'last_distribution_time'),\n lastAutocompoundTime: this.getStringField(fields, 'last_autocompound_time'),\n lockingPeriod: this.getStringField(fields, 'locking_period'),\n timeFromLockingPeriodForUnstakingToStart: this.getStringField(\n fields,\n 'time_from_locking_period_for_unstaking_to_start',\n ),\n currentExchangeRate: this.getNestedField(fields, 'current_exchange_rate.value'),\n rewards: (() => {\n const idVal = this.getNestedField(fields, 'rewards.id');\n const sizeVal = this.getNestedField(fields, 'rewards.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n accRewardsPerXtoken: this.parseVecMap(fields.acc_rewards_per_xtoken).map(\n (item) =>\n ({\n key: item.key,\n value: item.value.value,\n }) as StringMap,\n ),\n totalDistributed: this.parseVecMap(fields.total_distributed || {}),\n depositFee: this.getStringField(fields, 'deposit_fee') || '0',\n depositFeeMaxCap: this.getStringField(fields, 'deposit_fee_max_cap') || '0',\n withdrawalFee: this.getStringField(fields, 'withdrawal_fee') || '0',\n withdrawFeeMaxCap: this.getStringField(fields, 'withdraw_fee_max_cap') || '0',\n feeAddress: this.getStringField(fields, 'fee_address'),\n isDepositPaused: this.getBooleanField(fields, 'is_deposit_paused', false),\n isWithdrawPaused: this.getBooleanField(fields, 'is_withdraw_paused', false),\n alphafiPartnerCap: this.getNestedField(fields, 'alphafi_partner_cap.id'),\n activeInvestorId: this.getStringField(fields, 'active_investor_id'),\n additionalFields: (() => {\n const idVal = this.getNestedField(fields, 'additional_fields.id');\n const sizeVal = this.getNestedField(fields, 'additional_fields.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n };\n }, 'Failed to parse AlphaVault pool object');\n }\n\n /**\n * Parse investor object from blockchain response\n */\n parseInvestorObject(response: any): AlphaVaultInvestorObject {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n const allowedCoinTypesArray = fields.allowed_coin_types_for_swap?.contents;\n const withdrawTicketsArray = fields.withdraw_tickets?.contents;\n\n const parseWithdrawTicketInner = (val: any): WithdrawalRequest | null => {\n const vf = val?.fields ?? val ?? {};\n return {\n owner: this.getStringField(vf, 'owner'),\n receiver: this.getStringField(vf, 'receiver'),\n shares: this.getStringField(vf, 'shares'),\n estimatedWithdrawAmount: this.getStringField(vf, 'estimated_withdraw_amount'),\n timestamp: this.getStringField(vf, 'timestamp'),\n sequenceNumber: this.getStringField(vf, 'sequence_number'),\n };\n };\n\n const withdrawTickets = withdrawTicketsArray\n .map((entry: any) => {\n const key = this.getNestedField(entry, 'key.@variant');\n const innerContents = entry.value?.contents;\n const value: WithdrawalRequest[] = innerContents\n .map((inner: any) => {\n const innerVal = parseWithdrawTicketInner(inner.value);\n return innerVal;\n })\n .filter((v: WithdrawalRequest | null): v is WithdrawalRequest => v !== null);\n return { key, value };\n })\n .filter(\n (\n v: { key: string; value: WithdrawalRequest[] } | null,\n ): v is {\n key: string;\n value: WithdrawalRequest[];\n } => v !== null,\n );\n\n return {\n id: this.getStringField(fields, 'id'),\n unsuppliedBalance: this.getStringField(fields, 'unsupplied_balance'),\n claimableBalance: this.getStringField(fields, 'claimable_balance'),\n alphalendPositionCap: {\n positionId: this.getNestedField(fields, 'alphalend_position_cap.id'),\n },\n curDebt: this.getStringField(fields, 'cur_debt'),\n currentDebtToSupplyRatio: this.getNestedField(fields, 'current_debt_to_supply_ratio.value'),\n borrowTokenToTokenRatio: this.getNestedField(fields, 'borrow_token_to_token_ratio.value'),\n safeBorrowPercentage: this.getStringField(fields, 'safe_borrow_percentage'),\n allowedCoinTypesForSwap: Array.isArray(allowedCoinTypesArray)\n ? allowedCoinTypesArray\n .map((entry: any) => {\n const ef = entry?.fields ?? entry ?? {};\n const value = ef.value;\n if (value !== true) return null;\n const keyName = ef.key?.fields?.name ?? ef.key?.name ?? ef.key;\n return typeof keyName === 'string' ? keyName : null;\n })\n .filter((v: string | null): v is string => Boolean(v))\n : [],\n minimumSwapAmount: this.getStringField(fields, 'minimum_swap_amount'),\n primaryMarketId: this.getStringField(fields, 'primary_market_id'),\n borrowMarketId: this.getStringField(fields, 'borrow_market_id'),\n resupplyMarketId: this.getStringField(fields, 'resupply_market_id'),\n freeRewards: (() => {\n const idVal = this.getNestedField(fields, 'free_rewards.id');\n const sizeVal = this.getNestedField(fields, 'free_rewards.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n withdrawReceiversAddress: this.getStringField(fields, 'withdraw_receivers_address'),\n withdrawTickets,\n totalPendingWithdrawals: this.getStringField(fields, 'total_pending_withdrawals'),\n performanceFee: this.getStringField(fields, 'performance_fee'),\n performanceFeeCap: this.getStringField(fields, 'performance_fee_cap'),\n additionalFields: (() => {\n const idVal = this.getNestedField(fields, 'additional_fields.id');\n const sizeVal = this.getNestedField(fields, 'additional_fields.size');\n return { id: String(idVal), size: String(sizeVal) };\n })(),\n };\n }, 'Failed to parse AlphaVault investor object');\n }\n\n /**\n * Parse parent pool object from blockchain response (not applicable for AlphaVault)\n */\n parseParentPoolObject(_response: any): never {\n throw new Error('AlphaVault strategy does not have parent pool objects');\n }\n\n /**\n * Parse legacy receipt objects from blockchain responses\n */\n parseLegacyReceiptObjects(responses: any[]): AlphaVaultLegacyReceiptObject[] {\n return responses.map((response, index) => {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n\n return {\n id: this.getStringField(fields, 'id'),\n imageUrl: this.getStringField(fields, 'image_url'),\n lastAccRewardPerXtoken: this.parseVecMap(fields.last_acc_reward_per_xtoken || {}),\n lockedBalance: {\n id: this.getNestedField(fields, 'locked_balance.id'),\n size: this.getNestedField(fields, 'locked_balance.size'),\n head: this.getNestedField(fields, 'locked_balance.head'),\n tail: this.getNestedField(fields, 'locked_balance.tail'),\n },\n name: this.getStringField(fields, 'name'),\n owner: this.getStringField(fields, 'owner'),\n pendingRewards: this.parseVecMap(fields.pending_rewards || {}),\n poolId: this.getStringField(fields, 'pool_id'),\n unlockedXtokens: this.getStringField(fields, 'unlocked_xtokens'),\n xTokenBalance: this.getStringField(fields, 'xTokenBalance'),\n };\n }, `Failed to parse AlphaVault receipt object at index ${index}`);\n });\n }\n\n /**\n * Parse AlphaVault receipt objects\n */\n parseReceiptObjects(responses: any[]): AlphaVaultReceiptObject[] {\n return responses.map((response, index) => {\n return this.safeParseObject(() => {\n const fields = this.extractFields(response);\n\n const parseTableInfo = (tableField: any): TableInfo => {\n return {\n id: this.getStringField(tableField, 'id'),\n size: this.getStringField(tableField, 'size'),\n };\n };\n\n const totalCollectedRewards = this.parseVecMap(fields.total_collected_rewards || {});\n\n // Parse withdraw_requests as VecMap<ID, UserWithdrawRequest> - matches Rust's structure\n const parseWithdrawRequestKV = (\n kv: any,\n ): {\n key: string;\n value: UserWithdrawRequest;\n } | null => {\n const key = this.getStringField(kv, 'key');\n const valFields = kv.value;\n const value: UserWithdrawRequest = {\n id: this.getStringField(valFields, 'id'),\n timeOfRequest: this.getStringField(valFields, 'time_of_request'),\n timeOfAcceptance: this.getStringField(valFields, 'time_of_acceptance'),\n timeOfClaim: this.getStringField(valFields, 'time_of_claim'),\n timeOfUnlock: this.getStringField(valFields, 'time_of_unlock'),\n status: this.getStringField(valFields, 'status'),\n tokenAmount: this.getStringField(valFields, 'token_amount'),\n };\n return { key, value };\n };\n\n const withdrawRequestsKV = fields.withdraw_requests.contents.map(parseWithdrawRequestKV);\n\n return {\n id: this.getStringField(fields, 'id'),\n alphafiReceiptId: this.getStringField(fields, 'alphafi_receipt_id'),\n poolId: this.getStringField(fields, 'pool_id'),\n coinType: this.getNestedField(fields, 'coin_type.name'),\n xTokens: this.getStringField(fields, 'xtokens'),\n withdrawRequests: withdrawRequestsKV as {\n key: string;\n value: UserWithdrawRequest;\n }[],\n allWithdrawals: parseTableInfo(fields.all_withdrawals),\n allDeposits: parseTableInfo(fields.all_deposits),\n lastAccRewardPerXtoken: this.parseVecMap(fields.last_acc_reward_per_xtoken).map(\n (item) =>\n ({\n key: item.key,\n value: item.value.value,\n }) as StringMap,\n ),\n pendingRewards: this.parseVecMap(fields.pending_rewards || {}),\n totalCollectedRewards,\n };\n }, `Failed to parse AlphaVault position object at index ${index}`);\n });\n }\n\n async deposit(tx: Transaction, options: DepositOptions) {\n const depositCoin = await this.context.blockchain.getCoinObject(\n tx,\n this.poolLabel.asset.type,\n options.address,\n options.amount,\n );\n\n const alphafiReceipts = await this.context.getAlphaFiReceipts(options.address);\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : null;\n\n if (alphafiReceipts.length === 0) {\n const alphafiReceiptObj = this.createAlphaFiReceipt(tx);\n\n // Convert alpha receipt to ember position if alpha receipt exists\n if (legacyReceipt) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n alphafiReceiptObj,\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n\n // Deposit to ember pool\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_deposit`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n alphafiReceiptObj,\n tx.object(this.poolLabel.poolId),\n depositCoin,\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHAFI_RECEIPT}::alphafi_receipt::transfer_receipt_to_new_owner`,\n arguments: [\n alphafiReceiptObj,\n tx.pure.address(options.address),\n tx.object(ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES),\n ],\n });\n } else {\n // Convert alpha receipt to ember position if needed\n if (legacyReceipt && this.receiptObjects.length === 0) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n tx.object(alphafiReceipts[0].id),\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n // Deposit to ember pool\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_deposit`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(alphafiReceipts[0].id),\n tx.object(this.poolLabel.poolId),\n depositCoin,\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n }\n }\n\n private async getAlphaTotalShares(alphafiReceipt: AlphaFiReceipt): Promise<string> {\n const entry = alphafiReceipt.positionPoolMap.find(\n (item) => item.value.poolId === this.poolLabel.poolId,\n );\n if (!entry) {\n console.error('no position for pool id found');\n return '0';\n }\n const position = await this.context.blockchain.getObject(entry.key);\n return (position as any).data?.content.fields.xtokens.toString();\n }\n\n async withdraw(tx: Transaction, options: WithdrawOptions) {\n const { amount, withdrawMax, address } = options;\n const alphafiReceipts = await this.context.getAlphaFiReceipts(address);\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : undefined;\n if (alphafiReceipts.length === 0 && !legacyReceipt) {\n throw new Error(`No AlphaFi receipts or receit found for address ${address}`);\n }\n\n // Calculate xtokens based on amount or withdrawMax\n let xtokens = new Decimal(amount)\n .div(new Decimal(this.poolObject.currentExchangeRate).div(1e18))\n .ceil()\n .toNumber();\n if (withdrawMax) {\n if (alphafiReceipts.length === 0 && legacyReceipt) {\n xtokens = Number(legacyReceipt.xTokenBalance);\n } else {\n const positionUpdate = this.poolObject.recentlyUpdatedAlphafiReceipts.find(\n (item) => item.key === alphafiReceipts[0].id,\n );\n xtokens =\n Number(await this.getAlphaTotalShares(alphafiReceipts[0])) -\n (positionUpdate\n ? Number(positionUpdate.value.xtokensToRemove) -\n Number(positionUpdate.value.xtokensToAdd)\n : 0);\n }\n }\n\n if (alphafiReceipts.length === 0) {\n // Create new AlphaFi receipt\n const alphafiReceiptObj = this.createAlphaFiReceipt(tx);\n if (!legacyReceipt) {\n throw new Error('No alphafi receipt and no alpha receipt found');\n }\n\n // Convert alpha receipt to ember position\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n alphafiReceiptObj,\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n\n // Initiate withdrawal\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_initiate_withdraw`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n alphafiReceiptObj,\n tx.object(this.poolLabel.poolId),\n tx.pure.u64(xtokens),\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHAFI_RECEIPT}::alphafi_receipt::transfer_receipt_to_new_owner`,\n arguments: [\n alphafiReceiptObj,\n tx.pure.address(address),\n tx.object(ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES),\n ],\n });\n } else {\n const existingReceipt = alphafiReceipts[0];\n const isPresent = this.receiptObjects.length > 0;\n\n if (!isPresent && !legacyReceipt) {\n throw new Error('No position or old alpha receipt found');\n }\n\n // Convert alpha receipt to ember position if needed\n if (!isPresent && legacyReceipt) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n tx.object(existingReceipt.id),\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n\n // Initiate withdrawal\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_initiate_withdraw`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(existingReceipt.id),\n tx.object(this.poolLabel.poolId),\n tx.pure.u64(xtokens),\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n }\n }\n\n async claimWithdraw(tx: Transaction, ticketId: string, address: string) {\n const alphafiReceipts = await this.context.getAlphaFiReceipts(address);\n\n if (alphafiReceipts.length === 0) {\n throw new Error('No Alphafi receipt found!');\n }\n\n const coin = tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::user_claim_withdraw`,\n typeArguments: [this.poolLabel.asset.type],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(alphafiReceipts[0].id),\n tx.object(this.poolLabel.poolId),\n tx.pure.id(ticketId),\n tx.object(CLOCK_PACKAGE_ID),\n ],\n });\n tx.transferObjects([coin], address);\n }\n\n async claimAirdrop(tx: Transaction, address: string, transferToWallet: boolean) {\n const alphalendClient = new AlphalendClient('mainnet', this.context.blockchain.suiClient);\n let airdropCoin;\n const [suiCoin, alphaCoin] = await this.context.getCoinsBySymbols(['SUI', 'ALPHA']);\n const airdropCoinMarketId = '1';\n const airdropCoinType = suiCoin.coinType;\n const legacyReceipt =\n this.legacyReceiptObjects.length > 0 ? this.legacyReceiptObjects[0] : undefined;\n const alphafiReceipts = await this.context.getAlphaFiReceipts(address);\n if (alphafiReceipts.length === 0) {\n // Create new AlphaFi receipt\n const alphafiReceiptObj = this.createAlphaFiReceipt(tx);\n\n if (!legacyReceipt) {\n throw new Error('No alphafi receipt and no alpha receipt found');\n }\n\n // Convert alpha receipt to ember position\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [alphaCoin.coinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n alphafiReceiptObj,\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n\n // Get user rewards\n airdropCoin = tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::get_user_rewards`,\n typeArguments: [alphaCoin.coinType, airdropCoinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n alphafiReceiptObj,\n tx.object(this.poolLabel.poolId),\n ],\n });\n\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHAFI_RECEIPT}::alphafi_receipt::transfer_receipt_to_new_owner`,\n arguments: [\n alphafiReceiptObj,\n tx.pure.address(address),\n tx.object(ALPHAFI_RECEIPT_WHITELISTED_ADDRESSES),\n ],\n });\n } else {\n const existingReceipt = alphafiReceipts[0];\n const isPresent = this.receiptObjects.length > 0;\n\n if (!isPresent && !legacyReceipt) {\n throw new Error('No position or old alpha receipt found');\n }\n\n // Convert alpha receipt to ember position if needed\n if (!isPresent && legacyReceipt) {\n tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::migrate_alpha_receipt_to_new_alpha_strategy`,\n typeArguments: [alphaCoin.coinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(this.poolLabel.poolId),\n tx.object(existingReceipt.id),\n tx.object(legacyReceipt.id),\n tx.object(POOLS.ALPHA_LEGACY),\n ],\n });\n }\n\n // Get user rewards\n airdropCoin = tx.moveCall({\n target: `${this.poolLabel.packageId}::alphafi_ember_pool::get_user_rewards`,\n typeArguments: [alphaCoin.coinType, airdropCoinType],\n arguments: [\n tx.object(VERSIONS.ALPHA_EMBER),\n tx.object(existingReceipt.id),\n tx.object(this.poolLabel.poolId),\n ],\n });\n }\n\n if (!transferToWallet) {\n await alphalendClient.updatePrices(tx, ['0x2::sui::SUI']);\n const alphalendConstants = getConstants('mainnet');\n const userPositionCapId = await getUserPositionCapId(\n this.context.blockchain.suiClient,\n 'mainnet',\n address,\n );\n if (!userPositionCapId) {\n const positionCap = alphalendClient.createPosition(tx);\n tx.moveCall({\n target: `${alphalendConstants.ALPHALEND_LATEST_PACKAGE_ID}::alpha_lending::add_collateral`,\n typeArguments: [airdropCoinType],\n arguments: [\n tx.object(alphalendConstants.LENDING_PROTOCOL_ID), // Protocol object\n positionCap, // Position capability\n tx.pure.u64(airdropCoinMarketId), // Market ID\n airdropCoin, // Coin to supply as collateral\n tx.object(alphalendConstants.SUI_CLOCK_OBJECT_ID), // Clock object\n ],\n });\n tx.transferObjects([positionCap], address);\n } else {\n const portfolio =\n await alphalendClient.getUserPortfolioFromPositionCapId(userPositionCapId);\n if (portfolio && portfolio.borrowedAmounts.has(Number(airdropCoinMarketId))) {\n airdropCoin = tx.moveCall({\n target: `${alphalendConstants.ALPHALEND_LATEST_PACKAGE_ID}::alpha_lending::repay`,\n typeArguments: [airdropCoinType],\n arguments: [\n tx.object(alphalendConstants.LENDING_PROTOCOL_ID), // Protocol object\n tx.object(userPositionCapId), // Position capability\n tx.pure.u64(airdropCoinMarketId), // Market ID\n airdropCoin, // Coin to repay with\n tx.object(alphalendConstants.SUI_CLOCK_OBJECT_ID), // Clock object\n ],\n });\n tx.transferObjects([airdropCoin], address);\n } else {\n tx.moveCall({\n target: `${alphalendConstants.ALPHALEND_LATEST_PACKAGE_ID}::alpha_lending::add_collateral`,\n typeArguments: [airdropCoinType],\n arguments: [\n tx.object(alphalendConstants.LENDING_PROTOCOL_ID), // Protocol object\n tx.object(userPositionCapId), // Position capability\n tx.pure.u64(airdropCoinMarketId), // Market ID\n airdropCoin, // Coin to supply as collateral\n tx.object(alphalendConstants.SUI_CLOCK_OBJECT_ID), // Clock object\n ],\n });\n }\n }\n } else {\n tx.transferObjects([airdropCoin], address);\n }\n\n return tx;\n }\n\n async claimRewards(_tx: Transaction, _alphaReceipt: TransactionResult) {\n return;\n }\n}\n\n// ===== Types =====\n\n/**\n * AlphaVault Pool object data structure\n */\n\ninterface TableInfo {\n id: string;\n size: string;\n}\n\ninterface PositionUpdateEntry {\n key: string; // Receipt ID\n value: {\n xtokensToAdd: string;\n xtokensToRemove: string;\n };\n}\n\nexport interface AlphaVaultPoolObject {\n id: string;\n xTokenSupply: string;\n tokensInvested: string;\n unsuppliedBalance: string;\n claimableBalance: string;\n positions: TableInfo;\n recentlyUpdatedAlphafiReceipts: PositionUpdateEntry[];\n withdrawRequests: {\n timestamp: string;\n leftoverAmount: string;\n totalAmountToWithdraw: string;\n }[];\n feeCollected: string;\n lastDistributionTime: string;\n lastAutocompoundTime: string;\n lockingPeriod: string;\n timeFromLockingPeriodForUnstakingToStart: string;\n currentExchangeRate: string;\n rewards: {\n id: string;\n size: string;\n };\n accRewardsPerXtoken: StringMap[];\n totalDistributed: StringMap[];\n depositFee: string;\n depositFeeMaxCap: string;\n withdrawalFee: string;\n withdrawFeeMaxCap: string;\n feeAddress: string;\n isDepositPaused: boolean;\n isWithdrawPaused: boolean;\n alphafiPartnerCap: string;\n activeInvestorId: string;\n additionalFields: TableInfo;\n}\n\n/**\n * AlphaVault Investor object data structure\n */\ninterface WithdrawalRequest {\n owner: string;\n receiver: string;\n shares: string;\n estimatedWithdrawAmount: string;\n timestamp: string;\n sequenceNumber: string;\n}\n\nexport interface AlphaVaultInvestorObject {\n id: string;\n unsuppliedBalance: string;\n claimableBalance: string;\n alphalendPositionCap: {\n positionId: string;\n };\n curDebt: string;\n allowedCoinTypesForSwap: string[];\n currentDebtToSupplyRatio: string;\n borrowTokenToTokenRatio: string;\n safeBorrowPercentage: string;\n minimumSwapAmount: string;\n primaryMarketId: string;\n borrowMarketId: string;\n resupplyMarketId: string;\n freeRewards: {\n id: string;\n size: string;\n };\n withdrawReceiversAddress: string;\n withdrawTickets: Array<{\n key: string;\n value: WithdrawalRequest[];\n }>;\n totalPendingWithdrawals: string;\n performanceFee: string;\n performanceFeeCap: string;\n additionalFields: TableInfo;\n}\n\n/**\n * UserWithdrawRequest - Used in AlphaVaultPositionObject's withdraw_requests\n * Matches Rust's UserWithdrawRequest struct\n */\nexport interface UserWithdrawRequest {\n id: string;\n timeOfRequest: string;\n timeOfAcceptance: string;\n timeOfClaim: string;\n timeOfUnlock: string;\n status: string; // 0 for requested, 1 for accepted, 2 for claimed\n tokenAmount: string;\n}\n\n/**\n * AlphaVault Legacy Receipt object data structure\n */\nexport interface AlphaVaultLegacyReceiptObject {\n id: string;\n imageUrl: string;\n lastAccRewardPerXtoken: StringMap[];\n lockedBalance: {\n id: string;\n size: string;\n head: string;\n tail: string;\n };\n name: string;\n owner: string;\n pendingRewards: StringMap[];\n poolId: string;\n unlockedXtokens: string;\n xTokenBalance: string;\n}\n\n/**\n * AlphaVault Receipt object data structure\n */\nexport interface AlphaVaultReceiptObject {\n id: string;\n alphafiReceiptId: string;\n poolId: string;\n coinType: string;\n xTokens: string;\n withdrawRequests: {\n key: string;\n value: UserWithdrawRequest;\n }[];\n allWithdrawals: TableInfo;\n allDeposits: TableInfo;\n lastAccRewardPerXtoken: StringMap[];\n pendingRewards: StringMap[];\n totalCollectedRewards: StringMap[];\n}\n\n// ===== Pool Label =====\n\n/**\n * AlphaVault Pool Label - Configuration for AlphaVault strategy pools\n */\nexport interface AlphaVaultPoolLabel {\n poolId: string;\n investorId: string;\n packageId: string;\n packageNumber: number;\n strategyType: 'AlphaVault';\n parentProtocol: ProtocolType;\n receipt: StringMap;\n asset: StringMap;\n events: {\n autocompoundEventType: string;\n liquidityChangeEventType: string;\n withdrawV2EventType: string;\n afterTransactionEventType: string;\n airdropAddEventType: string;\n };\n isActive: boolean;\n poolName: string;\n isNative: boolean;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autobalanceLp.d.ts","sourceRoot":"","sources":["../../../src/strategies/autobalanceLp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ1E;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY,CACrD,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC7B,0BAA0B,CAC3B;IACC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,OAAO,CAAkB;gBAG/B,SAAS,EAAE,sBAAsB,EACjC,UAAU,EAAE,GAAG,EACf,cAAc,EAAE,GAAG,EACnB,gBAAgB,EAAE,GAAG,EACrB,OAAO,EAAE,eAAe;IAU1B,YAAY,IAAI,sBAAsB;IAItC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI;IAIrC;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,eAAe;IAS/C;;;OAGG;IACH,YAAY,IAAI,OAAO;IAWvB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"autobalanceLp.d.ts","sourceRoot":"","sources":["../../../src/strategies/autobalanceLp.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,9 @@ class AutobalanceLpStrategy extends strategy_js_1.BaseStrategy {
|
|
|
72
72
|
]);
|
|
73
73
|
return {
|
|
74
74
|
poolId: this.poolLabel.poolId,
|
|
75
|
+
strategyType: this.poolLabel.strategyType,
|
|
76
|
+
coinAType: this.poolLabel.assetA.type,
|
|
77
|
+
coinBType: this.poolLabel.assetB.type,
|
|
75
78
|
poolName: this.poolLabel.poolName,
|
|
76
79
|
apr,
|
|
77
80
|
tvl: {
|