@kestrelfi/lyc-sdk 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/.env.example +11 -0
- package/README.md +207 -0
- package/dist/sdks/long-yield-carry/scripts/asyncBurn.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/asyncBurn.js +117 -0
- package/dist/sdks/long-yield-carry/scripts/burnToken.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/burnToken.js +98 -0
- package/dist/sdks/long-yield-carry/scripts/claimIncentives.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/claimIncentives.js +108 -0
- package/dist/sdks/long-yield-carry/scripts/closeCpiPlans.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/closeCpiPlans.js +93 -0
- package/dist/sdks/long-yield-carry/scripts/collectInterest.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/collectInterest.js +164 -0
- package/dist/sdks/long-yield-carry/scripts/collectProtocolFees.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/collectProtocolFees.js +120 -0
- package/dist/sdks/long-yield-carry/scripts/computeOptimalAllocations.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/computeOptimalAllocations.js +84 -0
- package/dist/sdks/long-yield-carry/scripts/createToken.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/createToken.js +76 -0
- package/dist/sdks/long-yield-carry/scripts/createTokenLendingPosition.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/createTokenLendingPosition.js +157 -0
- package/dist/sdks/long-yield-carry/scripts/createYieldingBank.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/createYieldingBank.js +69 -0
- package/dist/sdks/long-yield-carry/scripts/decreaseCarryPositions.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/decreaseCarryPositions.js +247 -0
- package/dist/sdks/long-yield-carry/scripts/depositUnlentCollateral.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/depositUnlentCollateral.js +90 -0
- package/dist/sdks/long-yield-carry/scripts/emergency/deleverageAll.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/emergency/deleverageAll.js +202 -0
- package/dist/sdks/long-yield-carry/scripts/emergency/triggerCircuitBreaker.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/emergency/triggerCircuitBreaker.js +68 -0
- package/dist/sdks/long-yield-carry/scripts/env.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/env.js +8 -0
- package/dist/sdks/long-yield-carry/scripts/findTxs.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/findTxs.js +143 -0
- package/dist/sdks/long-yield-carry/scripts/increaseCarryPositions.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/increaseCarryPositions.js +112 -0
- package/dist/sdks/long-yield-carry/scripts/inspect/format.d.ts +13 -0
- package/dist/sdks/long-yield-carry/scripts/inspect/format.js +363 -0
- package/dist/sdks/long-yield-carry/scripts/inspect.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/inspect.js +108 -0
- package/dist/sdks/long-yield-carry/scripts/localUtils.d.ts +53 -0
- package/dist/sdks/long-yield-carry/scripts/localUtils.js +191 -0
- package/dist/sdks/long-yield-carry/scripts/mintToken.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/mintToken.js +103 -0
- package/dist/sdks/long-yield-carry/scripts/processAsyncBurns.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/processAsyncBurns.js +76 -0
- package/dist/sdks/long-yield-carry/scripts/rebalanceToken.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/rebalanceToken.js +210 -0
- package/dist/sdks/long-yield-carry/scripts/rebalanceYieldingBank.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/rebalanceYieldingBank.js +149 -0
- package/dist/sdks/long-yield-carry/scripts/recollateralizeLoss.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/recollateralizeLoss.js +64 -0
- package/dist/sdks/long-yield-carry/scripts/refresh.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/refresh.js +101 -0
- package/dist/sdks/long-yield-carry/scripts/updateFees.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/updateFees.js +369 -0
- package/dist/sdks/long-yield-carry/scripts/updateGeneralLut.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/updateGeneralLut.js +27 -0
- package/dist/sdks/long-yield-carry/scripts/updateLendingPositionConfig.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/updateLendingPositionConfig.js +127 -0
- package/dist/sdks/long-yield-carry/scripts/updateTokenLuts.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/updateTokenLuts.js +27 -0
- package/dist/sdks/long-yield-carry/scripts/updateTokenMetadata.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/updateTokenMetadata.js +194 -0
- package/dist/sdks/long-yield-carry/scripts/updateYieldingBankConfig.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/updateYieldingBankConfig.js +84 -0
- package/dist/sdks/long-yield-carry/scripts/withdrawUnlentCollateral.d.ts +1 -0
- package/dist/sdks/long-yield-carry/scripts/withdrawUnlentCollateral.js +140 -0
- package/dist/sdks/long-yield-carry/src/client/account.d.ts +152 -0
- package/dist/sdks/long-yield-carry/src/client/account.js +349 -0
- package/dist/sdks/long-yield-carry/src/client/builders/args.d.ts +299 -0
- package/dist/sdks/long-yield-carry/src/client/builders/args.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/builders/asyncBurnBuilder.d.ts +20 -0
- package/dist/sdks/long-yield-carry/src/client/builders/asyncBurnBuilder.js +212 -0
- package/dist/sdks/long-yield-carry/src/client/builders/base.d.ts +77 -0
- package/dist/sdks/long-yield-carry/src/client/builders/base.js +191 -0
- package/dist/sdks/long-yield-carry/src/client/builders/burnTokenBuilder.d.ts +18 -0
- package/dist/sdks/long-yield-carry/src/client/builders/burnTokenBuilder.js +165 -0
- package/dist/sdks/long-yield-carry/src/client/builders/claimIncentivesBuilder.d.ts +9 -0
- package/dist/sdks/long-yield-carry/src/client/builders/claimIncentivesBuilder.js +135 -0
- package/dist/sdks/long-yield-carry/src/client/builders/collectFeesBuilder.d.ts +14 -0
- package/dist/sdks/long-yield-carry/src/client/builders/collectFeesBuilder.js +50 -0
- package/dist/sdks/long-yield-carry/src/client/builders/collectInterestBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/collectInterestBuilder.js +86 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createCpiPlanBuilder.d.ts +6 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createCpiPlanBuilder.js +22 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createTokenBuilder.d.ts +7 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createTokenBuilder.js +64 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createTokenLendingPositionBuilder.d.ts +10 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createTokenLendingPositionBuilder.js +138 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createYieldingBankAllocationBuilder.d.ts +7 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createYieldingBankAllocationBuilder.js +29 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createYieldingBankBuilder.d.ts +7 -0
- package/dist/sdks/long-yield-carry/src/client/builders/createYieldingBankBuilder.js +39 -0
- package/dist/sdks/long-yield-carry/src/client/builders/decreaseCarryPositionBuilder.d.ts +30 -0
- package/dist/sdks/long-yield-carry/src/client/builders/decreaseCarryPositionBuilder.js +99 -0
- package/dist/sdks/long-yield-carry/src/client/builders/depositUnlentCollateralBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/depositUnlentCollateralBuilder.js +64 -0
- package/dist/sdks/long-yield-carry/src/client/builders/increaseCarryPositionBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/increaseCarryPositionBuilder.js +73 -0
- package/dist/sdks/long-yield-carry/src/client/builders/index.d.ts +28 -0
- package/dist/sdks/long-yield-carry/src/client/builders/index.js +62 -0
- package/dist/sdks/long-yield-carry/src/client/builders/mintTokenBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/mintTokenBuilder.js +95 -0
- package/dist/sdks/long-yield-carry/src/client/builders/rebalanceTokenBuilder.d.ts +11 -0
- package/dist/sdks/long-yield-carry/src/client/builders/rebalanceTokenBuilder.js +255 -0
- package/dist/sdks/long-yield-carry/src/client/builders/rebalanceYieldingBankBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/rebalanceYieldingBankBuilder.js +75 -0
- package/dist/sdks/long-yield-carry/src/client/builders/recollateralizeLossBuilder.d.ts +12 -0
- package/dist/sdks/long-yield-carry/src/client/builders/recollateralizeLossBuilder.js +220 -0
- package/dist/sdks/long-yield-carry/src/client/builders/refreshTokenStateBuilder.d.ts +9 -0
- package/dist/sdks/long-yield-carry/src/client/builders/refreshTokenStateBuilder.js +112 -0
- package/dist/sdks/long-yield-carry/src/client/builders/refreshTokensBuilder.d.ts +9 -0
- package/dist/sdks/long-yield-carry/src/client/builders/refreshTokensBuilder.js +59 -0
- package/dist/sdks/long-yield-carry/src/client/builders/refreshYieldingBankBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/refreshYieldingBankBuilder.js +29 -0
- package/dist/sdks/long-yield-carry/src/client/builders/resetTokenBurnRateLimitBuilder.d.ts +7 -0
- package/dist/sdks/long-yield-carry/src/client/builders/resetTokenBurnRateLimitBuilder.js +19 -0
- package/dist/sdks/long-yield-carry/src/client/builders/setTokenCircuitBreakerBuilder.d.ts +11 -0
- package/dist/sdks/long-yield-carry/src/client/builders/setTokenCircuitBreakerBuilder.js +31 -0
- package/dist/sdks/long-yield-carry/src/client/builders/setYieldingBankCircuitBreakerBuilder.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/client/builders/setYieldingBankCircuitBreakerBuilder.js +28 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateLendingPositionConfigBuilder.d.ts +10 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateLendingPositionConfigBuilder.js +30 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateTokenConfigurationBuilder.d.ts +11 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateTokenConfigurationBuilder.js +47 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateTokenMetadataBuilder.d.ts +7 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateTokenMetadataBuilder.js +24 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateYieldingBankConfigBuilder.d.ts +10 -0
- package/dist/sdks/long-yield-carry/src/client/builders/updateYieldingBankConfigBuilder.js +31 -0
- package/dist/sdks/long-yield-carry/src/client/builders/utils.d.ts +4 -0
- package/dist/sdks/long-yield-carry/src/client/builders/utils.js +20 -0
- package/dist/sdks/long-yield-carry/src/client/client.d.ts +115 -0
- package/dist/sdks/long-yield-carry/src/client/client.js +166 -0
- package/dist/sdks/long-yield-carry/src/client/externalLiquidityResolver.d.ts +13 -0
- package/dist/sdks/long-yield-carry/src/client/externalLiquidityResolver.js +34 -0
- package/dist/sdks/long-yield-carry/src/client/index.d.ts +10 -0
- package/dist/sdks/long-yield-carry/src/client/index.js +33 -0
- package/dist/sdks/long-yield-carry/src/client/lendingPlatformClients.d.ts +19 -0
- package/dist/sdks/long-yield-carry/src/client/lendingPlatformClients.js +33 -0
- package/dist/sdks/long-yield-carry/src/client/pda.d.ts +33 -0
- package/dist/sdks/long-yield-carry/src/client/pda.js +79 -0
- package/dist/sdks/long-yield-carry/src/client/plans/collectInterest.d.ts +24 -0
- package/dist/sdks/long-yield-carry/src/client/plans/collectInterest.js +150 -0
- package/dist/sdks/long-yield-carry/src/client/plans/decreaseCarryPosition.d.ts +12 -0
- package/dist/sdks/long-yield-carry/src/client/plans/decreaseCarryPosition.js +140 -0
- package/dist/sdks/long-yield-carry/src/client/routes/collectInterest.d.ts +13 -0
- package/dist/sdks/long-yield-carry/src/client/routes/collectInterest.js +39 -0
- package/dist/sdks/long-yield-carry/src/client/transaction.d.ts +41 -0
- package/dist/sdks/long-yield-carry/src/client/transaction.js +55 -0
- package/dist/sdks/long-yield-carry/src/client/types/builders.d.ts +18 -0
- package/dist/sdks/long-yield-carry/src/client/types/builders.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/types/enums.d.ts +22 -0
- package/dist/sdks/long-yield-carry/src/client/types/enums.js +48 -0
- package/dist/sdks/long-yield-carry/src/client/types/general.d.ts +98 -0
- package/dist/sdks/long-yield-carry/src/client/types/general.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/types/index.d.ts +6 -0
- package/dist/sdks/long-yield-carry/src/client/types/index.js +22 -0
- package/dist/sdks/long-yield-carry/src/client/types/ix.d.ts +352 -0
- package/dist/sdks/long-yield-carry/src/client/types/ix.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/collectInterest.d.ts +91 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/collectInterest.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/common.d.ts +28 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/common.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/decreaseCarryPosition.d.ts +128 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/decreaseCarryPosition.js +2 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/index.d.ts +3 -0
- package/dist/sdks/long-yield-carry/src/client/types/planTypes/index.js +19 -0
- package/dist/sdks/long-yield-carry/src/client/types/tx.d.ts +339 -0
- package/dist/sdks/long-yield-carry/src/client/types/tx.js +2 -0
- package/dist/sdks/long-yield-carry/src/constants/configs/allocations.d.ts +3 -0
- package/dist/sdks/long-yield-carry/src/constants/configs/allocations.js +23 -0
- package/dist/sdks/long-yield-carry/src/constants/configs/carryTradePresets.d.ts +58 -0
- package/dist/sdks/long-yield-carry/src/constants/configs/carryTradePresets.js +116 -0
- package/dist/sdks/long-yield-carry/src/constants/configs/index.d.ts +2 -0
- package/dist/sdks/long-yield-carry/src/constants/configs/index.js +18 -0
- package/dist/sdks/long-yield-carry/src/constants/general.d.ts +70 -0
- package/dist/sdks/long-yield-carry/src/constants/general.js +107 -0
- package/dist/sdks/long-yield-carry/src/constants/index.d.ts +3 -0
- package/dist/sdks/long-yield-carry/src/constants/index.js +19 -0
- package/dist/sdks/long-yield-carry/src/constants/lycTokenMetadata.d.ts +36 -0
- package/dist/sdks/long-yield-carry/src/constants/lycTokenMetadata.js +41 -0
- package/dist/sdks/long-yield-carry/src/decoders/decodeTransaction.d.ts +86 -0
- package/dist/sdks/long-yield-carry/src/decoders/decodeTransaction.js +230 -0
- package/dist/sdks/long-yield-carry/src/decoders/discriminators.d.ts +8 -0
- package/dist/sdks/long-yield-carry/src/decoders/discriminators.js +11 -0
- package/dist/sdks/long-yield-carry/src/decoders/idlAccounts.d.ts +29 -0
- package/dist/sdks/long-yield-carry/src/decoders/idlAccounts.js +57 -0
- package/dist/sdks/long-yield-carry/src/decoders/index.d.ts +6 -0
- package/dist/sdks/long-yield-carry/src/decoders/index.js +14 -0
- package/dist/sdks/long-yield-carry/src/decoders/innerCpis.d.ts +68 -0
- package/dist/sdks/long-yield-carry/src/decoders/innerCpis.js +225 -0
- package/dist/sdks/long-yield-carry/src/decoders/lycInstructionNames.d.ts +6 -0
- package/dist/sdks/long-yield-carry/src/decoders/lycInstructionNames.js +73 -0
- package/dist/sdks/long-yield-carry/src/decoders/programIds.d.ts +4 -0
- package/dist/sdks/long-yield-carry/src/decoders/programIds.js +11 -0
- package/dist/sdks/long-yield-carry/src/decoders/solana.d.ts +7 -0
- package/dist/sdks/long-yield-carry/src/decoders/solana.js +30 -0
- package/dist/sdks/long-yield-carry/src/decoders/transactionPayload.d.ts +41 -0
- package/dist/sdks/long-yield-carry/src/decoders/transactionPayload.js +6 -0
- package/dist/sdks/long-yield-carry/src/decoders/types.d.ts +58 -0
- package/dist/sdks/long-yield-carry/src/decoders/types.js +2 -0
- package/dist/sdks/long-yield-carry/src/errors.d.ts +69 -0
- package/dist/sdks/long-yield-carry/src/errors.js +183 -0
- package/dist/sdks/long-yield-carry/src/idl/long_yield_carry.d.ts +7327 -0
- package/dist/sdks/long-yield-carry/src/idl/long_yield_carry.js +7323 -0
- package/dist/sdks/long-yield-carry/src/index.d.ts +10 -0
- package/dist/sdks/long-yield-carry/src/index.js +25 -0
- package/dist/sdks/long-yield-carry/src/metrics/index.d.ts +1 -0
- package/dist/sdks/long-yield-carry/src/metrics/index.js +17 -0
- package/dist/sdks/long-yield-carry/src/metrics/protocolMetrics.d.ts +276 -0
- package/dist/sdks/long-yield-carry/src/metrics/protocolMetrics.js +547 -0
- package/dist/sdks/long-yield-carry/src/models/index.d.ts +3 -0
- package/dist/sdks/long-yield-carry/src/models/index.js +7 -0
- package/dist/sdks/long-yield-carry/src/models/lycToken.d.ts +156 -0
- package/dist/sdks/long-yield-carry/src/models/lycToken.js +288 -0
- package/dist/sdks/long-yield-carry/src/models/yieldingBank.d.ts +52 -0
- package/dist/sdks/long-yield-carry/src/models/yieldingBank.js +109 -0
- package/dist/sdks/long-yield-carry/src/services/allocation/allocationService.d.ts +106 -0
- package/dist/sdks/long-yield-carry/src/services/allocation/allocationService.js +589 -0
- package/dist/sdks/long-yield-carry/src/services/allocation/index.d.ts +2 -0
- package/dist/sdks/long-yield-carry/src/services/allocation/index.js +18 -0
- package/dist/sdks/long-yield-carry/src/services/allocation/types.d.ts +25 -0
- package/dist/sdks/long-yield-carry/src/services/allocation/types.js +2 -0
- package/dist/sdks/long-yield-carry/src/services/carry/carryAllocationConfig.d.ts +103 -0
- package/dist/sdks/long-yield-carry/src/services/carry/carryAllocationConfig.js +146 -0
- package/dist/sdks/long-yield-carry/src/services/carry/index.d.ts +2 -0
- package/dist/sdks/long-yield-carry/src/services/carry/index.js +18 -0
- package/dist/sdks/long-yield-carry/src/services/carry/lycLendingPositionManager.d.ts +39 -0
- package/dist/sdks/long-yield-carry/src/services/carry/lycLendingPositionManager.js +100 -0
- package/dist/sdks/long-yield-carry/src/services/index.d.ts +5 -0
- package/dist/sdks/long-yield-carry/src/services/index.js +21 -0
- package/dist/sdks/long-yield-carry/src/services/lendingPosition/index.d.ts +2 -0
- package/dist/sdks/long-yield-carry/src/services/lendingPosition/index.js +5 -0
- package/dist/sdks/long-yield-carry/src/services/lendingPosition/lendingPositionService.d.ts +88 -0
- package/dist/sdks/long-yield-carry/src/services/lendingPosition/lendingPositionService.js +229 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/index.d.ts +2 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/index.js +18 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/token/index.d.ts +1 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/token/index.js +17 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/token/tokenRebalanceService.d.ts +51 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/token/tokenRebalanceService.js +99 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/index.d.ts +3 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/index.js +21 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/planner.d.ts +68 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/planner.js +181 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/strategy.d.ts +26 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/strategy.js +26 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/types.d.ts +40 -0
- package/dist/sdks/long-yield-carry/src/services/rebalance/yieldingBank/types.js +2 -0
- package/dist/sdks/long-yield-carry/src/services/redemption/index.d.ts +2 -0
- package/dist/sdks/long-yield-carry/src/services/redemption/index.js +5 -0
- package/dist/sdks/long-yield-carry/src/services/redemption/redemptionService.d.ts +139 -0
- package/dist/sdks/long-yield-carry/src/services/redemption/redemptionService.js +532 -0
- package/dist/sdks/long-yield-carry/src/types/enriched.d.ts +168 -0
- package/dist/sdks/long-yield-carry/src/types/enriched.js +2 -0
- package/dist/sdks/long-yield-carry/src/types/index.d.ts +1 -0
- package/dist/sdks/long-yield-carry/src/types/index.js +17 -0
- package/dist/sdks/long-yield-carry/src/utils/cache.d.ts +4 -0
- package/dist/sdks/long-yield-carry/src/utils/cache.js +10 -0
- package/dist/sdks/long-yield-carry/src/utils/data.d.ts +12 -0
- package/dist/sdks/long-yield-carry/src/utils/data.js +59 -0
- package/dist/sdks/long-yield-carry/src/utils/enrichment.d.ts +5 -0
- package/dist/sdks/long-yield-carry/src/utils/enrichment.js +244 -0
- package/dist/sdks/long-yield-carry/src/utils/feeDripMetrics.d.ts +36 -0
- package/dist/sdks/long-yield-carry/src/utils/feeDripMetrics.js +93 -0
- package/dist/sdks/long-yield-carry/src/utils/general.d.ts +28 -0
- package/dist/sdks/long-yield-carry/src/utils/general.js +47 -0
- package/dist/sdks/long-yield-carry/src/utils/index.d.ts +13 -0
- package/dist/sdks/long-yield-carry/src/utils/index.js +29 -0
- package/dist/sdks/long-yield-carry/src/utils/ix.d.ts +83 -0
- package/dist/sdks/long-yield-carry/src/utils/ix.js +165 -0
- package/dist/sdks/long-yield-carry/src/utils/lendingPosition.d.ts +68 -0
- package/dist/sdks/long-yield-carry/src/utils/lendingPosition.js +105 -0
- package/dist/sdks/long-yield-carry/src/utils/lookupTables.d.ts +55 -0
- package/dist/sdks/long-yield-carry/src/utils/lookupTables.js +216 -0
- package/dist/sdks/long-yield-carry/src/utils/lycData.d.ts +66 -0
- package/dist/sdks/long-yield-carry/src/utils/lycData.js +211 -0
- package/dist/sdks/long-yield-carry/src/utils/timelock.d.ts +19 -0
- package/dist/sdks/long-yield-carry/src/utils/timelock.js +37 -0
- package/dist/sdks/long-yield-carry/src/utils/tokenFeeMath.d.ts +11 -0
- package/dist/sdks/long-yield-carry/src/utils/tokenFeeMath.js +24 -0
- package/dist/sdks/long-yield-carry/src/utils/transactions.d.ts +20 -0
- package/dist/sdks/long-yield-carry/src/utils/transactions.js +72 -0
- package/dist/sdks/long-yield-carry/src/utils/yieldingBank.d.ts +24 -0
- package/dist/sdks/long-yield-carry/src/utils/yieldingBank.js +36 -0
- package/dist/shared/common/src/constants/accountMetas.d.ts +3 -0
- package/dist/shared/common/src/constants/accountMetas.js +9 -0
- package/dist/shared/common/src/constants/general.d.ts +21 -0
- package/dist/shared/common/src/constants/general.js +30 -0
- package/dist/shared/common/src/constants/generated/cpi.d.ts +23 -0
- package/dist/shared/common/src/constants/generated/cpi.js +28 -0
- package/dist/shared/common/src/constants/generated/index.d.ts +1 -0
- package/dist/shared/common/src/constants/generated/index.js +17 -0
- package/dist/shared/common/src/constants/index.d.ts +3 -0
- package/dist/shared/common/src/constants/index.js +19 -0
- package/dist/shared/common/src/index.d.ts +4 -0
- package/dist/shared/common/src/index.js +20 -0
- package/dist/shared/common/src/services/baseAccountClient.d.ts +22 -0
- package/dist/shared/common/src/services/baseAccountClient.js +38 -0
- package/dist/shared/common/src/services/baseIxBuilderService.d.ts +27 -0
- package/dist/shared/common/src/services/baseIxBuilderService.js +48 -0
- package/dist/shared/common/src/services/dataCache.d.ts +41 -0
- package/dist/shared/common/src/services/dataCache.js +130 -0
- package/dist/shared/common/src/services/index.d.ts +8 -0
- package/dist/shared/common/src/services/index.js +24 -0
- package/dist/shared/common/src/services/lutManager.d.ts +31 -0
- package/dist/shared/common/src/services/lutManager.js +133 -0
- package/dist/shared/common/src/services/mints/defaults.d.ts +2 -0
- package/dist/shared/common/src/services/mints/defaults.js +152 -0
- package/dist/shared/common/src/services/mints/index.d.ts +4 -0
- package/dist/shared/common/src/services/mints/index.js +20 -0
- package/dist/shared/common/src/services/mints/registry.d.ts +70 -0
- package/dist/shared/common/src/services/mints/registry.js +117 -0
- package/dist/shared/common/src/services/mints/symbols.d.ts +6 -0
- package/dist/shared/common/src/services/mints/symbols.js +13 -0
- package/dist/shared/common/src/services/mints/types.d.ts +30 -0
- package/dist/shared/common/src/services/mints/types.js +2 -0
- package/dist/shared/common/src/services/swap/index.d.ts +4 -0
- package/dist/shared/common/src/services/swap/index.js +20 -0
- package/dist/shared/common/src/services/swap/routableSwapClient.d.ts +36 -0
- package/dist/shared/common/src/services/swap/routableSwapClient.js +2 -0
- package/dist/shared/common/src/services/swap/swapClientBase.d.ts +45 -0
- package/dist/shared/common/src/services/swap/swapClientBase.js +2 -0
- package/dist/shared/common/src/services/swap/swapRouting.d.ts +13 -0
- package/dist/shared/common/src/services/swap/swapRouting.js +28 -0
- package/dist/shared/common/src/services/swap/types.d.ts +77 -0
- package/dist/shared/common/src/services/swap/types.js +2 -0
- package/dist/shared/common/src/services/token/index.d.ts +2 -0
- package/dist/shared/common/src/services/token/index.js +18 -0
- package/dist/shared/common/src/services/token/tokenProtocolClientBase.d.ts +51 -0
- package/dist/shared/common/src/services/token/tokenProtocolClientBase.js +2 -0
- package/dist/shared/common/src/services/token/types.d.ts +19 -0
- package/dist/shared/common/src/services/token/types.js +2 -0
- package/dist/shared/common/src/services/transactionSender.d.ts +24 -0
- package/dist/shared/common/src/services/transactionSender.js +30 -0
- package/dist/shared/common/src/types/cpi.d.ts +34 -0
- package/dist/shared/common/src/types/cpi.js +8 -0
- package/dist/shared/common/src/types/enums.d.ts +59 -0
- package/dist/shared/common/src/types/enums.js +122 -0
- package/dist/shared/common/src/types/general.d.ts +38 -0
- package/dist/shared/common/src/types/general.js +2 -0
- package/dist/shared/common/src/types/index.d.ts +4 -0
- package/dist/shared/common/src/types/index.js +20 -0
- package/dist/shared/common/src/types/solana.d.ts +24 -0
- package/dist/shared/common/src/types/solana.js +2 -0
- package/dist/shared/common/src/utils/accounts/index.d.ts +5 -0
- package/dist/shared/common/src/utils/accounts/index.js +21 -0
- package/dist/shared/common/src/utils/accounts/meta.d.ts +21 -0
- package/dist/shared/common/src/utils/accounts/meta.js +27 -0
- package/dist/shared/common/src/utils/accounts/pda.d.ts +2 -0
- package/dist/shared/common/src/utils/accounts/pda.js +17 -0
- package/dist/shared/common/src/utils/accounts/roles.d.ts +26 -0
- package/dist/shared/common/src/utils/accounts/roles.js +54 -0
- package/dist/shared/common/src/utils/accounts/rpc.d.ts +8 -0
- package/dist/shared/common/src/utils/accounts/rpc.js +30 -0
- package/dist/shared/common/src/utils/accounts/splBalances.d.ts +15 -0
- package/dist/shared/common/src/utils/accounts/splBalances.js +52 -0
- package/dist/shared/common/src/utils/anchor.d.ts +17 -0
- package/dist/shared/common/src/utils/anchor.js +29 -0
- package/dist/shared/common/src/utils/asyncConcurrency.d.ts +5 -0
- package/dist/shared/common/src/utils/asyncConcurrency.js +28 -0
- package/dist/shared/common/src/utils/compat.d.ts +46 -0
- package/dist/shared/common/src/utils/compat.js +72 -0
- package/dist/shared/common/src/utils/cpi/args.d.ts +69 -0
- package/dist/shared/common/src/utils/cpi/args.js +100 -0
- package/dist/shared/common/src/utils/cpi/index.d.ts +2 -0
- package/dist/shared/common/src/utils/cpi/index.js +18 -0
- package/dist/shared/common/src/utils/cpi/refs.d.ts +122 -0
- package/dist/shared/common/src/utils/cpi/refs.js +234 -0
- package/dist/shared/common/src/utils/data.d.ts +20 -0
- package/dist/shared/common/src/utils/data.js +27 -0
- package/dist/shared/common/src/utils/general.d.ts +24 -0
- package/dist/shared/common/src/utils/general.js +95 -0
- package/dist/shared/common/src/utils/index.d.ts +22 -0
- package/dist/shared/common/src/utils/index.js +38 -0
- package/dist/shared/common/src/utils/instruction.d.ts +74 -0
- package/dist/shared/common/src/utils/instruction.js +147 -0
- package/dist/shared/common/src/utils/jito.d.ts +113 -0
- package/dist/shared/common/src/utils/jito.js +178 -0
- package/dist/shared/common/src/utils/json.d.ts +5 -0
- package/dist/shared/common/src/utils/json.js +25 -0
- package/dist/shared/common/src/utils/jsonRpcFetch.d.ts +21 -0
- package/dist/shared/common/src/utils/jsonRpcFetch.js +134 -0
- package/dist/shared/common/src/utils/metadata.d.ts +107 -0
- package/dist/shared/common/src/utils/metadata.js +194 -0
- package/dist/shared/common/src/utils/numbers.d.ts +72 -0
- package/dist/shared/common/src/utils/numbers.js +193 -0
- package/dist/shared/common/src/utils/priorityFee.d.ts +18 -0
- package/dist/shared/common/src/utils/priorityFee.js +63 -0
- package/dist/shared/common/src/utils/retry.d.ts +20 -0
- package/dist/shared/common/src/utils/retry.js +69 -0
- package/dist/shared/common/src/utils/rpc.d.ts +40 -0
- package/dist/shared/common/src/utils/rpc.js +130 -0
- package/dist/shared/common/src/utils/solana.d.ts +23 -0
- package/dist/shared/common/src/utils/solana.js +61 -0
- package/dist/shared/common/src/utils/timeSeries.d.ts +18 -0
- package/dist/shared/common/src/utils/timeSeries.js +40 -0
- package/dist/shared/common/src/utils/token.d.ts +33 -0
- package/dist/shared/common/src/utils/token.js +82 -0
- package/dist/shared/common/src/utils/transaction.d.ts +154 -0
- package/dist/shared/common/src/utils/transaction.js +585 -0
- package/dist/shared/common/src/utils/transactionSplitter.d.ts +85 -0
- package/dist/shared/common/src/utils/transactionSplitter.js +127 -0
- package/dist/shared/common/src/utils/txAccountCoverage.d.ts +49 -0
- package/dist/shared/common/src/utils/txAccountCoverage.js +122 -0
- package/dist/shared/jupiter-helpers/src/api.d.ts +59 -0
- package/dist/shared/jupiter-helpers/src/api.js +130 -0
- package/dist/shared/jupiter-helpers/src/client.d.ts +79 -0
- package/dist/shared/jupiter-helpers/src/client.js +173 -0
- package/dist/shared/jupiter-helpers/src/constants.d.ts +35 -0
- package/dist/shared/jupiter-helpers/src/constants.js +38 -0
- package/dist/shared/jupiter-helpers/src/extract.d.ts +30 -0
- package/dist/shared/jupiter-helpers/src/extract.js +57 -0
- package/dist/shared/jupiter-helpers/src/index.d.ts +5 -0
- package/dist/shared/jupiter-helpers/src/index.js +21 -0
- package/dist/shared/jupiter-helpers/src/routePreInstructions.d.ts +19 -0
- package/dist/shared/jupiter-helpers/src/routePreInstructions.js +61 -0
- package/dist/shared/jupiter-helpers/src/sizeExactInForMinOutput.d.ts +70 -0
- package/dist/shared/jupiter-helpers/src/sizeExactInForMinOutput.js +95 -0
- package/dist/shared/jupiter-helpers/src/types.d.ts +66 -0
- package/dist/shared/jupiter-helpers/src/types.js +2 -0
- package/dist/shared/lending-platforms/src/constants/cache.d.ts +8 -0
- package/dist/shared/lending-platforms/src/constants/cache.js +11 -0
- package/dist/shared/lending-platforms/src/constants/index.d.ts +3 -0
- package/dist/shared/lending-platforms/src/constants/index.js +19 -0
- package/dist/shared/lending-platforms/src/constants/kamino.d.ts +7 -0
- package/dist/shared/lending-platforms/src/constants/kamino.js +83 -0
- package/dist/shared/lending-platforms/src/constants/lendingPosition.d.ts +7 -0
- package/dist/shared/lending-platforms/src/constants/lendingPosition.js +10 -0
- package/dist/shared/lending-platforms/src/data/accounts/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/data/accounts/index.js +18 -0
- package/dist/shared/lending-platforms/src/data/accounts/kamino.d.ts +42 -0
- package/dist/shared/lending-platforms/src/data/accounts/kamino.js +104 -0
- package/dist/shared/lending-platforms/src/data/accounts/lpAccountsBase.d.ts +7 -0
- package/dist/shared/lending-platforms/src/data/accounts/lpAccountsBase.js +9 -0
- package/dist/shared/lending-platforms/src/data/incentive/incentiveBase.d.ts +35 -0
- package/dist/shared/lending-platforms/src/data/incentive/incentiveBase.js +26 -0
- package/dist/shared/lending-platforms/src/data/incentive/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/data/incentive/index.js +18 -0
- package/dist/shared/lending-platforms/src/data/incentive/kamino.d.ts +55 -0
- package/dist/shared/lending-platforms/src/data/incentive/kamino.js +101 -0
- package/dist/shared/lending-platforms/src/data/index.d.ts +6 -0
- package/dist/shared/lending-platforms/src/data/index.js +22 -0
- package/dist/shared/lending-platforms/src/data/instructions/index.d.ts +3 -0
- package/dist/shared/lending-platforms/src/data/instructions/index.js +19 -0
- package/dist/shared/lending-platforms/src/data/instructions/kamino.d.ts +55 -0
- package/dist/shared/lending-platforms/src/data/instructions/kamino.js +630 -0
- package/dist/shared/lending-platforms/src/data/instructions/lpInstructionsBase.d.ts +175 -0
- package/dist/shared/lending-platforms/src/data/instructions/lpInstructionsBase.js +192 -0
- package/dist/shared/lending-platforms/src/data/instructions/types.d.ts +7 -0
- package/dist/shared/lending-platforms/src/data/instructions/types.js +2 -0
- package/dist/shared/lending-platforms/src/data/platform/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/data/platform/index.js +18 -0
- package/dist/shared/lending-platforms/src/data/platform/kamino.d.ts +59 -0
- package/dist/shared/lending-platforms/src/data/platform/kamino.js +206 -0
- package/dist/shared/lending-platforms/src/data/platform/lpDataBase.d.ts +35 -0
- package/dist/shared/lending-platforms/src/data/platform/lpDataBase.js +31 -0
- package/dist/shared/lending-platforms/src/data/reserve/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/data/reserve/index.js +18 -0
- package/dist/shared/lending-platforms/src/data/reserve/kamino.d.ts +45 -0
- package/dist/shared/lending-platforms/src/data/reserve/kamino.js +141 -0
- package/dist/shared/lending-platforms/src/data/reserve/reserveBase.d.ts +114 -0
- package/dist/shared/lending-platforms/src/data/reserve/reserveBase.js +125 -0
- package/dist/shared/lending-platforms/src/data/userPosition/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/data/userPosition/index.js +18 -0
- package/dist/shared/lending-platforms/src/data/userPosition/kamino.d.ts +15 -0
- package/dist/shared/lending-platforms/src/data/userPosition/kamino.js +45 -0
- package/dist/shared/lending-platforms/src/data/userPosition/userPositionBase.d.ts +50 -0
- package/dist/shared/lending-platforms/src/data/userPosition/userPositionBase.js +63 -0
- package/dist/shared/lending-platforms/src/index.d.ts +5 -0
- package/dist/shared/lending-platforms/src/index.js +21 -0
- package/dist/shared/lending-platforms/src/services/client/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/services/client/index.js +18 -0
- package/dist/shared/lending-platforms/src/services/client/kamino.d.ts +53 -0
- package/dist/shared/lending-platforms/src/services/client/kamino.js +142 -0
- package/dist/shared/lending-platforms/src/services/client/lpClientBase.d.ts +66 -0
- package/dist/shared/lending-platforms/src/services/client/lpClientBase.js +19 -0
- package/dist/shared/lending-platforms/src/services/flashLoan/flashLoanBase.d.ts +49 -0
- package/dist/shared/lending-platforms/src/services/flashLoan/flashLoanBase.js +16 -0
- package/dist/shared/lending-platforms/src/services/flashLoan/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/services/flashLoan/index.js +18 -0
- package/dist/shared/lending-platforms/src/services/flashLoan/kamino.d.ts +11 -0
- package/dist/shared/lending-platforms/src/services/flashLoan/kamino.js +85 -0
- package/dist/shared/lending-platforms/src/services/index.d.ts +5 -0
- package/dist/shared/lending-platforms/src/services/index.js +21 -0
- package/dist/shared/lending-platforms/src/services/lendingPosition/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/services/lendingPosition/index.js +18 -0
- package/dist/shared/lending-platforms/src/services/lendingPosition/lendingPositionManager.d.ts +117 -0
- package/dist/shared/lending-platforms/src/services/lendingPosition/lendingPositionManager.js +342 -0
- package/dist/shared/lending-platforms/src/services/lendingPosition/types.d.ts +40 -0
- package/dist/shared/lending-platforms/src/services/lendingPosition/types.js +2 -0
- package/dist/shared/lending-platforms/src/services/leverage/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/services/leverage/index.js +18 -0
- package/dist/shared/lending-platforms/src/services/leverage/leverageService.d.ts +104 -0
- package/dist/shared/lending-platforms/src/services/leverage/leverageService.js +437 -0
- package/dist/shared/lending-platforms/src/services/leverage/types.d.ts +261 -0
- package/dist/shared/lending-platforms/src/services/leverage/types.js +2 -0
- package/dist/shared/lending-platforms/src/services/reservesManager.d.ts +53 -0
- package/dist/shared/lending-platforms/src/services/reservesManager.js +112 -0
- package/dist/shared/lending-platforms/src/types/general.d.ts +37 -0
- package/dist/shared/lending-platforms/src/types/general.js +8 -0
- package/dist/shared/lending-platforms/src/types/index.d.ts +2 -0
- package/dist/shared/lending-platforms/src/types/index.js +18 -0
- package/dist/shared/lending-platforms/src/types/kamino.d.ts +10 -0
- package/dist/shared/lending-platforms/src/types/kamino.js +2 -0
- package/dist/shared/lending-platforms/src/utils/accounts.d.ts +16 -0
- package/dist/shared/lending-platforms/src/utils/accounts.js +36 -0
- package/dist/shared/lending-platforms/src/utils/cache.d.ts +3 -0
- package/dist/shared/lending-platforms/src/utils/cache.js +11 -0
- package/dist/shared/lending-platforms/src/utils/index.d.ts +6 -0
- package/dist/shared/lending-platforms/src/utils/index.js +22 -0
- package/dist/shared/lending-platforms/src/utils/kamino.d.ts +87 -0
- package/dist/shared/lending-platforms/src/utils/kamino.js +190 -0
- package/dist/shared/lending-platforms/src/utils/lendingPlatform.d.ts +6 -0
- package/dist/shared/lending-platforms/src/utils/lendingPlatform.js +16 -0
- package/dist/shared/lending-platforms/src/utils/math.d.ts +47 -0
- package/dist/shared/lending-platforms/src/utils/math.js +123 -0
- package/dist/shared/lending-platforms/src/utils/scope.d.ts +38 -0
- package/dist/shared/lending-platforms/src/utils/scope.js +144 -0
- package/dist/shared/oracle-service/src/constants/index.d.ts +3 -0
- package/dist/shared/oracle-service/src/constants/index.js +19 -0
- package/dist/shared/oracle-service/src/constants/pyth.d.ts +7 -0
- package/dist/shared/oracle-service/src/constants/pyth.js +71 -0
- package/dist/shared/oracle-service/src/constants/splStake.d.ts +2 -0
- package/dist/shared/oracle-service/src/constants/splStake.js +6 -0
- package/dist/shared/oracle-service/src/constants/switchboard.d.ts +7 -0
- package/dist/shared/oracle-service/src/constants/switchboard.js +10 -0
- package/dist/shared/oracle-service/src/feeds/custom.d.ts +30 -0
- package/dist/shared/oracle-service/src/feeds/custom.js +56 -0
- package/dist/shared/oracle-service/src/feeds/jupiter.d.ts +7 -0
- package/dist/shared/oracle-service/src/feeds/jupiter.js +43 -0
- package/dist/shared/oracle-service/src/feeds/priceBase.d.ts +13 -0
- package/dist/shared/oracle-service/src/feeds/priceBase.js +25 -0
- package/dist/shared/oracle-service/src/feeds/pyth.d.ts +8 -0
- package/dist/shared/oracle-service/src/feeds/pyth.js +59 -0
- package/dist/shared/oracle-service/src/feeds/splStake.d.ts +26 -0
- package/dist/shared/oracle-service/src/feeds/splStake.js +99 -0
- package/dist/shared/oracle-service/src/feeds/switchboard.d.ts +6 -0
- package/dist/shared/oracle-service/src/feeds/switchboard.js +11 -0
- package/dist/shared/oracle-service/src/index.d.ts +5 -0
- package/dist/shared/oracle-service/src/index.js +26 -0
- package/dist/shared/oracle-service/src/oracle.d.ts +22 -0
- package/dist/shared/oracle-service/src/oracle.js +104 -0
- package/dist/shared/oracle-service/src/types.d.ts +4 -0
- package/dist/shared/oracle-service/src/types.js +2 -0
- package/dist/shared/oracle-service/src/utils/general.d.ts +20 -0
- package/dist/shared/oracle-service/src/utils/general.js +65 -0
- package/dist/shared/oracle-service/src/utils/index.d.ts +1 -0
- package/dist/shared/oracle-service/src/utils/index.js +17 -0
- package/dist/shared/perena-helpers/src/accounts.d.ts +7 -0
- package/dist/shared/perena-helpers/src/accounts.js +12 -0
- package/dist/shared/perena-helpers/src/client.d.ts +299 -0
- package/dist/shared/perena-helpers/src/client.js +680 -0
- package/dist/shared/perena-helpers/src/constants.d.ts +5 -0
- package/dist/shared/perena-helpers/src/constants.js +8 -0
- package/dist/shared/perena-helpers/src/cpi/burn.d.ts +27 -0
- package/dist/shared/perena-helpers/src/cpi/burn.js +22 -0
- package/dist/shared/perena-helpers/src/cpi/index.d.ts +3 -0
- package/dist/shared/perena-helpers/src/cpi/index.js +19 -0
- package/dist/shared/perena-helpers/src/cpi/mint.d.ts +27 -0
- package/dist/shared/perena-helpers/src/cpi/mint.js +22 -0
- package/dist/shared/perena-helpers/src/cpi/requestUnstake.d.ts +19 -0
- package/dist/shared/perena-helpers/src/cpi/requestUnstake.js +16 -0
- package/dist/shared/perena-helpers/src/index.d.ts +5 -0
- package/dist/shared/perena-helpers/src/index.js +21 -0
- package/dist/shared/perena-helpers/src/utils.d.ts +9 -0
- package/dist/shared/perena-helpers/src/utils.js +54 -0
- package/dist/shared/swap-aggregator/src/aggSwapClient.d.ts +71 -0
- package/dist/shared/swap-aggregator/src/aggSwapClient.js +103 -0
- package/dist/shared/swap-aggregator/src/index.d.ts +1 -0
- package/dist/shared/swap-aggregator/src/index.js +17 -0
- package/docs/launchingToken.md +57 -0
- package/package.json +75 -0
- package/scripts/asyncBurn.ts +155 -0
- package/scripts/burnToken.ts +120 -0
- package/scripts/claimIncentives.ts +125 -0
- package/scripts/closeCpiPlans.ts +113 -0
- package/scripts/collectInterest.ts +194 -0
- package/scripts/collectProtocolFees.ts +144 -0
- package/scripts/computeOptimalAllocations.ts +117 -0
- package/scripts/createToken.ts +100 -0
- package/scripts/createTokenLendingPosition.ts +204 -0
- package/scripts/createYieldingBank.ts +91 -0
- package/scripts/decreaseCarryPositions.ts +359 -0
- package/scripts/depositUnlentCollateral.ts +106 -0
- package/scripts/emergency/deleverageAll.ts +287 -0
- package/scripts/emergency/triggerCircuitBreaker.ts +87 -0
- package/scripts/env.ts +4 -0
- package/scripts/findTxs.ts +169 -0
- package/scripts/increaseCarryPositions.ts +134 -0
- package/scripts/inspect/format.ts +576 -0
- package/scripts/inspect.ts +147 -0
- package/scripts/localUtils.ts +249 -0
- package/scripts/mintToken.ts +126 -0
- package/scripts/processAsyncBurns.ts +89 -0
- package/scripts/rebalanceToken.ts +269 -0
- package/scripts/rebalanceYieldingBank.ts +183 -0
- package/scripts/recollateralizeLoss.ts +79 -0
- package/scripts/refresh.ts +156 -0
- package/scripts/updateFees.ts +486 -0
- package/scripts/updateGeneralLut.ts +36 -0
- package/scripts/updateLendingPositionConfig.ts +172 -0
- package/scripts/updateTokenLuts.ts +36 -0
- package/scripts/updateTokenMetadata.ts +199 -0
- package/scripts/updateYieldingBankConfig.ts +100 -0
- package/scripts/withdrawUnlentCollateral.ts +178 -0
- package/src/client/account.ts +503 -0
- package/src/client/builders/args.ts +381 -0
- package/src/client/builders/asyncBurnBuilder.ts +305 -0
- package/src/client/builders/base.ts +303 -0
- package/src/client/builders/burnTokenBuilder.ts +258 -0
- package/src/client/builders/claimIncentivesBuilder.ts +211 -0
- package/src/client/builders/collectFeesBuilder.ts +52 -0
- package/src/client/builders/collectInterestBuilder.ts +165 -0
- package/src/client/builders/createCpiPlanBuilder.ts +21 -0
- package/src/client/builders/createTokenBuilder.ts +73 -0
- package/src/client/builders/createTokenLendingPositionBuilder.ts +219 -0
- package/src/client/builders/createYieldingBankAllocationBuilder.ts +32 -0
- package/src/client/builders/createYieldingBankBuilder.ts +39 -0
- package/src/client/builders/decreaseCarryPositionBuilder.ts +162 -0
- package/src/client/builders/depositUnlentCollateralBuilder.ts +95 -0
- package/src/client/builders/increaseCarryPositionBuilder.ts +105 -0
- package/src/client/builders/index.ts +37 -0
- package/src/client/builders/mintTokenBuilder.ts +137 -0
- package/src/client/builders/rebalanceTokenBuilder.ts +356 -0
- package/src/client/builders/rebalanceYieldingBankBuilder.ts +109 -0
- package/src/client/builders/recollateralizeLossBuilder.ts +367 -0
- package/src/client/builders/refreshTokenStateBuilder.ts +153 -0
- package/src/client/builders/refreshTokensBuilder.ts +82 -0
- package/src/client/builders/refreshYieldingBankBuilder.ts +42 -0
- package/src/client/builders/resetTokenBurnRateLimitBuilder.ts +21 -0
- package/src/client/builders/setTokenCircuitBreakerBuilder.ts +40 -0
- package/src/client/builders/setYieldingBankCircuitBreakerBuilder.ts +37 -0
- package/src/client/builders/updateLendingPositionConfigBuilder.ts +33 -0
- package/src/client/builders/updateTokenConfigurationBuilder.ts +50 -0
- package/src/client/builders/updateTokenMetadataBuilder.ts +24 -0
- package/src/client/builders/updateYieldingBankConfigBuilder.ts +32 -0
- package/src/client/builders/utils.ts +26 -0
- package/src/client/client.ts +264 -0
- package/src/client/externalLiquidityResolver.ts +54 -0
- package/src/client/index.ts +20 -0
- package/src/client/lendingPlatformClients.ts +50 -0
- package/src/client/pda.ts +102 -0
- package/src/client/plans/collectInterest.ts +207 -0
- package/src/client/plans/decreaseCarryPosition.ts +226 -0
- package/src/client/routes/collectInterest.ts +56 -0
- package/src/client/transaction.ts +106 -0
- package/src/client/types/builders.ts +19 -0
- package/src/client/types/enums.ts +47 -0
- package/src/client/types/general.ts +117 -0
- package/src/client/types/index.ts +6 -0
- package/src/client/types/ix.ts +452 -0
- package/src/client/types/planTypes/collectInterest.ts +97 -0
- package/src/client/types/planTypes/common.ts +31 -0
- package/src/client/types/planTypes/decreaseCarryPosition.ts +134 -0
- package/src/client/types/planTypes/index.ts +3 -0
- package/src/client/types/tx.ts +409 -0
- package/src/constants/configs/allocations.ts +30 -0
- package/src/constants/configs/carryTradePresets.ts +164 -0
- package/src/constants/configs/index.ts +2 -0
- package/src/constants/general.ts +141 -0
- package/src/constants/index.ts +3 -0
- package/src/constants/lycTokenMetadata.ts +52 -0
- package/src/decoders/decodeTransaction.ts +319 -0
- package/src/decoders/discriminators.ts +10 -0
- package/src/decoders/idlAccounts.ts +75 -0
- package/src/decoders/index.ts +15 -0
- package/src/decoders/innerCpis.ts +262 -0
- package/src/decoders/lycInstructionNames.ts +73 -0
- package/src/decoders/programIds.ts +12 -0
- package/src/decoders/solana.ts +25 -0
- package/src/decoders/transactionPayload.ts +41 -0
- package/src/decoders/types.ts +60 -0
- package/src/errors.ts +195 -0
- package/src/idl/long_yield_carry.ts +14648 -0
- package/src/index.ts +10 -0
- package/src/metrics/index.ts +1 -0
- package/src/metrics/protocolMetrics.ts +976 -0
- package/src/models/index.ts +9 -0
- package/src/models/lycToken.ts +380 -0
- package/src/models/yieldingBank.ts +127 -0
- package/src/services/allocation/allocationService.ts +823 -0
- package/src/services/allocation/index.ts +2 -0
- package/src/services/allocation/types.ts +27 -0
- package/src/services/carry/carryAllocationConfig.ts +266 -0
- package/src/services/carry/index.ts +2 -0
- package/src/services/carry/lycLendingPositionManager.ts +167 -0
- package/src/services/index.ts +5 -0
- package/src/services/lendingPosition/index.ts +5 -0
- package/src/services/lendingPosition/lendingPositionService.ts +328 -0
- package/src/services/rebalance/index.ts +2 -0
- package/src/services/rebalance/token/index.ts +1 -0
- package/src/services/rebalance/token/tokenRebalanceService.ts +142 -0
- package/src/services/rebalance/yieldingBank/index.ts +3 -0
- package/src/services/rebalance/yieldingBank/planner.ts +215 -0
- package/src/services/rebalance/yieldingBank/strategy.ts +41 -0
- package/src/services/rebalance/yieldingBank/types.ts +41 -0
- package/src/services/redemption/index.ts +9 -0
- package/src/services/redemption/redemptionService.ts +758 -0
- package/src/types/enriched.ts +187 -0
- package/src/types/index.ts +1 -0
- package/src/utils/cache.ts +12 -0
- package/src/utils/data.ts +65 -0
- package/src/utils/enrichment.ts +330 -0
- package/src/utils/feeDripMetrics.ts +146 -0
- package/src/utils/general.ts +54 -0
- package/src/utils/index.ts +13 -0
- package/src/utils/ix.ts +227 -0
- package/src/utils/lendingPosition.ts +221 -0
- package/src/utils/lookupTables.ts +309 -0
- package/src/utils/lycData.ts +321 -0
- package/src/utils/timelock.ts +63 -0
- package/src/utils/tokenFeeMath.ts +25 -0
- package/src/utils/transactions.ts +109 -0
- package/src/utils/yieldingBank.ts +38 -0
- package/tsconfig.json +11 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AllocationService = void 0;
|
|
4
|
+
const common_1 = require("common");
|
|
5
|
+
const lending_platforms_1 = require("lending-platforms");
|
|
6
|
+
/**
|
|
7
|
+
* Supported borrow tokens by registry symbol. Addresses are taken from
|
|
8
|
+
* `mints` (common mint registry) when resolving candidates.
|
|
9
|
+
*/
|
|
10
|
+
const BORROW_TOKEN_SYMBOLS = ["USDC", "PYUSD", "USDT", "CASH", "USDG", "USDS"];
|
|
11
|
+
const USDC_MINT = common_1.mints.get("USDC").address;
|
|
12
|
+
const USD_STAR_MINT = common_1.mints.get("USD*").address;
|
|
13
|
+
/**
|
|
14
|
+
* Selection-only discount applied to USDC's effective borrow APY when the
|
|
15
|
+
* token's yielding bank holds USD*. Borrowing USDC avoids the otherwise
|
|
16
|
+
* required debt-mint → USDC swap and its occasional execution loss.
|
|
17
|
+
*/
|
|
18
|
+
const USDC_BORROW_APY_BIAS = 0.005;
|
|
19
|
+
/**
|
|
20
|
+
* Discrete allocation steps for the per-position DP grid. 20 → 5% increments.
|
|
21
|
+
* Complexity is O(positions × candidates × K²) — all synchronous, negligible.
|
|
22
|
+
*/
|
|
23
|
+
const ALLOCATION_STEPS = 20;
|
|
24
|
+
/**
|
|
25
|
+
* Minimum borrow-APY improvement that justifies emitting a reallocation. Below
|
|
26
|
+
* this, the rebalance is skipped — on-chain costs (flash-loan fee + swap
|
|
27
|
+
* slippage + tx fees) eat marginal gains, and thrashing positions for a few
|
|
28
|
+
* basis points adds noise without value. 0.025 = 250 bps on the position's APY.
|
|
29
|
+
*/
|
|
30
|
+
const MIN_REALLOC_APY_IMPROVEMENT = 0.025;
|
|
31
|
+
/**
|
|
32
|
+
* Positions with debt below this threshold (in the borrowed token's UI units)
|
|
33
|
+
* are dust — typically idle or near-closed slots — and are excluded from
|
|
34
|
+
* optimization. Without this filter, dust slots generate phantom reallocations
|
|
35
|
+
* with zero economic effect but real on-chain transaction costs.
|
|
36
|
+
*/
|
|
37
|
+
const DUST_DEBT_THRESHOLD = 1.0;
|
|
38
|
+
// ─── LTV helpers ───────────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Returns the LTV (as a decimal) for a collateral/debt pair, using the
|
|
41
|
+
* e-mode config if one exists for the pair, otherwise the base LTV.
|
|
42
|
+
*/
|
|
43
|
+
function getPairLtv(collateralReserve, debtReserveAddress) {
|
|
44
|
+
const emode = collateralReserve.emodes?.find((e) => e.debtReserve === debtReserveAddress);
|
|
45
|
+
return emode?.ltvPct ?? collateralReserve.ltvPct;
|
|
46
|
+
}
|
|
47
|
+
// ─── Log formatters ────────────────────────────────────────────────────────
|
|
48
|
+
function mintSymbol(mint) {
|
|
49
|
+
return common_1.mints.get(mint)?.symbol ?? `${mint.slice(0, 6)}…`;
|
|
50
|
+
}
|
|
51
|
+
function tokenLabel(pos) {
|
|
52
|
+
return pos.token.label ?? pos.token.address.slice(0, 6);
|
|
53
|
+
}
|
|
54
|
+
function positionTag(pos) {
|
|
55
|
+
return `${tokenLabel(pos)}#${pos.lendingPositionIndex}`;
|
|
56
|
+
}
|
|
57
|
+
function formatApy(x) {
|
|
58
|
+
return `${(x * 100).toFixed(3)}%`;
|
|
59
|
+
}
|
|
60
|
+
function formatApyDelta(x) {
|
|
61
|
+
const sign = x >= 0 ? "+" : "";
|
|
62
|
+
return `${sign}${(x * 100).toFixed(3)}%`;
|
|
63
|
+
}
|
|
64
|
+
function formatAmount(x) {
|
|
65
|
+
return x.toLocaleString(undefined, { maximumFractionDigits: 2 });
|
|
66
|
+
}
|
|
67
|
+
function formatIncentive(inc) {
|
|
68
|
+
const pair = inc.config.requiresPairReserve
|
|
69
|
+
? `pair=${inc.config.requiresPairReserve.slice(0, 6)}…`
|
|
70
|
+
: "pair=none";
|
|
71
|
+
const active = inc.active() ? "active" : "inactive";
|
|
72
|
+
return (`type=${inc.config.incentiveType} ${pair} ` +
|
|
73
|
+
`reward=${mintSymbol(inc.config.rewardMint)} apy=${formatApy(inc.apy())} ${active}`);
|
|
74
|
+
}
|
|
75
|
+
class AllocationService {
|
|
76
|
+
constructor(lpData, options = {}) {
|
|
77
|
+
this.lpData = lpData;
|
|
78
|
+
this.log = options.logger ?? (() => { });
|
|
79
|
+
this.yieldingBanks = options.yieldingBanks ?? [];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the debt mint with the highest pair-adjusted net APY
|
|
83
|
+
* (supplyAPY − borrowAPY) for a given pool and collateral reserve.
|
|
84
|
+
*
|
|
85
|
+
* Use this when creating a new lending position to pick the optimal debt
|
|
86
|
+
* mint rather than hardcoding a default.
|
|
87
|
+
*/
|
|
88
|
+
async findOptimalDebtMint(pool, collateralReserve, token) {
|
|
89
|
+
const biasTowardUsdc = token ? this.tokenUsesUsdStarYieldingBank(token) : false;
|
|
90
|
+
const candidates = await Promise.all(BORROW_TOKEN_SYMBOLS.map(async (symbol) => {
|
|
91
|
+
const info = common_1.mints.get(symbol);
|
|
92
|
+
if (!info)
|
|
93
|
+
return null;
|
|
94
|
+
const reserve = await this.fetchOptionalReserveByMint(pool, info.address);
|
|
95
|
+
if (!reserve)
|
|
96
|
+
return null;
|
|
97
|
+
// TODO: revert to pair-adjusted rates once Kamino main-market incentive distortions are resolved.
|
|
98
|
+
// Revert to:
|
|
99
|
+
// const pairedBorrowApy = reserve.borrowAPY(collateralReserve.address);
|
|
100
|
+
// const supplyIncentiveApy = collateralReserve.supplyAPY(reserve.address) - collateralReserve.supplyAPY();
|
|
101
|
+
const isKaminoMain = pool === lending_platforms_1.KAMINO_MAIN_MARKET;
|
|
102
|
+
const pairedBorrowApy = isKaminoMain
|
|
103
|
+
? reserve.borrowAPY()
|
|
104
|
+
: reserve.borrowAPY(collateralReserve.address);
|
|
105
|
+
const supplyIncentiveApy = isKaminoMain
|
|
106
|
+
? 0
|
|
107
|
+
: collateralReserve.supplyAPY(reserve.address) - collateralReserve.supplyAPY();
|
|
108
|
+
const effectiveBorrowApy = pairedBorrowApy - supplyIncentiveApy;
|
|
109
|
+
const selectionBorrowApy = this.applyUsdcBias(effectiveBorrowApy, info.address, biasTowardUsdc);
|
|
110
|
+
const incentiveNote = supplyIncentiveApy > 0
|
|
111
|
+
? ` − ${formatApy(supplyIncentiveApy)} incentive = ${formatApy(effectiveBorrowApy)} effective`
|
|
112
|
+
: "";
|
|
113
|
+
const biasNote = selectionBorrowApy !== effectiveBorrowApy
|
|
114
|
+
? ` − ${formatApy(USDC_BORROW_APY_BIAS)} USDC bias = ${formatApy(selectionBorrowApy)} selection`
|
|
115
|
+
: "";
|
|
116
|
+
this.log(` [findOptimalDebtMint] ${symbol.padEnd(6)} borrow ${formatApy(pairedBorrowApy)}${incentiveNote}${biasNote}`);
|
|
117
|
+
return {
|
|
118
|
+
mint: info.address,
|
|
119
|
+
symbol,
|
|
120
|
+
pairedBorrowApy,
|
|
121
|
+
effectiveBorrowApy,
|
|
122
|
+
selectionBorrowApy,
|
|
123
|
+
};
|
|
124
|
+
}));
|
|
125
|
+
const valid = candidates.filter((c) => c !== null);
|
|
126
|
+
if (valid.length === 0)
|
|
127
|
+
return null;
|
|
128
|
+
valid.sort((a, b) => a.selectionBorrowApy - b.selectionBorrowApy);
|
|
129
|
+
const best = valid[0];
|
|
130
|
+
this.log(` [findOptimalDebtMint] → ${best.symbol}` +
|
|
131
|
+
` (borrow ${formatApy(best.pairedBorrowApy)} effective ${formatApy(best.effectiveBorrowApy)}` +
|
|
132
|
+
(best.selectionBorrowApy !== best.effectiveBorrowApy
|
|
133
|
+
? ` selection ${formatApy(best.selectionBorrowApy)}`
|
|
134
|
+
: "") +
|
|
135
|
+
`)`);
|
|
136
|
+
return { mint: best.mint, symbol: best.symbol, borrowApy: best.effectiveBorrowApy };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Groups all active lending positions by pool, then for each position in a
|
|
140
|
+
* pool finds the allocation across supported borrow mints that minimises
|
|
141
|
+
* that position's pair-adjusted borrow cost. Positions are optimised
|
|
142
|
+
* independently — pair-incentive eligibility is keyed on the position's
|
|
143
|
+
* (debt, collateral) pair, so positions with different collaterals can have
|
|
144
|
+
* different optimal debt mints. (Utilization coupling between positions on
|
|
145
|
+
* the same reserve is not modelled; pair-incentive deltas dominate marginal
|
|
146
|
+
* utilization deltas at typical position sizes.)
|
|
147
|
+
*
|
|
148
|
+
* Returns one entry per position whose allocation would change.
|
|
149
|
+
*/
|
|
150
|
+
async computeOptimalAllocations(tokens) {
|
|
151
|
+
const positions = await this.resolveAllPositions(tokens);
|
|
152
|
+
const poolGroups = this.groupByPool(positions);
|
|
153
|
+
this.log(`[AllocationService] ${positions.length} active position${positions.length === 1 ? "" : "s"} across ${poolGroups.size} pool${poolGroups.size === 1 ? "" : "s"}`);
|
|
154
|
+
const reallocations = [];
|
|
155
|
+
for (const [pool, group] of poolGroups) {
|
|
156
|
+
const groupReallocations = await this.processPoolGroup(pool, group);
|
|
157
|
+
reallocations.push(...groupReallocations);
|
|
158
|
+
}
|
|
159
|
+
return reallocations;
|
|
160
|
+
}
|
|
161
|
+
// ─── Position resolution ─────────────────────────────────────────────────
|
|
162
|
+
async resolveAllPositions(tokens) {
|
|
163
|
+
const maybePositions = await Promise.all(tokens.flatMap((token) => token.activeLendingPositions.map((lp) => this.resolvePosition(token, lp))));
|
|
164
|
+
return maybePositions.filter((p) => p !== null);
|
|
165
|
+
}
|
|
166
|
+
async resolvePosition(token, { index, data: lp }) {
|
|
167
|
+
const pool = (0, common_1.fromWeb3Pk)(lp.pool);
|
|
168
|
+
const debtAmountUi = (0, common_1.toUiAmount)(lp.accounting.debt.amount, lp.accounting.debt.decimals);
|
|
169
|
+
// Skip dust slots — idle positions whose debt is too small for a
|
|
170
|
+
// reallocation to recover its on-chain transaction cost.
|
|
171
|
+
if (debtAmountUi < DUST_DEBT_THRESHOLD)
|
|
172
|
+
return null;
|
|
173
|
+
const [collateralReserve, debtReserve] = await Promise.all([
|
|
174
|
+
this.lpData.fetchReserve(pool, (0, common_1.fromWeb3Pk)(lp.collateralReserve)),
|
|
175
|
+
this.lpData.fetchReserve(pool, (0, common_1.fromWeb3Pk)(lp.debtReserve)),
|
|
176
|
+
]);
|
|
177
|
+
if (!collateralReserve || !debtReserve)
|
|
178
|
+
return null;
|
|
179
|
+
return {
|
|
180
|
+
pool,
|
|
181
|
+
token,
|
|
182
|
+
lendingPositionIndex: index,
|
|
183
|
+
// `lp.accounting.debt.mint` is set at position creation and is NOT
|
|
184
|
+
// updated when the debt is rebalanced into a different mint. The
|
|
185
|
+
// debt reserve, by contrast, reflects the live borrow on-chain — so
|
|
186
|
+
// that's the source of truth for which token is actually borrowed.
|
|
187
|
+
debtMint: debtReserve.mint.mint,
|
|
188
|
+
debtAmountUi,
|
|
189
|
+
collateralReserve,
|
|
190
|
+
debtReserve,
|
|
191
|
+
// TODO: revert to pair-adjusted rates once Kamino main-market incentive distortions are resolved.
|
|
192
|
+
// Revert to:
|
|
193
|
+
// currentBorrowApy: debtReserve.borrowAPY(collateralReserve.address),
|
|
194
|
+
// currentEffectiveBorrowApy:
|
|
195
|
+
// debtReserve.borrowAPY(collateralReserve.address) -
|
|
196
|
+
// (collateralReserve.supplyAPY(debtReserve.address) - collateralReserve.supplyAPY()),
|
|
197
|
+
currentBorrowApy: pool === lending_platforms_1.KAMINO_MAIN_MARKET
|
|
198
|
+
? debtReserve.borrowAPY()
|
|
199
|
+
: debtReserve.borrowAPY(collateralReserve.address),
|
|
200
|
+
currentEffectiveBorrowApy: pool === lending_platforms_1.KAMINO_MAIN_MARKET
|
|
201
|
+
? debtReserve.borrowAPY()
|
|
202
|
+
: debtReserve.borrowAPY(collateralReserve.address) -
|
|
203
|
+
(collateralReserve.supplyAPY(debtReserve.address) - collateralReserve.supplyAPY()),
|
|
204
|
+
biasTowardUsdc: this.tokenUsesUsdStarYieldingBank(token),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
tokenUsesUsdStarYieldingBank(token) {
|
|
208
|
+
// A yielding-bank PDA is identified by its base mint + id. Match both so a
|
|
209
|
+
// USD* holding in an unrelated global bank cannot influence this token.
|
|
210
|
+
// `activeCarryPositions` also ensures the token has real shares in the bank,
|
|
211
|
+
// rather than merely retaining an initialized but unused carry slot.
|
|
212
|
+
return token.activeCarryPositions.some(({ data: carry }) => this.yieldingBanks.some((bank) => bank.baseMint === (0, common_1.fromWeb3Pk)(carry.yieldingBaseMint) &&
|
|
213
|
+
bank.id === carry.yieldingBankId &&
|
|
214
|
+
bank.findAssetHolding(USD_STAR_MINT) !== null));
|
|
215
|
+
}
|
|
216
|
+
applyUsdcBias(effectiveBorrowApy, mint, enabled) {
|
|
217
|
+
return enabled && mint === USDC_MINT
|
|
218
|
+
? effectiveBorrowApy - USDC_BORROW_APY_BIAS
|
|
219
|
+
: effectiveBorrowApy;
|
|
220
|
+
}
|
|
221
|
+
groupByPool(positions) {
|
|
222
|
+
const groups = new Map();
|
|
223
|
+
for (const pos of positions) {
|
|
224
|
+
if (!groups.has(pos.pool))
|
|
225
|
+
groups.set(pos.pool, []);
|
|
226
|
+
groups.get(pos.pool).push(pos);
|
|
227
|
+
}
|
|
228
|
+
return groups;
|
|
229
|
+
}
|
|
230
|
+
// ─── Pool group processing ────────────────────────────────────────────────
|
|
231
|
+
async processPoolGroup(pool, group) {
|
|
232
|
+
this.log(`\n${"═".repeat(70)}`);
|
|
233
|
+
this.log(`Pool ${pool.slice(0, 6)}… (${group.length} position${group.length === 1 ? "" : "s"})`);
|
|
234
|
+
this.log(`${"─".repeat(70)}`);
|
|
235
|
+
for (const pos of group) {
|
|
236
|
+
this.log(` ${positionTag(pos).padEnd(14)}` +
|
|
237
|
+
` collateral=${mintSymbol(pos.collateralReserve.mint.mint)}` +
|
|
238
|
+
` debt=${mintSymbol(pos.debtMint)} $${formatAmount(pos.debtAmountUi)}` +
|
|
239
|
+
` borrow ${formatApy(pos.currentBorrowApy)}`);
|
|
240
|
+
}
|
|
241
|
+
const existingDebtByMint = this.aggregateExistingDebtByMint(group);
|
|
242
|
+
const candidates = await this.resolveGroupCandidates(pool, group, existingDebtByMint);
|
|
243
|
+
if (candidates.length === 0) {
|
|
244
|
+
this.log(" no borrow-token candidates resolved on this pool; skipping");
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
this.logCandidates(group, candidates);
|
|
248
|
+
const reallocations = [];
|
|
249
|
+
for (const pos of group) {
|
|
250
|
+
const realloc = this.evaluatePosition(pos, candidates);
|
|
251
|
+
if (realloc !== null)
|
|
252
|
+
reallocations.push(realloc);
|
|
253
|
+
}
|
|
254
|
+
return reallocations;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Optimises a single position against the candidate set, logs the result,
|
|
258
|
+
* applies the minimum-improvement gate, and returns a reallocation if one
|
|
259
|
+
* should be emitted. Returns `null` when the position is already optimal,
|
|
260
|
+
* the optimum doesn't beat current, or the gain is below threshold.
|
|
261
|
+
*
|
|
262
|
+
*/
|
|
263
|
+
evaluatePosition(pos, candidates) {
|
|
264
|
+
const tag = positionTag(pos);
|
|
265
|
+
const { mints: optimumMints, blendedEffectiveBorrowApy: optimumEffectiveBorrowApy, blendedSelectionBorrowApy: optimumSelectionBorrowApy, } = this.optimizePosition(pos, candidates);
|
|
266
|
+
const currentSelectionBorrowApy = this.applyUsdcBias(pos.currentEffectiveBorrowApy, pos.debtMint, pos.biasTowardUsdc);
|
|
267
|
+
this.log(`\n ── ${tag} ──`);
|
|
268
|
+
const currentSupplyIncentive = pos.collateralReserve.supplyAPY(pos.debtReserve.address) - pos.collateralReserve.supplyAPY();
|
|
269
|
+
const currentEffectiveNote = currentSupplyIncentive > 0
|
|
270
|
+
? ` − ${formatApy(currentSupplyIncentive)} incentive = ${formatApy(pos.currentEffectiveBorrowApy)} effective`
|
|
271
|
+
: "";
|
|
272
|
+
this.log(` Current: ${mintSymbol(pos.debtMint)} $${formatAmount(pos.debtAmountUi)}` +
|
|
273
|
+
` borrow ${formatApy(pos.currentBorrowApy)}${currentEffectiveNote}`);
|
|
274
|
+
this.log(` Optimum: effective borrow ${formatApy(optimumEffectiveBorrowApy)}` +
|
|
275
|
+
(optimumSelectionBorrowApy !== optimumEffectiveBorrowApy
|
|
276
|
+
? ` selection ${formatApy(optimumSelectionBorrowApy)}`
|
|
277
|
+
: ""));
|
|
278
|
+
for (const m of optimumMints) {
|
|
279
|
+
const incentiveNote = m.supplyIncentiveApy > 0
|
|
280
|
+
? ` − ${formatApy(m.supplyIncentiveApy)} incentive = ${formatApy(m.effectiveBorrowApy)} effective`
|
|
281
|
+
: "";
|
|
282
|
+
const biasNote = m.selectionBorrowApy !== m.effectiveBorrowApy
|
|
283
|
+
? ` − ${formatApy(USDC_BORROW_APY_BIAS)} USDC bias = ${formatApy(m.selectionBorrowApy)} selection`
|
|
284
|
+
: "";
|
|
285
|
+
this.log(` ${mintSymbol(m.mint).padEnd(6)} ${(m.weightBps / 100).toFixed(0).padStart(3)}%` +
|
|
286
|
+
` $${formatAmount(m.amountUi)} borrow ${formatApy(m.borrowApy)}${incentiveNote}${biasNote}`);
|
|
287
|
+
}
|
|
288
|
+
const isAlreadyOptimal = optimumMints.length === 1 &&
|
|
289
|
+
optimumMints[0].mint === pos.debtMint &&
|
|
290
|
+
optimumMints[0].weightBps === 10000;
|
|
291
|
+
if (isAlreadyOptimal) {
|
|
292
|
+
this.log(` → No change (already optimal)`);
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
if (optimumSelectionBorrowApy >= currentSelectionBorrowApy) {
|
|
296
|
+
this.log(` → No change (optimum effective borrow rate does not beat current)`);
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
const improvement = currentSelectionBorrowApy - optimumSelectionBorrowApy;
|
|
300
|
+
if (improvement < MIN_REALLOC_APY_IMPROVEMENT) {
|
|
301
|
+
this.log(` → No change (improvement ${formatApyDelta(improvement)}` +
|
|
302
|
+
` below ${formatApyDelta(MIN_REALLOC_APY_IMPROVEMENT)} threshold)`);
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
this.log(` → Rebalancing (effective borrow rate improves by ${formatApyDelta(improvement)})`);
|
|
306
|
+
const targets = optimumMints.map((m) => ({
|
|
307
|
+
mint: m.mint,
|
|
308
|
+
amountUi: m.amountUi,
|
|
309
|
+
weightBps: m.weightBps,
|
|
310
|
+
}));
|
|
311
|
+
// Build fallback single-mint options: every candidate that beats current,
|
|
312
|
+
// sorted by effective borrow APY ascending, excluding the primary target
|
|
313
|
+
// mint(s) already in `targets`.
|
|
314
|
+
const isKaminoMain = pos.pool === lending_platforms_1.KAMINO_MAIN_MARKET;
|
|
315
|
+
const baseSupplyApy = pos.collateralReserve.supplyAPY();
|
|
316
|
+
const primaryMints = new Set(targets.map((t) => t.mint));
|
|
317
|
+
const fallbackTargets = candidates
|
|
318
|
+
.map(({ mint, reserve }) => {
|
|
319
|
+
if (primaryMints.has(mint))
|
|
320
|
+
return null;
|
|
321
|
+
const supplyIncentiveApy = isKaminoMain
|
|
322
|
+
? 0
|
|
323
|
+
: pos.collateralReserve.supplyAPY(reserve.address) - baseSupplyApy;
|
|
324
|
+
const borrowApy = isKaminoMain
|
|
325
|
+
? reserve.simulateNewBorrowAPY({ debtChange: pos.debtAmountUi })
|
|
326
|
+
: reserve.simulateNewBorrowAPY({ debtChange: pos.debtAmountUi }, pos.collateralReserve.address);
|
|
327
|
+
const effectiveBorrowApy = borrowApy - supplyIncentiveApy;
|
|
328
|
+
const selectionBorrowApy = this.applyUsdcBias(effectiveBorrowApy, mint, pos.biasTowardUsdc);
|
|
329
|
+
if (selectionBorrowApy >= currentSelectionBorrowApy)
|
|
330
|
+
return null;
|
|
331
|
+
return {
|
|
332
|
+
selectionBorrowApy,
|
|
333
|
+
target: {
|
|
334
|
+
mint,
|
|
335
|
+
amountUi: pos.debtAmountUi,
|
|
336
|
+
weightBps: 10000,
|
|
337
|
+
},
|
|
338
|
+
};
|
|
339
|
+
})
|
|
340
|
+
.filter((x) => x !== null)
|
|
341
|
+
.sort((a, b) => a.selectionBorrowApy - b.selectionBorrowApy)
|
|
342
|
+
.map((x) => [x.target]);
|
|
343
|
+
return {
|
|
344
|
+
token: pos.token.address,
|
|
345
|
+
lendingPositionIndex: pos.lendingPositionIndex,
|
|
346
|
+
currentDebtMint: pos.debtMint,
|
|
347
|
+
currentDebtAmountUi: pos.debtAmountUi,
|
|
348
|
+
currentBorrowApy: pos.currentBorrowApy,
|
|
349
|
+
currentSupplyIncentiveApy: currentSupplyIncentive,
|
|
350
|
+
projectedBorrowApy: optimumEffectiveBorrowApy,
|
|
351
|
+
targets,
|
|
352
|
+
fallbackTargets,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Logs, in this order:
|
|
357
|
+
* 1. Each collateral reserve in the pool group + its incentives (once).
|
|
358
|
+
* 2. Each candidate debt reserve: base borrow APY, utilization, and its
|
|
359
|
+
* borrow-side incentives (once).
|
|
360
|
+
* 3. A net-APY matrix (candidate rows × collateral columns) showing the
|
|
361
|
+
* pair-adjusted supply APY, borrow APY, and net APY = supply − borrow.
|
|
362
|
+
* The matrix answers "should I borrow USDS or USDG against cbBTC?" at a
|
|
363
|
+
* glance — compare rows within the cbBTC column.
|
|
364
|
+
*
|
|
365
|
+
* The matrix uses `supplyAPY(debtReserve)` and `borrowAPY(supplyReserve)`,
|
|
366
|
+
* which include pair-gated incentives. A `★` marks rows where a pair
|
|
367
|
+
* incentive activates (supplyApy or borrowApy differs from the base).
|
|
368
|
+
*/
|
|
369
|
+
logCandidates(group, candidates) {
|
|
370
|
+
const collateralReserves = new Map();
|
|
371
|
+
for (const pos of group) {
|
|
372
|
+
collateralReserves.set(pos.collateralReserve.address, pos.collateralReserve);
|
|
373
|
+
}
|
|
374
|
+
this.log(`\nCollateral reserves:`);
|
|
375
|
+
for (const r of collateralReserves.values()) {
|
|
376
|
+
const activeIncentives = (r.incentives ?? []).filter((i) => i.active());
|
|
377
|
+
const inactiveCount = (r.incentives ?? []).length - activeIncentives.length;
|
|
378
|
+
this.log(` ${mintSymbol(r.mint.mint).padEnd(8)} base supply ${formatApy(r.supplyAPY())}` +
|
|
379
|
+
(activeIncentives.length > 0
|
|
380
|
+
? ` +${activeIncentives.length} active incentive${activeIncentives.length === 1 ? "" : "s"}`
|
|
381
|
+
: "") +
|
|
382
|
+
(inactiveCount > 0 ? ` (${inactiveCount} inactive)` : ""));
|
|
383
|
+
for (const inc of activeIncentives) {
|
|
384
|
+
this.log(` ${formatIncentive(inc)}`);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
this.log(`\nDebt candidates:`);
|
|
388
|
+
for (const c of candidates) {
|
|
389
|
+
const activeIncentives = (c.reserve.incentives ?? []).filter((i) => i.active());
|
|
390
|
+
const inactiveCount = (c.reserve.incentives ?? []).length - activeIncentives.length;
|
|
391
|
+
this.log(` ${mintSymbol(c.mint).padEnd(8)} borrow ${formatApy(c.reserve.borrowAPY())}` +
|
|
392
|
+
` util ${(c.reserve.utilizationRatePct() * 100).toFixed(1)}%` +
|
|
393
|
+
` capacity $${formatAmount(c.liquidityAvailableUi)}` +
|
|
394
|
+
` group debt $${formatAmount(c.existingGroupDebt)}` +
|
|
395
|
+
(activeIncentives.length > 0
|
|
396
|
+
? ` +${activeIncentives.length} active incentive${activeIncentives.length === 1 ? "" : "s"}`
|
|
397
|
+
: " no incentives") +
|
|
398
|
+
(inactiveCount > 0 ? ` (${inactiveCount} inactive)` : ""));
|
|
399
|
+
for (const inc of activeIncentives) {
|
|
400
|
+
this.log(` ${formatIncentive(inc)}`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
this.logBorrowRateMatrix(collateralReserves, candidates);
|
|
404
|
+
}
|
|
405
|
+
logBorrowRateMatrix(collateralReserves, candidates) {
|
|
406
|
+
const collateralList = [...collateralReserves.values()];
|
|
407
|
+
const symW = 8;
|
|
408
|
+
const borrowW = 8;
|
|
409
|
+
const cellW = 9;
|
|
410
|
+
this.log(`\nBorrow rate matrix (pair-adjusted ★ = pair incentive changes rate)`);
|
|
411
|
+
const header = ` ${"Debt".padEnd(symW)} ${"Base".padStart(borrowW)}` +
|
|
412
|
+
collateralList.map((r) => `vs ${mintSymbol(r.mint.mint)}`.padStart(cellW + 3)).join("");
|
|
413
|
+
this.log(header);
|
|
414
|
+
for (const c of candidates) {
|
|
415
|
+
const baseBorrow = c.reserve.borrowAPY();
|
|
416
|
+
const cells = collateralList.map((coll) => {
|
|
417
|
+
const pairedBorrow = c.reserve.borrowAPY(coll.address);
|
|
418
|
+
const pairedSupply = coll.supplyAPY(c.reserve.address);
|
|
419
|
+
const pairActive = pairedBorrow !== baseBorrow || pairedSupply !== coll.supplyAPY();
|
|
420
|
+
return `${formatApy(pairedBorrow).padStart(cellW)} ${pairActive ? "★" : " "}`;
|
|
421
|
+
});
|
|
422
|
+
this.log(` ${mintSymbol(c.mint).padEnd(symW)} ${formatApy(baseBorrow).padStart(borrowW)}` +
|
|
423
|
+
cells.join(" "));
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
aggregateExistingDebtByMint(group) {
|
|
427
|
+
const existingDebtByMint = new Map();
|
|
428
|
+
for (const pos of group) {
|
|
429
|
+
existingDebtByMint.set(pos.debtMint, (existingDebtByMint.get(pos.debtMint) ?? 0) + pos.debtAmountUi);
|
|
430
|
+
}
|
|
431
|
+
return existingDebtByMint;
|
|
432
|
+
}
|
|
433
|
+
async resolveGroupCandidates(pool, group, existingDebtByMint) {
|
|
434
|
+
// Reuse already-fetched reserves where possible to avoid redundant RPC calls
|
|
435
|
+
const fetchedByMint = new Map(group.map((p) => [p.debtMint, p.debtReserve]));
|
|
436
|
+
const results = await Promise.all(BORROW_TOKEN_SYMBOLS.map(async (symbol) => {
|
|
437
|
+
const info = common_1.mints.get(symbol);
|
|
438
|
+
if (!info) {
|
|
439
|
+
throw new Error(`AllocationService: borrow token symbol "${symbol}" not found in mint registry`);
|
|
440
|
+
}
|
|
441
|
+
const mint = info.address;
|
|
442
|
+
const reserve = fetchedByMint.get(mint) ?? (await this.fetchOptionalReserveByMint(pool, mint));
|
|
443
|
+
if (!reserve)
|
|
444
|
+
return;
|
|
445
|
+
return {
|
|
446
|
+
mint,
|
|
447
|
+
reserve,
|
|
448
|
+
existingGroupDebt: existingDebtByMint.get(mint) ?? 0,
|
|
449
|
+
liquidityAvailableUi: reserve.liquidityAvailable(),
|
|
450
|
+
};
|
|
451
|
+
}));
|
|
452
|
+
return results.filter((c) => Boolean(c));
|
|
453
|
+
}
|
|
454
|
+
async fetchOptionalReserveByMint(pool, mint) {
|
|
455
|
+
try {
|
|
456
|
+
return await this.lpData.fetchReserveByMint(pool, mint);
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
if (error instanceof Error && error.message === `Unable to find reserve by mint ${mint}`) {
|
|
460
|
+
this.log(` (${mintSymbol(mint)} not listed on this pool — skipping)`);
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
throw error;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
// ─── Per-position DP optimization ─────────────────────────────────────────
|
|
467
|
+
/**
|
|
468
|
+
* Finds the allocation of `pos.debtAmountUi` across `candidates` that
|
|
469
|
+
* MAXIMISES this position's pair-adjusted net APY (supplyApy − borrowApy)
|
|
470
|
+
* using DP over a discrete grid of size K = ALLOCATION_STEPS.
|
|
471
|
+
*
|
|
472
|
+
* Both legs are pair-adjusted with this position's own collateral reserve,
|
|
473
|
+
* since incentive eligibility is keyed on the (debt, collateral) pair. This
|
|
474
|
+
* matters because some pair incentives (e.g. USDG★cbBTC) act on the supply
|
|
475
|
+
* side — minimising borrow cost alone would miss them.
|
|
476
|
+
*
|
|
477
|
+
* For candidate `i` at step `n`:
|
|
478
|
+
* target = n × stepSize
|
|
479
|
+
* posExisting = pos.debtAmountUi if pos.debtMint == candidate.mint else 0
|
|
480
|
+
* debtChange = target − posExisting
|
|
481
|
+
* borrowApy = simulateNewBorrowAPY({debtChange}, pos.collateralReserve)
|
|
482
|
+
* supplyApy = pos.collateralReserve.supplyAPY(reserve.address)
|
|
483
|
+
*
|
|
484
|
+
* The DP minimises Σ target × (borrowApy − supplyApy) — equivalent to
|
|
485
|
+
* maximising debt-weighted net APY. Utilization coupling with sibling
|
|
486
|
+
* positions is not modelled; the simulator only sees this position's
|
|
487
|
+
* marginal change.
|
|
488
|
+
*/
|
|
489
|
+
optimizePosition(pos, candidates) {
|
|
490
|
+
const K = ALLOCATION_STEPS;
|
|
491
|
+
const stepSize = pos.debtAmountUi / K;
|
|
492
|
+
const baseSupplyApy = pos.collateralReserve.supplyAPY();
|
|
493
|
+
// TODO: revert to pair-adjusted rates once Kamino main-market incentive distortions are resolved.
|
|
494
|
+
// In costGrid: revert borrowApy to reserve.simulateNewBorrowAPY({ debtChange }, pos.collateralReserve.address)
|
|
495
|
+
// and supplyIncentiveApy to pos.collateralReserve.supplyAPY(reserve.address) - baseSupplyApy.
|
|
496
|
+
// In mintAllocs: same reversions for borrowApy and supplyIncentiveApy.
|
|
497
|
+
const isKaminoMain = pos.pool === lending_platforms_1.KAMINO_MAIN_MARKET;
|
|
498
|
+
const costGrid = candidates.map(({ reserve, mint }) => {
|
|
499
|
+
const posExisting = mint === pos.debtMint ? pos.debtAmountUi : 0;
|
|
500
|
+
const supplyIncentiveApy = isKaminoMain
|
|
501
|
+
? 0
|
|
502
|
+
: pos.collateralReserve.supplyAPY(reserve.address) - baseSupplyApy;
|
|
503
|
+
return Array.from({ length: K + 1 }, (_, n) => {
|
|
504
|
+
const target = n * stepSize;
|
|
505
|
+
const debtChange = target - posExisting;
|
|
506
|
+
const borrowApy = isKaminoMain
|
|
507
|
+
? reserve.simulateNewBorrowAPY({ debtChange })
|
|
508
|
+
: reserve.simulateNewBorrowAPY({ debtChange }, pos.collateralReserve.address);
|
|
509
|
+
const effectiveBorrowApy = borrowApy - supplyIncentiveApy;
|
|
510
|
+
return target * this.applyUsdcBias(effectiveBorrowApy, mint, pos.biasTowardUsdc);
|
|
511
|
+
});
|
|
512
|
+
});
|
|
513
|
+
// Cap each candidate's DP steps by:
|
|
514
|
+
// 1. Reserve liquidity (can't borrow more than what's available)
|
|
515
|
+
// 2. LTV-ratio feasibility: if the candidate pair has lower LTV than the
|
|
516
|
+
// current pair, the position can only hold (candidateLtv/currentLtv)
|
|
517
|
+
// of its current debt in that token. posExisting offsets the cap since
|
|
518
|
+
// existing debt in the same token needs no new capacity.
|
|
519
|
+
const currentPairLtv = getPairLtv(pos.collateralReserve, pos.debtReserve.address);
|
|
520
|
+
const maxStepsPerCandidate = candidates.map(({ mint, reserve, liquidityAvailableUi }) => {
|
|
521
|
+
const posExisting = mint === pos.debtMint ? pos.debtAmountUi : 0;
|
|
522
|
+
const candidateLtv = getPairLtv(pos.collateralReserve, reserve.address);
|
|
523
|
+
// Max debt in candidate token = current_debt * (candidateLtv / currentLtv),
|
|
524
|
+
// assuming position is at current LTV and both tokens have ~equal price.
|
|
525
|
+
const ltvCapUi = currentPairLtv > 0 ? (pos.debtAmountUi * candidateLtv) / currentPairLtv : pos.debtAmountUi;
|
|
526
|
+
const effectiveCap = posExisting + Math.min(ltvCapUi, liquidityAvailableUi);
|
|
527
|
+
return Math.min(K, Math.floor(effectiveCap / stepSize));
|
|
528
|
+
});
|
|
529
|
+
const optimalSteps = this.runDp(costGrid, candidates.length, K, maxStepsPerCandidate);
|
|
530
|
+
// Keep the real APY separate from the biased selection score. The bias
|
|
531
|
+
// models avoided debt-mint → USDC swap losses; it is not an actual lending
|
|
532
|
+
// rate and therefore must not be reported as the projected borrow APY.
|
|
533
|
+
let blendedEffectiveBorrowApy = 0;
|
|
534
|
+
let blendedSelectionBorrowApy = 0;
|
|
535
|
+
const mintAllocs = optimalSteps
|
|
536
|
+
.map((n, i) => {
|
|
537
|
+
const { mint, reserve } = candidates[i];
|
|
538
|
+
const amountUi = n * stepSize;
|
|
539
|
+
const posExisting = mint === pos.debtMint ? pos.debtAmountUi : 0;
|
|
540
|
+
const borrowApy = isKaminoMain
|
|
541
|
+
? reserve.simulateNewBorrowAPY({ debtChange: amountUi - posExisting })
|
|
542
|
+
: reserve.simulateNewBorrowAPY({ debtChange: amountUi - posExisting }, pos.collateralReserve.address);
|
|
543
|
+
const supplyIncentiveApy = isKaminoMain
|
|
544
|
+
? 0
|
|
545
|
+
: pos.collateralReserve.supplyAPY(reserve.address) - baseSupplyApy;
|
|
546
|
+
const effectiveBorrowApy = borrowApy - supplyIncentiveApy;
|
|
547
|
+
const selectionBorrowApy = this.applyUsdcBias(effectiveBorrowApy, mint, pos.biasTowardUsdc);
|
|
548
|
+
if (pos.debtAmountUi > 0) {
|
|
549
|
+
blendedEffectiveBorrowApy += (amountUi / pos.debtAmountUi) * effectiveBorrowApy;
|
|
550
|
+
blendedSelectionBorrowApy += (amountUi / pos.debtAmountUi) * selectionBorrowApy;
|
|
551
|
+
}
|
|
552
|
+
return {
|
|
553
|
+
mint,
|
|
554
|
+
reserve,
|
|
555
|
+
amountUi,
|
|
556
|
+
weightBps: Math.round((n / K) * 10000),
|
|
557
|
+
borrowApy,
|
|
558
|
+
supplyIncentiveApy,
|
|
559
|
+
effectiveBorrowApy,
|
|
560
|
+
selectionBorrowApy,
|
|
561
|
+
};
|
|
562
|
+
})
|
|
563
|
+
.filter((m) => m.weightBps > 0);
|
|
564
|
+
return { mints: mintAllocs, blendedEffectiveBorrowApy, blendedSelectionBorrowApy };
|
|
565
|
+
}
|
|
566
|
+
runDp(costGrid, numCandidates, K, maxStepsPerCandidate) {
|
|
567
|
+
let dp = Array.from({ length: K + 1 }, (_, s) => s === 0 ? { minCost: 0, steps: [] } : { minCost: Infinity, steps: [] });
|
|
568
|
+
for (let i = 0; i < numCandidates; i++) {
|
|
569
|
+
const maxN = maxStepsPerCandidate ? maxStepsPerCandidate[i] : K;
|
|
570
|
+
const next = Array.from({ length: K + 1 }, () => ({
|
|
571
|
+
minCost: Infinity,
|
|
572
|
+
steps: [],
|
|
573
|
+
}));
|
|
574
|
+
for (let s = 0; s <= K; s++) {
|
|
575
|
+
if (dp[s].minCost === Infinity)
|
|
576
|
+
continue;
|
|
577
|
+
for (let n = 0; n <= Math.min(maxN, K - s); n++) {
|
|
578
|
+
const cost = dp[s].minCost + costGrid[i][n];
|
|
579
|
+
if (cost < next[s + n].minCost) {
|
|
580
|
+
next[s + n] = { minCost: cost, steps: [...dp[s].steps, n] };
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
dp = next;
|
|
585
|
+
}
|
|
586
|
+
return dp[K].steps;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
exports.AllocationService = AllocationService;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./allocationService"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
export interface DebtAllocationTarget {
|
|
3
|
+
mint: Address;
|
|
4
|
+
amountUi: number;
|
|
5
|
+
/** Proportion of total debt allocated here, in basis points (0–10000) */
|
|
6
|
+
weightBps: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DebtReallocation {
|
|
9
|
+
token: Address;
|
|
10
|
+
lendingPositionIndex: number;
|
|
11
|
+
currentDebtMint: Address;
|
|
12
|
+
currentDebtAmountUi: number;
|
|
13
|
+
currentBorrowApy: number;
|
|
14
|
+
/** Supply APY that the collateral earns as a pair incentive from the current debt token. */
|
|
15
|
+
currentSupplyIncentiveApy: number;
|
|
16
|
+
projectedBorrowApy: number;
|
|
17
|
+
targets: DebtAllocationTarget[];
|
|
18
|
+
/**
|
|
19
|
+
* Ordered list of single-mint fallback options to try if the primary targets
|
|
20
|
+
* fail at execution time (e.g. insufficient borrow capacity or swap liquidity).
|
|
21
|
+
* Each entry is a full-position allocation to a single mint, ranked by
|
|
22
|
+
* effective borrow APY ascending.
|
|
23
|
+
*/
|
|
24
|
+
fallbackTargets: DebtAllocationTarget[][];
|
|
25
|
+
}
|