@voltr/vault-sdk 1.0.21 → 2.0.0
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/extensions/batchFetchers.d.ts +7 -0
- package/dist/extensions/batchFetchers.d.ts.map +1 -0
- package/dist/extensions/batchFetchers.js +63 -0
- package/dist/extensions/batchFetchers.js.map +1 -0
- package/dist/extensions/decimal.d.ts +11 -0
- package/dist/extensions/decimal.d.ts.map +1 -0
- package/dist/extensions/decimal.js +19 -0
- package/dist/extensions/decimal.js.map +1 -0
- package/dist/extensions/fees.d.ts +6 -0
- package/dist/extensions/fees.d.ts.map +1 -0
- package/dist/extensions/fees.js +23 -0
- package/dist/extensions/fees.js.map +1 -0
- package/dist/extensions/index.d.ts +10 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +26 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/lpEconomics.d.ts +27 -0
- package/dist/extensions/lpEconomics.d.ts.map +1 -0
- package/dist/extensions/lpEconomics.js +140 -0
- package/dist/extensions/lpEconomics.js.map +1 -0
- package/dist/extensions/math.d.ts +90 -0
- package/dist/extensions/math.d.ts.map +1 -0
- package/dist/extensions/math.js +182 -0
- package/dist/extensions/math.js.map +1 -0
- package/dist/extensions/metadataPda.d.ts +18 -0
- package/dist/extensions/metadataPda.d.ts.map +1 -0
- package/dist/extensions/metadataPda.js +34 -0
- package/dist/extensions/metadataPda.js.map +1 -0
- package/dist/extensions/position.d.ts +19 -0
- package/dist/extensions/position.d.ts.map +1 -0
- package/dist/extensions/position.js +28 -0
- package/dist/extensions/position.js.map +1 -0
- package/dist/extensions/rpc.d.ts +8 -0
- package/dist/extensions/rpc.d.ts.map +1 -0
- package/dist/{types/voltr_vault.js → extensions/rpc.js} +1 -0
- package/dist/extensions/rpc.js.map +1 -0
- package/dist/extensions/withdrawals.d.ts +16 -0
- package/dist/extensions/withdrawals.d.ts.map +1 -0
- package/dist/extensions/withdrawals.js +59 -0
- package/dist/extensions/withdrawals.js.map +1 -0
- package/dist/generated/accounts/adaptorAddReceipt.d.ts +57 -0
- package/dist/generated/accounts/adaptorAddReceipt.d.ts.map +1 -0
- package/dist/generated/accounts/adaptorAddReceipt.js +82 -0
- package/dist/generated/accounts/adaptorAddReceipt.js.map +1 -0
- package/dist/generated/accounts/directWithdrawInitReceipt.d.ts +60 -0
- package/dist/generated/accounts/directWithdrawInitReceipt.d.ts.map +1 -0
- package/dist/generated/accounts/directWithdrawInitReceipt.js +95 -0
- package/dist/generated/accounts/directWithdrawInitReceipt.js.map +1 -0
- package/dist/generated/accounts/index.d.ts +14 -0
- package/dist/generated/accounts/index.d.ts.map +1 -0
- package/dist/generated/accounts/index.js +30 -0
- package/dist/generated/accounts/index.js.map +1 -0
- package/dist/generated/accounts/protocol.d.ts +57 -0
- package/dist/generated/accounts/protocol.d.ts.map +1 -0
- package/dist/generated/accounts/protocol.js +82 -0
- package/dist/generated/accounts/protocol.js.map +1 -0
- package/dist/generated/accounts/requestWithdrawVaultReceipt.d.ts +43 -0
- package/dist/generated/accounts/requestWithdrawVaultReceipt.d.ts.map +1 -0
- package/dist/generated/accounts/requestWithdrawVaultReceipt.js +85 -0
- package/dist/generated/accounts/requestWithdrawVaultReceipt.js.map +1 -0
- package/dist/generated/accounts/strategyInitReceipt.d.ts +69 -0
- package/dist/generated/accounts/strategyInitReceipt.d.ts.map +1 -0
- package/dist/generated/accounts/strategyInitReceipt.js +91 -0
- package/dist/generated/accounts/strategyInitReceipt.js.map +1 -0
- package/dist/generated/accounts/vault.d.ts +100 -0
- package/dist/generated/accounts/vault.d.ts.map +1 -0
- package/dist/generated/accounts/vault.js +105 -0
- package/dist/generated/accounts/vault.js.map +1 -0
- package/dist/generated/errors/index.d.ts +9 -0
- package/dist/generated/errors/index.d.ts.map +1 -0
- package/dist/{types → generated/errors}/index.js +9 -2
- package/dist/generated/errors/index.js.map +1 -0
- package/dist/generated/errors/voltrVault.d.ts +52 -0
- package/dist/generated/errors/voltrVault.d.ts.map +1 -0
- package/dist/generated/errors/voltrVault.js +77 -0
- package/dist/generated/errors/voltrVault.js.map +1 -0
- package/dist/generated/index.d.ts +14 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +30 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/instructions/acceptProtocolAdmin.d.ts +47 -0
- package/dist/generated/instructions/acceptProtocolAdmin.d.ts.map +1 -0
- package/dist/generated/instructions/acceptProtocolAdmin.js +103 -0
- package/dist/generated/instructions/acceptProtocolAdmin.js.map +1 -0
- package/dist/generated/instructions/acceptVaultAdmin.d.ts +40 -0
- package/dist/generated/instructions/acceptVaultAdmin.d.ts.map +1 -0
- package/dist/generated/instructions/acceptVaultAdmin.js +75 -0
- package/dist/generated/instructions/acceptVaultAdmin.js.map +1 -0
- package/dist/generated/instructions/addAdaptor.d.ts +67 -0
- package/dist/generated/instructions/addAdaptor.d.ts.map +1 -0
- package/dist/generated/instructions/addAdaptor.js +149 -0
- package/dist/generated/instructions/addAdaptor.js.map +1 -0
- package/dist/generated/instructions/calibrateHighWaterMark.d.ts +63 -0
- package/dist/generated/instructions/calibrateHighWaterMark.d.ts.map +1 -0
- package/dist/generated/instructions/calibrateHighWaterMark.js +150 -0
- package/dist/generated/instructions/calibrateHighWaterMark.js.map +1 -0
- package/dist/generated/instructions/calibrateHighWaterMarkUnsafe.d.ts +55 -0
- package/dist/generated/instructions/calibrateHighWaterMarkUnsafe.d.ts.map +1 -0
- package/dist/generated/instructions/calibrateHighWaterMarkUnsafe.js +121 -0
- package/dist/generated/instructions/calibrateHighWaterMarkUnsafe.js.map +1 -0
- package/dist/generated/instructions/cancelRequestWithdrawVault.d.ts +84 -0
- package/dist/generated/instructions/cancelRequestWithdrawVault.d.ts.map +1 -0
- package/dist/generated/instructions/cancelRequestWithdrawVault.js +208 -0
- package/dist/generated/instructions/cancelRequestWithdrawVault.js.map +1 -0
- package/dist/generated/instructions/closeStrategy.d.ts +67 -0
- package/dist/generated/instructions/closeStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/closeStrategy.js +149 -0
- package/dist/generated/instructions/closeStrategy.js.map +1 -0
- package/dist/generated/instructions/createLpMetadata.d.ts +88 -0
- package/dist/generated/instructions/createLpMetadata.d.ts.map +1 -0
- package/dist/generated/instructions/createLpMetadata.js +194 -0
- package/dist/generated/instructions/createLpMetadata.js.map +1 -0
- package/dist/generated/instructions/depositStrategy.d.ts +111 -0
- package/dist/generated/instructions/depositStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/depositStrategy.js +277 -0
- package/dist/generated/instructions/depositStrategy.js.map +1 -0
- package/dist/generated/instructions/depositVault.d.ts +108 -0
- package/dist/generated/instructions/depositVault.d.ts.map +1 -0
- package/dist/generated/instructions/depositVault.js +258 -0
- package/dist/generated/instructions/depositVault.js.map +1 -0
- package/dist/generated/instructions/directWithdrawStrategy.d.ts +125 -0
- package/dist/generated/instructions/directWithdrawStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/directWithdrawStrategy.js +338 -0
- package/dist/generated/instructions/directWithdrawStrategy.js.map +1 -0
- package/dist/generated/instructions/directWithdrawStrategyWithTolerance.d.ts +129 -0
- package/dist/generated/instructions/directWithdrawStrategyWithTolerance.d.ts.map +1 -0
- package/dist/generated/instructions/directWithdrawStrategyWithTolerance.js +338 -0
- package/dist/generated/instructions/directWithdrawStrategyWithTolerance.js.map +1 -0
- package/dist/generated/instructions/harvestFee.d.ts +87 -0
- package/dist/generated/instructions/harvestFee.d.ts.map +1 -0
- package/dist/generated/instructions/harvestFee.js +220 -0
- package/dist/generated/instructions/harvestFee.js.map +1 -0
- package/dist/generated/instructions/index.d.ts +35 -0
- package/dist/generated/instructions/index.d.ts.map +1 -0
- package/dist/generated/instructions/index.js +51 -0
- package/dist/generated/instructions/index.js.map +1 -0
- package/dist/generated/instructions/initProtocol.d.ts +60 -0
- package/dist/generated/instructions/initProtocol.d.ts.map +1 -0
- package/dist/generated/instructions/initProtocol.js +130 -0
- package/dist/generated/instructions/initProtocol.js.map +1 -0
- package/dist/generated/instructions/initializeDirectWithdrawStrategy.d.ts +92 -0
- package/dist/generated/instructions/initializeDirectWithdrawStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/initializeDirectWithdrawStrategy.js +214 -0
- package/dist/generated/instructions/initializeDirectWithdrawStrategy.js.map +1 -0
- package/dist/generated/instructions/initializeStrategy.d.ts +88 -0
- package/dist/generated/instructions/initializeStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/initializeStrategy.js +210 -0
- package/dist/generated/instructions/initializeStrategy.js.map +1 -0
- package/dist/generated/instructions/initializeVault.d.ts +172 -0
- package/dist/generated/instructions/initializeVault.d.ts.map +1 -0
- package/dist/generated/instructions/initializeVault.js +289 -0
- package/dist/generated/instructions/initializeVault.js.map +1 -0
- package/dist/generated/instructions/instantWithdrawStrategy.d.ts +133 -0
- package/dist/generated/instructions/instantWithdrawStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/instantWithdrawStrategy.js +320 -0
- package/dist/generated/instructions/instantWithdrawStrategy.js.map +1 -0
- package/dist/generated/instructions/instantWithdrawStrategyWithTolerance.d.ts +137 -0
- package/dist/generated/instructions/instantWithdrawStrategyWithTolerance.d.ts.map +1 -0
- package/dist/generated/instructions/instantWithdrawStrategyWithTolerance.js +320 -0
- package/dist/generated/instructions/instantWithdrawStrategyWithTolerance.js.map +1 -0
- package/dist/generated/instructions/instantWithdrawVault.d.ts +112 -0
- package/dist/generated/instructions/instantWithdrawVault.d.ts.map +1 -0
- package/dist/generated/instructions/instantWithdrawVault.js +249 -0
- package/dist/generated/instructions/instantWithdrawVault.js.map +1 -0
- package/dist/generated/instructions/removeAdaptor.d.ts +63 -0
- package/dist/generated/instructions/removeAdaptor.d.ts.map +1 -0
- package/dist/generated/instructions/removeAdaptor.js +144 -0
- package/dist/generated/instructions/removeAdaptor.js.map +1 -0
- package/dist/generated/instructions/requestWithdrawVault.d.ts +104 -0
- package/dist/generated/instructions/requestWithdrawVault.d.ts.map +1 -0
- package/dist/generated/instructions/requestWithdrawVault.js +225 -0
- package/dist/generated/instructions/requestWithdrawVault.js.map +1 -0
- package/dist/generated/instructions/updateProtocol.d.ts +57 -0
- package/dist/generated/instructions/updateProtocol.d.ts.map +1 -0
- package/dist/generated/instructions/updateProtocol.js +111 -0
- package/dist/generated/instructions/updateProtocol.js.map +1 -0
- package/dist/generated/instructions/updateVaultConfig.d.ts +65 -0
- package/dist/generated/instructions/updateVaultConfig.d.ts.map +1 -0
- package/dist/generated/instructions/updateVaultConfig.js +133 -0
- package/dist/generated/instructions/updateVaultConfig.js.map +1 -0
- package/dist/generated/instructions/updateVaultProtocolFee.d.ts +65 -0
- package/dist/generated/instructions/updateVaultProtocolFee.d.ts.map +1 -0
- package/dist/generated/instructions/updateVaultProtocolFee.js +132 -0
- package/dist/generated/instructions/updateVaultProtocolFee.js.map +1 -0
- package/dist/generated/instructions/withdrawStrategy.d.ts +111 -0
- package/dist/generated/instructions/withdrawStrategy.d.ts.map +1 -0
- package/dist/generated/instructions/withdrawStrategy.js +277 -0
- package/dist/generated/instructions/withdrawStrategy.js.map +1 -0
- package/dist/generated/instructions/withdrawVault.d.ts +103 -0
- package/dist/generated/instructions/withdrawVault.d.ts.map +1 -0
- package/dist/generated/instructions/withdrawVault.js +258 -0
- package/dist/generated/instructions/withdrawVault.js.map +1 -0
- package/dist/generated/pdas/adaptorAddReceipt.d.ts +16 -0
- package/dist/generated/pdas/adaptorAddReceipt.d.ts.map +1 -0
- package/dist/generated/pdas/adaptorAddReceipt.js +26 -0
- package/dist/generated/pdas/adaptorAddReceipt.js.map +1 -0
- package/dist/generated/pdas/directWithdrawInitReceipt.d.ts +16 -0
- package/dist/generated/pdas/directWithdrawInitReceipt.d.ts.map +1 -0
- package/dist/generated/pdas/directWithdrawInitReceipt.js +26 -0
- package/dist/generated/pdas/directWithdrawInitReceipt.js.map +1 -0
- package/dist/generated/pdas/index.d.ts +17 -0
- package/dist/generated/pdas/index.d.ts.map +1 -0
- package/dist/generated/pdas/index.js +33 -0
- package/dist/generated/pdas/index.js.map +1 -0
- package/dist/generated/pdas/protocol.d.ts +12 -0
- package/dist/generated/pdas/protocol.d.ts.map +1 -0
- package/dist/generated/pdas/protocol.js +21 -0
- package/dist/generated/pdas/protocol.js.map +1 -0
- package/dist/generated/pdas/requestWithdrawVaultReceipt.d.ts +16 -0
- package/dist/generated/pdas/requestWithdrawVaultReceipt.d.ts.map +1 -0
- package/dist/generated/pdas/requestWithdrawVaultReceipt.js +27 -0
- package/dist/generated/pdas/requestWithdrawVaultReceipt.js.map +1 -0
- package/dist/generated/pdas/strategyInitReceipt.d.ts +16 -0
- package/dist/generated/pdas/strategyInitReceipt.d.ts.map +1 -0
- package/dist/generated/pdas/strategyInitReceipt.js +26 -0
- package/dist/generated/pdas/strategyInitReceipt.js.map +1 -0
- package/dist/generated/pdas/vaultAssetIdleAuth.d.ts +15 -0
- package/dist/generated/pdas/vaultAssetIdleAuth.d.ts.map +1 -0
- package/dist/generated/pdas/vaultAssetIdleAuth.js +25 -0
- package/dist/generated/pdas/vaultAssetIdleAuth.js.map +1 -0
- package/dist/generated/pdas/vaultLpMint.d.ts +15 -0
- package/dist/generated/pdas/vaultLpMint.d.ts.map +1 -0
- package/dist/generated/pdas/vaultLpMint.js +24 -0
- package/dist/generated/pdas/vaultLpMint.js.map +1 -0
- package/dist/generated/pdas/vaultLpMintAuth.d.ts +15 -0
- package/dist/generated/pdas/vaultLpMintAuth.d.ts.map +1 -0
- package/dist/generated/pdas/vaultLpMintAuth.js +25 -0
- package/dist/generated/pdas/vaultLpMintAuth.js.map +1 -0
- package/dist/generated/pdas/vaultStrategyAuth.d.ts +16 -0
- package/dist/generated/pdas/vaultStrategyAuth.d.ts.map +1 -0
- package/dist/generated/pdas/vaultStrategyAuth.js +26 -0
- package/dist/generated/pdas/vaultStrategyAuth.js.map +1 -0
- package/dist/generated/programs/index.d.ts +9 -0
- package/dist/generated/programs/index.d.ts.map +1 -0
- package/dist/generated/programs/index.js +25 -0
- package/dist/generated/programs/index.js.map +1 -0
- package/dist/generated/programs/voltrVault.d.ts +172 -0
- package/dist/generated/programs/voltrVault.d.ts.map +1 -0
- package/dist/generated/programs/voltrVault.js +447 -0
- package/dist/generated/programs/voltrVault.js.map +1 -0
- package/dist/generated/types/acceptProtocolAdminEvent.d.ts +24 -0
- package/dist/generated/types/acceptProtocolAdminEvent.d.ts.map +1 -0
- package/dist/generated/types/acceptProtocolAdminEvent.js +33 -0
- package/dist/generated/types/acceptProtocolAdminEvent.js.map +1 -0
- package/dist/generated/types/acceptVaultAdminEvent.d.ts +24 -0
- package/dist/generated/types/acceptVaultAdminEvent.d.ts.map +1 -0
- package/dist/generated/types/acceptVaultAdminEvent.js +33 -0
- package/dist/generated/types/acceptVaultAdminEvent.js.map +1 -0
- package/dist/generated/types/addAdaptorEvent.d.ts +28 -0
- package/dist/generated/types/addAdaptorEvent.d.ts.map +1 -0
- package/dist/generated/types/addAdaptorEvent.js +37 -0
- package/dist/generated/types/addAdaptorEvent.js.map +1 -0
- package/dist/generated/types/calibrateHighWaterMarkEvent.d.ts +34 -0
- package/dist/generated/types/calibrateHighWaterMarkEvent.d.ts.map +1 -0
- package/dist/generated/types/calibrateHighWaterMarkEvent.js +43 -0
- package/dist/generated/types/calibrateHighWaterMarkEvent.js.map +1 -0
- package/dist/generated/types/calibrateHighWaterMarkUnsafeEvent.d.ts +30 -0
- package/dist/generated/types/calibrateHighWaterMarkUnsafeEvent.d.ts.map +1 -0
- package/dist/generated/types/calibrateHighWaterMarkUnsafeEvent.js +39 -0
- package/dist/generated/types/calibrateHighWaterMarkUnsafeEvent.js.map +1 -0
- package/dist/generated/types/cancelRequestWithdrawVaultEvent.d.ts +32 -0
- package/dist/generated/types/cancelRequestWithdrawVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/cancelRequestWithdrawVaultEvent.js +41 -0
- package/dist/generated/types/cancelRequestWithdrawVaultEvent.js.map +1 -0
- package/dist/generated/types/closeStrategyEvent.d.ts +26 -0
- package/dist/generated/types/closeStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/closeStrategyEvent.js +35 -0
- package/dist/generated/types/closeStrategyEvent.js.map +1 -0
- package/dist/generated/types/depositStrategyEvent.d.ts +52 -0
- package/dist/generated/types/depositStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/depositStrategyEvent.js +61 -0
- package/dist/generated/types/depositStrategyEvent.js.map +1 -0
- package/dist/generated/types/depositVaultEvent.d.ts +48 -0
- package/dist/generated/types/depositVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/depositVaultEvent.js +57 -0
- package/dist/generated/types/depositVaultEvent.js.map +1 -0
- package/dist/generated/types/directWithdrawStrategyEvent.d.ts +62 -0
- package/dist/generated/types/directWithdrawStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/directWithdrawStrategyEvent.js +71 -0
- package/dist/generated/types/directWithdrawStrategyEvent.js.map +1 -0
- package/dist/generated/types/feeConfiguration.d.ts +33 -0
- package/dist/generated/types/feeConfiguration.d.ts.map +1 -0
- package/dist/generated/types/feeConfiguration.js +43 -0
- package/dist/generated/types/feeConfiguration.js.map +1 -0
- package/dist/generated/types/feeState.d.ts +32 -0
- package/dist/generated/types/feeState.d.ts.map +1 -0
- package/dist/generated/types/feeState.js +33 -0
- package/dist/generated/types/feeState.js.map +1 -0
- package/dist/generated/types/feeUpdate.d.ts +24 -0
- package/dist/generated/types/feeUpdate.d.ts.map +1 -0
- package/dist/generated/types/feeUpdate.js +29 -0
- package/dist/generated/types/feeUpdate.js.map +1 -0
- package/dist/generated/types/harvestFeeEvent.d.ts +32 -0
- package/dist/generated/types/harvestFeeEvent.d.ts.map +1 -0
- package/dist/generated/types/harvestFeeEvent.js +41 -0
- package/dist/generated/types/harvestFeeEvent.js.map +1 -0
- package/dist/generated/types/highWaterMark.d.ts +28 -0
- package/dist/generated/types/highWaterMark.d.ts.map +1 -0
- package/dist/generated/types/highWaterMark.js +31 -0
- package/dist/generated/types/highWaterMark.js.map +1 -0
- package/dist/generated/types/index.d.ts +44 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +60 -0
- package/dist/generated/types/index.js.map +1 -0
- package/dist/generated/types/initProtocolEvent.d.ts +22 -0
- package/dist/generated/types/initProtocolEvent.d.ts.map +1 -0
- package/dist/generated/types/initProtocolEvent.js +31 -0
- package/dist/generated/types/initProtocolEvent.js.map +1 -0
- package/dist/generated/types/initializeDirectWithdrawStrategyEvent.d.ts +34 -0
- package/dist/generated/types/initializeDirectWithdrawStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/initializeDirectWithdrawStrategyEvent.js +55 -0
- package/dist/generated/types/initializeDirectWithdrawStrategyEvent.js.map +1 -0
- package/dist/generated/types/initializeStrategyEvent.d.ts +32 -0
- package/dist/generated/types/initializeStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/initializeStrategyEvent.js +41 -0
- package/dist/generated/types/initializeStrategyEvent.js.map +1 -0
- package/dist/generated/types/initializeVaultEvent.d.ts +56 -0
- package/dist/generated/types/initializeVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/initializeVaultEvent.js +71 -0
- package/dist/generated/types/initializeVaultEvent.js.map +1 -0
- package/dist/generated/types/instantWithdrawStrategyEvent.d.ts +68 -0
- package/dist/generated/types/instantWithdrawStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/instantWithdrawStrategyEvent.js +77 -0
- package/dist/generated/types/instantWithdrawStrategyEvent.js.map +1 -0
- package/dist/generated/types/instantWithdrawVaultEvent.d.ts +56 -0
- package/dist/generated/types/instantWithdrawVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/instantWithdrawVaultEvent.js +65 -0
- package/dist/generated/types/instantWithdrawVaultEvent.js.map +1 -0
- package/dist/generated/types/lockedProfitState.d.ts +20 -0
- package/dist/generated/types/lockedProfitState.d.ts.map +1 -0
- package/dist/generated/types/lockedProfitState.js +29 -0
- package/dist/generated/types/lockedProfitState.js.map +1 -0
- package/dist/generated/types/protocolConfigField.d.ts +17 -0
- package/dist/generated/types/protocolConfigField.d.ts.map +1 -0
- package/dist/generated/types/protocolConfigField.js +29 -0
- package/dist/generated/types/protocolConfigField.js.map +1 -0
- package/dist/generated/types/protocolFeeField.d.ts +17 -0
- package/dist/generated/types/protocolFeeField.d.ts.map +1 -0
- package/dist/generated/types/protocolFeeField.js +29 -0
- package/dist/generated/types/protocolFeeField.js.map +1 -0
- package/dist/generated/types/removeAdaptorEvent.d.ts +26 -0
- package/dist/generated/types/removeAdaptorEvent.d.ts.map +1 -0
- package/dist/generated/types/removeAdaptorEvent.js +35 -0
- package/dist/generated/types/removeAdaptorEvent.js.map +1 -0
- package/dist/generated/types/requestWithdrawVaultEvent.d.ts +44 -0
- package/dist/generated/types/requestWithdrawVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/requestWithdrawVaultEvent.js +53 -0
- package/dist/generated/types/requestWithdrawVaultEvent.js.map +1 -0
- package/dist/generated/types/updateProtocolEvent.d.ts +28 -0
- package/dist/generated/types/updateProtocolEvent.d.ts.map +1 -0
- package/dist/generated/types/updateProtocolEvent.js +37 -0
- package/dist/generated/types/updateProtocolEvent.js.map +1 -0
- package/dist/generated/types/updateVaultConfigEvent.d.ts +28 -0
- package/dist/generated/types/updateVaultConfigEvent.d.ts.map +1 -0
- package/dist/generated/types/updateVaultConfigEvent.js +37 -0
- package/dist/generated/types/updateVaultConfigEvent.js.map +1 -0
- package/dist/generated/types/updateVaultEvent.d.ts +62 -0
- package/dist/generated/types/updateVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/updateVaultEvent.js +71 -0
- package/dist/generated/types/updateVaultEvent.js.map +1 -0
- package/dist/generated/types/updateVaultProtocolFeeEvent.d.ts +28 -0
- package/dist/generated/types/updateVaultProtocolFeeEvent.d.ts.map +1 -0
- package/dist/generated/types/updateVaultProtocolFeeEvent.js +37 -0
- package/dist/generated/types/updateVaultProtocolFeeEvent.js.map +1 -0
- package/dist/generated/types/vaultAsset.d.ts +36 -0
- package/dist/generated/types/vaultAsset.d.ts.map +1 -0
- package/dist/generated/types/vaultAsset.js +35 -0
- package/dist/generated/types/vaultAsset.js.map +1 -0
- package/dist/generated/types/vaultConfigField.d.ts +28 -0
- package/dist/generated/types/vaultConfigField.d.ts.map +1 -0
- package/dist/generated/types/vaultConfigField.js +40 -0
- package/dist/generated/types/vaultConfigField.js.map +1 -0
- package/dist/generated/types/vaultConfiguration.d.ts +40 -0
- package/dist/generated/types/vaultConfiguration.d.ts.map +1 -0
- package/dist/generated/types/vaultConfiguration.js +37 -0
- package/dist/generated/types/vaultConfiguration.js.map +1 -0
- package/dist/generated/types/vaultLp.d.ts +23 -0
- package/dist/generated/types/vaultLp.d.ts.map +1 -0
- package/dist/generated/types/vaultLp.js +33 -0
- package/dist/generated/types/vaultLp.js.map +1 -0
- package/dist/generated/types/withdrawStrategyEvent.d.ts +52 -0
- package/dist/generated/types/withdrawStrategyEvent.d.ts.map +1 -0
- package/dist/generated/types/withdrawStrategyEvent.js +61 -0
- package/dist/generated/types/withdrawStrategyEvent.js.map +1 -0
- package/dist/generated/types/withdrawVaultEvent.d.ts +50 -0
- package/dist/generated/types/withdrawVaultEvent.d.ts.map +1 -0
- package/dist/generated/types/withdrawVaultEvent.js +59 -0
- package/dist/generated/types/withdrawVaultEvent.js.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -0
- package/package.json +31 -27
- package/src/extensions/batchFetchers.ts +121 -0
- package/src/extensions/decimal.ts +15 -0
- package/src/extensions/fees.ts +36 -0
- package/src/extensions/index.ts +9 -0
- package/src/extensions/lpEconomics.ts +225 -0
- package/src/extensions/math.ts +338 -0
- package/src/extensions/metadataPda.ts +47 -0
- package/src/extensions/position.ts +54 -0
- package/src/extensions/rpc.ts +17 -0
- package/src/extensions/withdrawals.ts +113 -0
- package/src/generated/accounts/adaptorAddReceipt.ts +194 -0
- package/src/generated/accounts/directWithdrawInitReceipt.ts +235 -0
- package/src/generated/accounts/index.ts +14 -0
- package/src/generated/accounts/protocol.ts +176 -0
- package/src/generated/accounts/requestWithdrawVaultReceipt.ts +197 -0
- package/src/generated/accounts/strategyInitReceipt.ts +221 -0
- package/src/generated/accounts/vault.ts +274 -0
- package/src/generated/errors/index.ts +9 -0
- package/src/generated/errors/voltrVault.ts +112 -0
- package/src/generated/index.ts +14 -0
- package/src/generated/instructions/acceptProtocolAdmin.ts +248 -0
- package/src/generated/instructions/acceptVaultAdmin.ts +187 -0
- package/src/generated/instructions/addAdaptor.ts +391 -0
- package/src/generated/instructions/calibrateHighWaterMark.ts +394 -0
- package/src/generated/instructions/calibrateHighWaterMarkUnsafe.ts +311 -0
- package/src/generated/instructions/cancelRequestWithdrawVault.ts +546 -0
- package/src/generated/instructions/closeStrategy.ts +395 -0
- package/src/generated/instructions/createLpMetadata.ts +501 -0
- package/src/generated/instructions/depositStrategy.ts +737 -0
- package/src/generated/instructions/depositVault.ts +686 -0
- package/src/generated/instructions/directWithdrawStrategy.ts +903 -0
- package/src/generated/instructions/directWithdrawStrategyWithTolerance.ts +913 -0
- package/src/generated/instructions/harvestFee.ts +599 -0
- package/src/generated/instructions/index.ts +35 -0
- package/src/generated/instructions/initProtocol.ts +329 -0
- package/src/generated/instructions/initializeDirectWithdrawStrategy.ts +576 -0
- package/src/generated/instructions/initializeStrategy.ts +557 -0
- package/src/generated/instructions/initializeVault.ts +784 -0
- package/src/generated/instructions/instantWithdrawStrategy.ts +870 -0
- package/src/generated/instructions/instantWithdrawStrategyWithTolerance.ts +878 -0
- package/src/generated/instructions/instantWithdrawVault.ts +670 -0
- package/src/generated/instructions/removeAdaptor.ts +371 -0
- package/src/generated/instructions/requestWithdrawVault.ts +608 -0
- package/src/generated/instructions/updateProtocol.ts +270 -0
- package/src/generated/instructions/updateVaultConfig.ts +343 -0
- package/src/generated/instructions/updateVaultProtocolFee.ts +344 -0
- package/src/generated/instructions/withdrawStrategy.ts +737 -0
- package/src/generated/instructions/withdrawVault.ts +685 -0
- package/src/generated/pdas/adaptorAddReceipt.ts +42 -0
- package/src/generated/pdas/directWithdrawInitReceipt.ts +42 -0
- package/src/generated/pdas/index.ts +17 -0
- package/src/generated/pdas/protocol.ts +30 -0
- package/src/generated/pdas/requestWithdrawVaultReceipt.ts +43 -0
- package/src/generated/pdas/strategyInitReceipt.ts +42 -0
- package/src/generated/pdas/vaultAssetIdleAuth.ts +40 -0
- package/src/generated/pdas/vaultLpMint.ts +39 -0
- package/src/generated/pdas/vaultLpMintAuth.ts +40 -0
- package/src/generated/pdas/vaultStrategyAuth.ts +42 -0
- package/src/generated/programs/index.ts +9 -0
- package/src/generated/programs/voltrVault.ts +1261 -0
- package/src/generated/types/acceptProtocolAdminEvent.ts +63 -0
- package/src/generated/types/acceptVaultAdminEvent.ts +63 -0
- package/src/generated/types/addAdaptorEvent.ts +68 -0
- package/src/generated/types/calibrateHighWaterMarkEvent.ts +85 -0
- package/src/generated/types/calibrateHighWaterMarkUnsafeEvent.ts +77 -0
- package/src/generated/types/cancelRequestWithdrawVaultEvent.ts +81 -0
- package/src/generated/types/closeStrategyEvent.ts +67 -0
- package/src/generated/types/depositStrategyEvent.ts +121 -0
- package/src/generated/types/depositVaultEvent.ts +113 -0
- package/src/generated/types/directWithdrawStrategyEvent.ts +141 -0
- package/src/generated/types/feeConfiguration.ts +84 -0
- package/src/generated/types/feeState.ts +67 -0
- package/src/generated/types/feeUpdate.ts +50 -0
- package/src/generated/types/harvestFeeEvent.ts +76 -0
- package/src/generated/types/highWaterMark.ts +66 -0
- package/src/generated/types/index.ts +44 -0
- package/src/generated/types/initProtocolEvent.ts +61 -0
- package/src/generated/types/initializeDirectWithdrawStrategyEvent.ts +104 -0
- package/src/generated/types/initializeStrategyEvent.ts +81 -0
- package/src/generated/types/initializeVaultEvent.ts +141 -0
- package/src/generated/types/instantWithdrawStrategyEvent.ts +155 -0
- package/src/generated/types/instantWithdrawVaultEvent.ts +131 -0
- package/src/generated/types/lockedProfitState.ts +52 -0
- package/src/generated/types/protocolConfigField.ts +41 -0
- package/src/generated/types/protocolFeeField.ts +41 -0
- package/src/generated/types/removeAdaptorEvent.ts +67 -0
- package/src/generated/types/requestWithdrawVaultEvent.ts +107 -0
- package/src/generated/types/updateProtocolEvent.ts +77 -0
- package/src/generated/types/updateVaultConfigEvent.ts +77 -0
- package/src/generated/types/updateVaultEvent.ts +141 -0
- package/src/generated/types/updateVaultProtocolFeeEvent.ts +79 -0
- package/src/generated/types/vaultAsset.ts +81 -0
- package/src/generated/types/vaultConfigField.ts +52 -0
- package/src/generated/types/vaultConfiguration.ts +87 -0
- package/src/generated/types/vaultLp.ts +61 -0
- package/src/generated/types/withdrawStrategyEvent.ts +121 -0
- package/src/generated/types/withdrawVaultEvent.ts +117 -0
- package/src/index.ts +2 -0
- package/README.md +0 -453
- package/dist/client.d.ts +0 -1544
- package/dist/client.js +0 -1964
- package/dist/constants.d.ts +0 -20
- package/dist/constants.js +0 -27
- package/dist/decimals.d.ts +0 -3
- package/dist/decimals.js +0 -10
- package/dist/idl/voltr_vault.json +0 -9029
- package/dist/types/index.d.ts +0 -2
- package/dist/types/vault.d.ts +0 -70
- package/dist/types/vault.js +0 -29
- package/dist/types/voltr_vault.d.ts +0 -9035
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
fetchVault,
|
|
5
|
+
findVaultLpMintPda,
|
|
6
|
+
VOLTR_VAULT_PROGRAM_ADDRESS,
|
|
7
|
+
type FeeConfiguration,
|
|
8
|
+
type Vault,
|
|
9
|
+
} from "../generated";
|
|
10
|
+
import {
|
|
11
|
+
calculateAssetsForWithdrawAmount,
|
|
12
|
+
calculateLpForDepositAmount,
|
|
13
|
+
calculateLpForWithdrawAmount,
|
|
14
|
+
calculateUnrealisedLpFees,
|
|
15
|
+
getTotalLpSupplyInclFees,
|
|
16
|
+
} from "./math";
|
|
17
|
+
import type { ExtensionsRpc } from "./rpc";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Total management fee in BPS — sum of manager + admin + protocol, matching
|
|
21
|
+
* the program's `Vault::get_total_fee_configuration_management_fee`.
|
|
22
|
+
*/
|
|
23
|
+
export function getTotalManagementFeeBps(
|
|
24
|
+
feeConfiguration: FeeConfiguration,
|
|
25
|
+
): number {
|
|
26
|
+
return (
|
|
27
|
+
feeConfiguration.managerManagementFee +
|
|
28
|
+
feeConfiguration.adminManagementFee +
|
|
29
|
+
feeConfiguration.protocolManagementFee
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function vaultLpMintAddress(vault: Address): Promise<Address> {
|
|
34
|
+
const [address] = await findVaultLpMintPda(
|
|
35
|
+
{ vault },
|
|
36
|
+
{ programAddress: VOLTR_VAULT_PROGRAM_ADDRESS },
|
|
37
|
+
);
|
|
38
|
+
return address;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async function fetchTokenSupply(
|
|
42
|
+
rpc: ExtensionsRpc,
|
|
43
|
+
mint: Address,
|
|
44
|
+
): Promise<{ amount: bigint; decimals: number }> {
|
|
45
|
+
const { value } = await rpc.getTokenSupply(mint).send();
|
|
46
|
+
return { amount: BigInt(value.amount), decimals: value.decimals };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function loadVaultAndLpSupply(
|
|
50
|
+
rpc: ExtensionsRpc,
|
|
51
|
+
vault: Address,
|
|
52
|
+
): Promise<{ data: Vault; lpSupply: bigint; lpDecimals: number }> {
|
|
53
|
+
const account = await fetchVault(rpc, vault);
|
|
54
|
+
const lpMint = await vaultLpMintAddress(vault);
|
|
55
|
+
const { amount, decimals } = await fetchTokenSupply(rpc, lpMint);
|
|
56
|
+
return { data: account.data, lpSupply: amount, lpDecimals: decimals };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns the on-chain "asset per LP" ratio used by mint/burn math: total
|
|
61
|
+
* asset value divided by `total_lp_supply_incl_fees + unrealised management
|
|
62
|
+
* fee LP`. Mirrors what the deposit/withdraw handlers see after they call
|
|
63
|
+
* `handle_management_fee`. Returns 0 when there is no LP at all.
|
|
64
|
+
*/
|
|
65
|
+
export async function getCurrentAssetPerLpForVault(
|
|
66
|
+
rpc: ExtensionsRpc,
|
|
67
|
+
vault: Address,
|
|
68
|
+
): Promise<number> {
|
|
69
|
+
const { data, lpSupply } = await loadVaultAndLpSupply(rpc, vault);
|
|
70
|
+
|
|
71
|
+
const totalLpSupplyInclFees = getTotalLpSupplyInclFees({
|
|
72
|
+
lpSupply,
|
|
73
|
+
vaultAccumulatedLpAdminFees: data.feeState.accumulatedLpAdminFees,
|
|
74
|
+
vaultAccumulatedLpManagerFees: data.feeState.accumulatedLpManagerFees,
|
|
75
|
+
vaultAccumulatedLpProtocolFees: data.feeState.accumulatedLpProtocolFees,
|
|
76
|
+
vaultDeadWeight: data.deadWeight,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const unrealisedLpFees = calculateUnrealisedLpFees(
|
|
80
|
+
totalLpSupplyInclFees,
|
|
81
|
+
data.asset.totalValue,
|
|
82
|
+
data.feeUpdate.lastManagementFeeUpdateTs,
|
|
83
|
+
BigInt(getTotalManagementFeeBps(data.feeConfiguration)),
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const totalLpSupply = totalLpSupplyInclFees + unrealisedLpFees;
|
|
87
|
+
if (totalLpSupply === 0n) return 0;
|
|
88
|
+
|
|
89
|
+
return Number(data.asset.totalValue) / Number(totalLpSupply);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export type VaultLpSupplyBreakdown = {
|
|
93
|
+
circulating: bigint;
|
|
94
|
+
unharvestedFees: bigint;
|
|
95
|
+
deadWeight: bigint;
|
|
96
|
+
unrealisedFees: bigint;
|
|
97
|
+
total: bigint;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export async function getVaultLpSupplyBreakdown(
|
|
101
|
+
rpc: ExtensionsRpc,
|
|
102
|
+
vault: Address,
|
|
103
|
+
): Promise<VaultLpSupplyBreakdown> {
|
|
104
|
+
const { data, lpSupply } = await loadVaultAndLpSupply(rpc, vault);
|
|
105
|
+
|
|
106
|
+
const unharvestedFees =
|
|
107
|
+
data.feeState.accumulatedLpAdminFees +
|
|
108
|
+
data.feeState.accumulatedLpManagerFees +
|
|
109
|
+
data.feeState.accumulatedLpProtocolFees;
|
|
110
|
+
const deadWeight = data.deadWeight;
|
|
111
|
+
|
|
112
|
+
const currentTotalLp = lpSupply + unharvestedFees + deadWeight;
|
|
113
|
+
|
|
114
|
+
const unrealisedFees = calculateUnrealisedLpFees(
|
|
115
|
+
currentTotalLp,
|
|
116
|
+
data.asset.totalValue,
|
|
117
|
+
data.feeUpdate.lastManagementFeeUpdateTs,
|
|
118
|
+
BigInt(getTotalManagementFeeBps(data.feeConfiguration)),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
return {
|
|
122
|
+
circulating: lpSupply,
|
|
123
|
+
unharvestedFees,
|
|
124
|
+
deadWeight,
|
|
125
|
+
unrealisedFees,
|
|
126
|
+
total: currentTotalLp + unrealisedFees,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export async function calculateAssetsForWithdraw(
|
|
131
|
+
rpc: ExtensionsRpc,
|
|
132
|
+
vault: Address,
|
|
133
|
+
lpAmount: bigint,
|
|
134
|
+
): Promise<bigint> {
|
|
135
|
+
const { data, lpSupply } = await loadVaultAndLpSupply(rpc, vault);
|
|
136
|
+
|
|
137
|
+
return calculateAssetsForWithdrawAmount({
|
|
138
|
+
vaultTotalValue: data.asset.totalValue,
|
|
139
|
+
vaultLastUpdatedLockedProfit:
|
|
140
|
+
data.lockedProfitState.lastUpdatedLockedProfit,
|
|
141
|
+
vaultLastReport: data.lockedProfitState.lastReport,
|
|
142
|
+
vaultLockedProfitDegradationDuration:
|
|
143
|
+
data.vaultConfiguration.lockedProfitDegradationDuration,
|
|
144
|
+
vaultAccumulatedLpAdminFees: data.feeState.accumulatedLpAdminFees,
|
|
145
|
+
vaultAccumulatedLpManagerFees: data.feeState.accumulatedLpManagerFees,
|
|
146
|
+
vaultAccumulatedLpProtocolFees: data.feeState.accumulatedLpProtocolFees,
|
|
147
|
+
vaultDeadWeight: data.deadWeight,
|
|
148
|
+
vaultRedemptionFeeBps: data.feeConfiguration.redemptionFee,
|
|
149
|
+
vaultManagementFeeBps: getTotalManagementFeeBps(data.feeConfiguration),
|
|
150
|
+
vaultLastManagementFeeUpdateTs: data.feeUpdate.lastManagementFeeUpdateTs,
|
|
151
|
+
lpSupply,
|
|
152
|
+
lpAmount,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export async function calculateLpForWithdraw(
|
|
157
|
+
rpc: ExtensionsRpc,
|
|
158
|
+
vault: Address,
|
|
159
|
+
assetAmount: bigint,
|
|
160
|
+
): Promise<bigint> {
|
|
161
|
+
const { data, lpSupply } = await loadVaultAndLpSupply(rpc, vault);
|
|
162
|
+
|
|
163
|
+
return calculateLpForWithdrawAmount({
|
|
164
|
+
vaultTotalValue: data.asset.totalValue,
|
|
165
|
+
vaultLastUpdatedLockedProfit:
|
|
166
|
+
data.lockedProfitState.lastUpdatedLockedProfit,
|
|
167
|
+
vaultLastReport: data.lockedProfitState.lastReport,
|
|
168
|
+
vaultLockedProfitDegradationDuration:
|
|
169
|
+
data.vaultConfiguration.lockedProfitDegradationDuration,
|
|
170
|
+
vaultAccumulatedLpAdminFees: data.feeState.accumulatedLpAdminFees,
|
|
171
|
+
vaultAccumulatedLpManagerFees: data.feeState.accumulatedLpManagerFees,
|
|
172
|
+
vaultAccumulatedLpProtocolFees: data.feeState.accumulatedLpProtocolFees,
|
|
173
|
+
vaultDeadWeight: data.deadWeight,
|
|
174
|
+
vaultRedemptionFeeBps: data.feeConfiguration.redemptionFee,
|
|
175
|
+
vaultManagementFeeBps: getTotalManagementFeeBps(data.feeConfiguration),
|
|
176
|
+
vaultLastManagementFeeUpdateTs: data.feeUpdate.lastManagementFeeUpdateTs,
|
|
177
|
+
lpSupply,
|
|
178
|
+
assetAmount,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export async function calculateLpForDeposit(
|
|
183
|
+
rpc: ExtensionsRpc,
|
|
184
|
+
vault: Address,
|
|
185
|
+
assetAmount: bigint,
|
|
186
|
+
): Promise<bigint> {
|
|
187
|
+
const { data, lpSupply, lpDecimals } = await loadVaultAndLpSupply(rpc, vault);
|
|
188
|
+
|
|
189
|
+
// Asset decimals are only required when the LP pool is empty (1:1 mint).
|
|
190
|
+
// Avoid an extra RPC round-trip in the common case.
|
|
191
|
+
let assetDecimals = 0;
|
|
192
|
+
const lpSupplyInclAccumulatedFees = getTotalLpSupplyInclFees({
|
|
193
|
+
lpSupply,
|
|
194
|
+
vaultAccumulatedLpAdminFees: data.feeState.accumulatedLpAdminFees,
|
|
195
|
+
vaultAccumulatedLpManagerFees: data.feeState.accumulatedLpManagerFees,
|
|
196
|
+
vaultAccumulatedLpProtocolFees: data.feeState.accumulatedLpProtocolFees,
|
|
197
|
+
vaultDeadWeight: data.deadWeight,
|
|
198
|
+
});
|
|
199
|
+
const unrealisedLpFees = calculateUnrealisedLpFees(
|
|
200
|
+
lpSupplyInclAccumulatedFees,
|
|
201
|
+
data.asset.totalValue,
|
|
202
|
+
data.feeUpdate.lastManagementFeeUpdateTs,
|
|
203
|
+
BigInt(getTotalManagementFeeBps(data.feeConfiguration)),
|
|
204
|
+
);
|
|
205
|
+
const lpSupplyInclFees = lpSupplyInclAccumulatedFees + unrealisedLpFees;
|
|
206
|
+
if (lpSupplyInclFees === 0n) {
|
|
207
|
+
const { decimals } = await fetchTokenSupply(rpc, data.asset.mint);
|
|
208
|
+
assetDecimals = decimals;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return calculateLpForDepositAmount({
|
|
212
|
+
vaultTotalValue: data.asset.totalValue,
|
|
213
|
+
vaultAccumulatedLpAdminFees: data.feeState.accumulatedLpAdminFees,
|
|
214
|
+
vaultAccumulatedLpManagerFees: data.feeState.accumulatedLpManagerFees,
|
|
215
|
+
vaultAccumulatedLpProtocolFees: data.feeState.accumulatedLpProtocolFees,
|
|
216
|
+
vaultDeadWeight: data.deadWeight,
|
|
217
|
+
vaultIssuanceFeeBps: data.feeConfiguration.issuanceFee,
|
|
218
|
+
vaultManagementFeeBps: getTotalManagementFeeBps(data.feeConfiguration),
|
|
219
|
+
vaultLastManagementFeeUpdateTs: data.feeUpdate.lastManagementFeeUpdateTs,
|
|
220
|
+
lpSupply,
|
|
221
|
+
assetAmount,
|
|
222
|
+
assetDecimals,
|
|
223
|
+
lpDecimals,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
export const MAX_FEE_BPS = 10_000n;
|
|
2
|
+
export const SECONDS_PER_YEAR = BigInt(365 * 24 * 60 * 60);
|
|
3
|
+
/**
|
|
4
|
+
* Matches `DEAD_WEIGHT` in the program. The first deposit ever made into a
|
|
5
|
+
* vault donates this many LP units permanently to the vault to prevent
|
|
6
|
+
* inflation/donation attacks; subsequent deposits are unaffected.
|
|
7
|
+
*/
|
|
8
|
+
export const DEAD_WEIGHT_LP = 1_000n;
|
|
9
|
+
|
|
10
|
+
export function maxBigInt(a: bigint, b: bigint): bigint {
|
|
11
|
+
return a > b ? a : b;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function minBigInt(a: bigint, b: bigint): bigint {
|
|
15
|
+
return a < b ? a : b;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Ceiling division for positive bigints. */
|
|
19
|
+
export function ceilDivBigInt(a: bigint, b: bigint): bigint {
|
|
20
|
+
return (a + b - 1n) / b;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function nowSeconds(): bigint {
|
|
24
|
+
return BigInt(Math.floor(Date.now() / 1000));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Mirrors the program-side locked-profit decay: the locked profit drops
|
|
29
|
+
* linearly over `lockedProfitDegradationDuration` and is zero once that
|
|
30
|
+
* window has elapsed. Note: the legacy JS SDK measured elapsed time from
|
|
31
|
+
* `lastUpdatedLockedProfit` (an amount, not a timestamp), which produced
|
|
32
|
+
* incorrect values; this port follows the program, which uses `lastReport`.
|
|
33
|
+
*/
|
|
34
|
+
export function calculateLockedProfit(
|
|
35
|
+
lastUpdatedLockedProfit: bigint,
|
|
36
|
+
lockedProfitDegradationDuration: bigint,
|
|
37
|
+
currentTimeSec: bigint,
|
|
38
|
+
lastReport: bigint,
|
|
39
|
+
): bigint {
|
|
40
|
+
if (lockedProfitDegradationDuration === 0n) return 0n;
|
|
41
|
+
|
|
42
|
+
const duration = currentTimeSec - lastReport;
|
|
43
|
+
if (duration <= 0n) return lastUpdatedLockedProfit;
|
|
44
|
+
if (duration >= lockedProfitDegradationDuration) return 0n;
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
(lastUpdatedLockedProfit *
|
|
48
|
+
(lockedProfitDegradationDuration - duration)) /
|
|
49
|
+
lockedProfitDegradationDuration
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Estimates the LP that would be minted to cover management fees accrued
|
|
55
|
+
* since `lastManagementFeeUpdateTs`. Returns 0n when the inputs make the
|
|
56
|
+
* fee calculation undefined (no time elapsed, no assets, etc.).
|
|
57
|
+
*
|
|
58
|
+
* Both rounding steps are ceiling divisions, matching the program's
|
|
59
|
+
* `calc_management_fee_amount_in_asset` and `calc_fee_lp_to_mint` — flooring
|
|
60
|
+
* the asset fee first would understate the LP that should be minted whenever
|
|
61
|
+
* the accrued fee isn't an exact multiple of the denominator.
|
|
62
|
+
*/
|
|
63
|
+
export function calculateUnrealisedLpFees(
|
|
64
|
+
currentTotalLp: bigint,
|
|
65
|
+
assetTotalValue: bigint,
|
|
66
|
+
lastManagementFeeUpdateTs: bigint,
|
|
67
|
+
managementFeeBps: bigint,
|
|
68
|
+
currentTimeSec: bigint = nowSeconds(),
|
|
69
|
+
): bigint {
|
|
70
|
+
if (
|
|
71
|
+
lastManagementFeeUpdateTs === 0n ||
|
|
72
|
+
assetTotalValue === 0n ||
|
|
73
|
+
managementFeeBps === 0n
|
|
74
|
+
) {
|
|
75
|
+
return 0n;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const timeElapsed = maxBigInt(0n, currentTimeSec - lastManagementFeeUpdateTs);
|
|
79
|
+
if (timeElapsed === 0n) return 0n;
|
|
80
|
+
|
|
81
|
+
const feeAmountInAsset = ceilDivBigInt(
|
|
82
|
+
assetTotalValue * timeElapsed * managementFeeBps,
|
|
83
|
+
MAX_FEE_BPS * SECONDS_PER_YEAR,
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// Matches the program's `handle_management_fee`: when accrued fees would
|
|
87
|
+
// meet or exceed the vault's asset value, the on-chain instruction reverts
|
|
88
|
+
// with FeeExceedsTotalAssetValue. Quoting 0 here would silently mask a
|
|
89
|
+
// state where every deposit/withdraw transaction is going to fail.
|
|
90
|
+
if (feeAmountInAsset >= assetTotalValue) {
|
|
91
|
+
throw new Error(
|
|
92
|
+
"Accrued management fees exceed vault total asset value (program would revert with FeeExceedsTotalAssetValue)",
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const lpDenominator = assetTotalValue - feeAmountInAsset;
|
|
97
|
+
return ceilDivBigInt(feeAmountInAsset * currentTotalLp, lpDenominator);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Total LP supply the program treats as outstanding for accounting:
|
|
102
|
+
* circulating LP + accumulated (but unharvested) fee LP + dead weight LP.
|
|
103
|
+
* Matches `Vault::get_total_lp_supply_incl_fees` in the program.
|
|
104
|
+
*/
|
|
105
|
+
export function getTotalLpSupplyInclFees(args: {
|
|
106
|
+
lpSupply: bigint;
|
|
107
|
+
vaultAccumulatedLpAdminFees: bigint;
|
|
108
|
+
vaultAccumulatedLpManagerFees: bigint;
|
|
109
|
+
vaultAccumulatedLpProtocolFees: bigint;
|
|
110
|
+
vaultDeadWeight: bigint;
|
|
111
|
+
}): bigint {
|
|
112
|
+
return (
|
|
113
|
+
args.lpSupply +
|
|
114
|
+
args.vaultAccumulatedLpAdminFees +
|
|
115
|
+
args.vaultAccumulatedLpManagerFees +
|
|
116
|
+
args.vaultAccumulatedLpProtocolFees +
|
|
117
|
+
args.vaultDeadWeight
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export type AssetsForWithdrawInputs = {
|
|
122
|
+
vaultTotalValue: bigint;
|
|
123
|
+
vaultLastUpdatedLockedProfit: bigint;
|
|
124
|
+
vaultLastReport: bigint;
|
|
125
|
+
vaultLockedProfitDegradationDuration: bigint;
|
|
126
|
+
vaultAccumulatedLpAdminFees: bigint;
|
|
127
|
+
vaultAccumulatedLpManagerFees: bigint;
|
|
128
|
+
vaultAccumulatedLpProtocolFees: bigint;
|
|
129
|
+
vaultDeadWeight: bigint;
|
|
130
|
+
vaultRedemptionFeeBps: number;
|
|
131
|
+
vaultManagementFeeBps: number;
|
|
132
|
+
vaultLastManagementFeeUpdateTs: bigint;
|
|
133
|
+
lpSupply: bigint;
|
|
134
|
+
lpAmount: bigint;
|
|
135
|
+
currentTimeSec?: bigint;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export function calculateAssetsForWithdrawAmount(
|
|
139
|
+
inputs: AssetsForWithdrawInputs,
|
|
140
|
+
): bigint {
|
|
141
|
+
const {
|
|
142
|
+
vaultTotalValue,
|
|
143
|
+
vaultLastUpdatedLockedProfit,
|
|
144
|
+
vaultLastReport,
|
|
145
|
+
vaultLockedProfitDegradationDuration,
|
|
146
|
+
vaultAccumulatedLpAdminFees,
|
|
147
|
+
vaultAccumulatedLpManagerFees,
|
|
148
|
+
vaultAccumulatedLpProtocolFees,
|
|
149
|
+
vaultDeadWeight,
|
|
150
|
+
vaultRedemptionFeeBps,
|
|
151
|
+
vaultManagementFeeBps,
|
|
152
|
+
vaultLastManagementFeeUpdateTs,
|
|
153
|
+
lpSupply,
|
|
154
|
+
lpAmount,
|
|
155
|
+
currentTimeSec = nowSeconds(),
|
|
156
|
+
} = inputs;
|
|
157
|
+
|
|
158
|
+
if (lpSupply <= 0n) throw new Error("Invalid LP supply");
|
|
159
|
+
if (vaultTotalValue <= 0n) throw new Error("Invalid total assets");
|
|
160
|
+
|
|
161
|
+
const lockedProfit = calculateLockedProfit(
|
|
162
|
+
vaultLastUpdatedLockedProfit,
|
|
163
|
+
vaultLockedProfitDegradationDuration,
|
|
164
|
+
currentTimeSec,
|
|
165
|
+
vaultLastReport,
|
|
166
|
+
);
|
|
167
|
+
const totalUnlockedValue = vaultTotalValue - lockedProfit;
|
|
168
|
+
|
|
169
|
+
const lpSupplyInclAccumulatedFees = getTotalLpSupplyInclFees({
|
|
170
|
+
lpSupply,
|
|
171
|
+
vaultAccumulatedLpAdminFees,
|
|
172
|
+
vaultAccumulatedLpManagerFees,
|
|
173
|
+
vaultAccumulatedLpProtocolFees,
|
|
174
|
+
vaultDeadWeight,
|
|
175
|
+
});
|
|
176
|
+
const unrealisedLpFees = calculateUnrealisedLpFees(
|
|
177
|
+
lpSupplyInclAccumulatedFees,
|
|
178
|
+
vaultTotalValue,
|
|
179
|
+
vaultLastManagementFeeUpdateTs,
|
|
180
|
+
BigInt(vaultManagementFeeBps),
|
|
181
|
+
currentTimeSec,
|
|
182
|
+
);
|
|
183
|
+
const lpSupplyInclFees = lpSupplyInclAccumulatedFees + unrealisedLpFees;
|
|
184
|
+
|
|
185
|
+
// The program floors asset_to_redeem (favours the vault on the redeem side).
|
|
186
|
+
const numerator =
|
|
187
|
+
lpAmount * totalUnlockedValue * BigInt(10_000 - vaultRedemptionFeeBps);
|
|
188
|
+
const denominator = lpSupplyInclFees * 10_000n;
|
|
189
|
+
|
|
190
|
+
return numerator / denominator;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export type LpForWithdrawInputs = Omit<AssetsForWithdrawInputs, "lpAmount"> & {
|
|
194
|
+
assetAmount: bigint;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Computes the LP that must be burned to redeem at least `assetAmount`,
|
|
199
|
+
* matching `calc_withdraw_lp_to_burn` in the program (which rounds up so
|
|
200
|
+
* the burn always covers the requested asset amount). Flooring here would
|
|
201
|
+
* underquote the burn and either revert or short-redeem.
|
|
202
|
+
*/
|
|
203
|
+
export function calculateLpForWithdrawAmount(
|
|
204
|
+
inputs: LpForWithdrawInputs,
|
|
205
|
+
): bigint {
|
|
206
|
+
const {
|
|
207
|
+
vaultTotalValue,
|
|
208
|
+
vaultLastUpdatedLockedProfit,
|
|
209
|
+
vaultLastReport,
|
|
210
|
+
vaultLockedProfitDegradationDuration,
|
|
211
|
+
vaultAccumulatedLpAdminFees,
|
|
212
|
+
vaultAccumulatedLpManagerFees,
|
|
213
|
+
vaultAccumulatedLpProtocolFees,
|
|
214
|
+
vaultDeadWeight,
|
|
215
|
+
vaultRedemptionFeeBps,
|
|
216
|
+
vaultManagementFeeBps,
|
|
217
|
+
vaultLastManagementFeeUpdateTs,
|
|
218
|
+
lpSupply,
|
|
219
|
+
assetAmount,
|
|
220
|
+
currentTimeSec = nowSeconds(),
|
|
221
|
+
} = inputs;
|
|
222
|
+
|
|
223
|
+
if (lpSupply <= 0n) throw new Error("Invalid LP supply");
|
|
224
|
+
if (vaultTotalValue <= 0n) throw new Error("Invalid total assets");
|
|
225
|
+
|
|
226
|
+
const lockedProfit = calculateLockedProfit(
|
|
227
|
+
vaultLastUpdatedLockedProfit,
|
|
228
|
+
vaultLockedProfitDegradationDuration,
|
|
229
|
+
currentTimeSec,
|
|
230
|
+
vaultLastReport,
|
|
231
|
+
);
|
|
232
|
+
const totalUnlockedValue = vaultTotalValue - lockedProfit;
|
|
233
|
+
|
|
234
|
+
const lpSupplyInclAccumulatedFees = getTotalLpSupplyInclFees({
|
|
235
|
+
lpSupply,
|
|
236
|
+
vaultAccumulatedLpAdminFees,
|
|
237
|
+
vaultAccumulatedLpManagerFees,
|
|
238
|
+
vaultAccumulatedLpProtocolFees,
|
|
239
|
+
vaultDeadWeight,
|
|
240
|
+
});
|
|
241
|
+
const unrealisedLpFees = calculateUnrealisedLpFees(
|
|
242
|
+
lpSupplyInclAccumulatedFees,
|
|
243
|
+
vaultTotalValue,
|
|
244
|
+
vaultLastManagementFeeUpdateTs,
|
|
245
|
+
BigInt(vaultManagementFeeBps),
|
|
246
|
+
currentTimeSec,
|
|
247
|
+
);
|
|
248
|
+
const lpSupplyInclFees = lpSupplyInclAccumulatedFees + unrealisedLpFees;
|
|
249
|
+
|
|
250
|
+
const numerator = assetAmount * lpSupplyInclFees * 10_000n;
|
|
251
|
+
const denominator =
|
|
252
|
+
totalUnlockedValue * BigInt(10_000 - vaultRedemptionFeeBps);
|
|
253
|
+
|
|
254
|
+
return ceilDivBigInt(numerator, denominator);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export type LpForDepositInputs = {
|
|
258
|
+
vaultTotalValue: bigint;
|
|
259
|
+
vaultAccumulatedLpAdminFees: bigint;
|
|
260
|
+
vaultAccumulatedLpManagerFees: bigint;
|
|
261
|
+
vaultAccumulatedLpProtocolFees: bigint;
|
|
262
|
+
vaultDeadWeight: bigint;
|
|
263
|
+
vaultIssuanceFeeBps: number;
|
|
264
|
+
vaultManagementFeeBps: number;
|
|
265
|
+
vaultLastManagementFeeUpdateTs: bigint;
|
|
266
|
+
lpSupply: bigint;
|
|
267
|
+
assetAmount: bigint;
|
|
268
|
+
/** Required when the pool is empty so the 1:1 mint can scale precision correctly. */
|
|
269
|
+
assetDecimals: number;
|
|
270
|
+
/** Required when the pool is empty so the 1:1 mint can scale precision correctly. */
|
|
271
|
+
lpDecimals: number;
|
|
272
|
+
currentTimeSec?: bigint;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
export function calculateLpForDepositAmount(inputs: LpForDepositInputs): bigint {
|
|
276
|
+
const {
|
|
277
|
+
vaultTotalValue,
|
|
278
|
+
vaultAccumulatedLpAdminFees,
|
|
279
|
+
vaultAccumulatedLpManagerFees,
|
|
280
|
+
vaultAccumulatedLpProtocolFees,
|
|
281
|
+
vaultDeadWeight,
|
|
282
|
+
vaultIssuanceFeeBps,
|
|
283
|
+
vaultManagementFeeBps,
|
|
284
|
+
vaultLastManagementFeeUpdateTs,
|
|
285
|
+
lpSupply,
|
|
286
|
+
assetAmount,
|
|
287
|
+
assetDecimals,
|
|
288
|
+
lpDecimals,
|
|
289
|
+
currentTimeSec = nowSeconds(),
|
|
290
|
+
} = inputs;
|
|
291
|
+
|
|
292
|
+
const lpSupplyInclAccumulatedFees = getTotalLpSupplyInclFees({
|
|
293
|
+
lpSupply,
|
|
294
|
+
vaultAccumulatedLpAdminFees,
|
|
295
|
+
vaultAccumulatedLpManagerFees,
|
|
296
|
+
vaultAccumulatedLpProtocolFees,
|
|
297
|
+
vaultDeadWeight,
|
|
298
|
+
});
|
|
299
|
+
const unrealisedLpFees = calculateUnrealisedLpFees(
|
|
300
|
+
lpSupplyInclAccumulatedFees,
|
|
301
|
+
vaultTotalValue,
|
|
302
|
+
vaultLastManagementFeeUpdateTs,
|
|
303
|
+
BigInt(vaultManagementFeeBps),
|
|
304
|
+
currentTimeSec,
|
|
305
|
+
);
|
|
306
|
+
const lpSupplyInclFees = lpSupplyInclAccumulatedFees + unrealisedLpFees;
|
|
307
|
+
|
|
308
|
+
let lpToMintBeforeDeadWeight: bigint;
|
|
309
|
+
if (lpSupplyInclFees === 0n) {
|
|
310
|
+
lpToMintBeforeDeadWeight =
|
|
311
|
+
(assetAmount * 10n ** BigInt(lpDecimals)) / 10n ** BigInt(assetDecimals);
|
|
312
|
+
} else {
|
|
313
|
+
// The program floors mint quantity (favours existing holders on the
|
|
314
|
+
// mint side), so we mirror that here.
|
|
315
|
+
const numerator =
|
|
316
|
+
assetAmount * lpSupplyInclFees * BigInt(10_000 - vaultIssuanceFeeBps);
|
|
317
|
+
const totalAssetPostDeposit = vaultTotalValue + assetAmount;
|
|
318
|
+
const denominator =
|
|
319
|
+
totalAssetPostDeposit * 10_000n -
|
|
320
|
+
assetAmount * BigInt(10_000 - vaultIssuanceFeeBps);
|
|
321
|
+
lpToMintBeforeDeadWeight = numerator / denominator;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// First-ever deposit pays DEAD_WEIGHT_LP into the vault permanently. The
|
|
325
|
+
// program rejects deposits that don't clear that floor, so we surface the
|
|
326
|
+
// same condition here rather than silently quoting a value the user can't
|
|
327
|
+
// actually receive.
|
|
328
|
+
if (vaultDeadWeight === 0n) {
|
|
329
|
+
if (lpToMintBeforeDeadWeight < DEAD_WEIGHT_LP) {
|
|
330
|
+
throw new Error(
|
|
331
|
+
`First deposit must mint at least ${DEAD_WEIGHT_LP} LP (would mint ${lpToMintBeforeDeadWeight})`,
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
return lpToMintBeforeDeadWeight - DEAD_WEIGHT_LP;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return lpToMintBeforeDeadWeight;
|
|
338
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getAddressEncoder,
|
|
3
|
+
getBytesEncoder,
|
|
4
|
+
getProgramDerivedAddress,
|
|
5
|
+
type Address,
|
|
6
|
+
type ProgramDerivedAddress,
|
|
7
|
+
} from "@solana/kit";
|
|
8
|
+
|
|
9
|
+
import { findVaultLpMintPda, VOLTR_VAULT_PROGRAM_ADDRESS } from "../generated";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Metaplex Token Metadata program ID. Codama can't derive PDAs that depend on
|
|
13
|
+
* an external program, so we keep this helper hand-written.
|
|
14
|
+
*/
|
|
15
|
+
export const METAPLEX_METADATA_PROGRAM_ADDRESS =
|
|
16
|
+
"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" as Address<"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s">;
|
|
17
|
+
|
|
18
|
+
const METADATA_SEED = new Uint8Array([
|
|
19
|
+
109, 101, 116, 97, 100, 97, 116, 97,
|
|
20
|
+
]); // "metadata"
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Derives the LP metadata PDA owned by the Metaplex Token Metadata program for
|
|
24
|
+
* a given Voltr vault. Mirrors the legacy SDK's `findLpMetadataAccount(vault)`
|
|
25
|
+
* convenience: caller supplies the vault, we compute the LP mint PDA and then
|
|
26
|
+
* the metadata PDA off of it.
|
|
27
|
+
*/
|
|
28
|
+
export async function findLpMetadataPda(
|
|
29
|
+
seeds: { vault: Address },
|
|
30
|
+
config: { voltrProgramAddress?: Address } = {},
|
|
31
|
+
): Promise<ProgramDerivedAddress> {
|
|
32
|
+
const [lpMint] = await findVaultLpMintPda(
|
|
33
|
+
{ vault: seeds.vault },
|
|
34
|
+
{
|
|
35
|
+
programAddress:
|
|
36
|
+
config.voltrProgramAddress ?? VOLTR_VAULT_PROGRAM_ADDRESS,
|
|
37
|
+
},
|
|
38
|
+
);
|
|
39
|
+
return await getProgramDerivedAddress({
|
|
40
|
+
programAddress: METAPLEX_METADATA_PROGRAM_ADDRESS,
|
|
41
|
+
seeds: [
|
|
42
|
+
getBytesEncoder().encode(METADATA_SEED),
|
|
43
|
+
getAddressEncoder().encode(METAPLEX_METADATA_PROGRAM_ADDRESS),
|
|
44
|
+
getAddressEncoder().encode(lpMint),
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
|
|
3
|
+
import { fetchVault } from "../generated";
|
|
4
|
+
import { fetchAllStrategyInitReceiptAccountsOfVault } from "./batchFetchers";
|
|
5
|
+
import { convertDecimalBitsToNumber } from "./decimal";
|
|
6
|
+
import type { ExtensionsRpc } from "./rpc";
|
|
7
|
+
|
|
8
|
+
export type StrategyPositionInfo = {
|
|
9
|
+
strategyId: Address;
|
|
10
|
+
/** Position value in raw asset base units. */
|
|
11
|
+
amount: bigint;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type VaultPositionAndTotalValues = {
|
|
15
|
+
/** Total value of the vault in raw asset base units. */
|
|
16
|
+
totalValue: bigint;
|
|
17
|
+
strategies: StrategyPositionInfo[];
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export async function getPositionAndTotalValuesForVault(
|
|
21
|
+
rpc: ExtensionsRpc,
|
|
22
|
+
vault: Address,
|
|
23
|
+
): Promise<VaultPositionAndTotalValues> {
|
|
24
|
+
const [vaultAccount, strategyAccounts] = await Promise.all([
|
|
25
|
+
fetchVault(rpc, vault),
|
|
26
|
+
fetchAllStrategyInitReceiptAccountsOfVault(rpc, vault),
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
totalValue: vaultAccount.data.asset.totalValue,
|
|
31
|
+
strategies: strategyAccounts.map((account) => ({
|
|
32
|
+
strategyId: account.data.strategy,
|
|
33
|
+
amount: account.data.positionValue,
|
|
34
|
+
})),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type HighWaterMarkInfo = {
|
|
39
|
+
highestAssetPerLp: number;
|
|
40
|
+
lastUpdatedTs: bigint;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export async function getHighWaterMarkForVault(
|
|
44
|
+
rpc: ExtensionsRpc,
|
|
45
|
+
vault: Address,
|
|
46
|
+
): Promise<HighWaterMarkInfo> {
|
|
47
|
+
const account = await fetchVault(rpc, vault);
|
|
48
|
+
return {
|
|
49
|
+
highestAssetPerLp: convertDecimalBitsToNumber(
|
|
50
|
+
account.data.highWaterMark.highestAssetPerLpDecimalBits,
|
|
51
|
+
),
|
|
52
|
+
lastUpdatedTs: account.data.highWaterMark.lastUpdatedTs,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
GetAccountInfoApi,
|
|
3
|
+
GetMultipleAccountsApi,
|
|
4
|
+
GetProgramAccountsApi,
|
|
5
|
+
GetTokenSupplyApi,
|
|
6
|
+
Rpc,
|
|
7
|
+
} from "@solana/kit";
|
|
8
|
+
|
|
9
|
+
export type GetAccountInfoRpc = Rpc<GetAccountInfoApi>;
|
|
10
|
+
export type GetMultipleAccountsRpc = Rpc<GetMultipleAccountsApi>;
|
|
11
|
+
export type GetProgramAccountsRpc = Rpc<GetProgramAccountsApi>;
|
|
12
|
+
export type GetTokenSupplyRpc = Rpc<GetTokenSupplyApi>;
|
|
13
|
+
|
|
14
|
+
/** Combined RPC interface used by the higher-level extension helpers. */
|
|
15
|
+
export type ExtensionsRpc = Rpc<
|
|
16
|
+
GetAccountInfoApi & GetTokenSupplyApi & GetProgramAccountsApi
|
|
17
|
+
>;
|