@steerprotocol/sdk 1.30.4 → 1.30.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/const/amm/configs/ammConfig.js +33 -34
- package/dist/cjs/const/amm/configs/ammConfig.js.map +1 -1
- package/dist/cjs/const/amm/configs/protocols/index.js +0 -39
- package/dist/cjs/const/amm/configs/protocols/index.js.map +1 -1
- package/dist/cjs/const/stabilityVaults/index.js +1 -1
- package/dist/cjs/const/stabilityVaults/index.js.map +1 -1
- package/dist/esm/base/FeeManagerClient.js +26 -22
- package/dist/esm/base/FeeManagerClient.js.map +1 -1
- package/dist/esm/base/PoolClient.js +19 -15
- package/dist/esm/base/PoolClient.js.map +1 -1
- package/dist/esm/base/SmartRewardClient.js +10 -6
- package/dist/esm/base/SmartRewardClient.js.map +1 -1
- package/dist/esm/base/SmartRewards.js +11 -7
- package/dist/esm/base/SmartRewards.js.map +1 -1
- package/dist/esm/base/StakingClient.js +18 -14
- package/dist/esm/base/StakingClient.js.map +1 -1
- package/dist/esm/base/SubgraphClient.js +8 -4
- package/dist/esm/base/SubgraphClient.js.map +1 -1
- package/dist/esm/base/VaultClient.js +55 -37
- package/dist/esm/base/VaultClient.js.map +1 -1
- package/dist/esm/base/vault/deposit/index.js +42 -38
- package/dist/esm/base/vault/deposit/index.js.map +1 -1
- package/dist/esm/base/vault/deposit/types.js +2 -1
- package/dist/esm/base/vault/single-asset/calculateLimitPrice.js +39 -32
- package/dist/esm/base/vault/single-asset/calculateLimitPrice.js.map +1 -1
- package/dist/esm/base/vault/single-asset/calculateSwapAmount.js +8 -5
- package/dist/esm/base/vault/single-asset/calculateSwapAmount.js.map +1 -1
- package/dist/esm/base/vault/single-asset/estimateLpTokens.js +12 -7
- package/dist/esm/base/vault/single-asset/estimateLpTokens.js.map +1 -1
- package/dist/esm/base/vault/single-asset/index.js +32 -6
- package/dist/esm/base/vault/single-asset/index.js.map +1 -1
- package/dist/esm/base/vault/single-asset/simulateSwap.js +30 -24
- package/dist/esm/base/vault/single-asset/simulateSwap.js.map +1 -1
- package/dist/esm/base/vault/single-asset/singleAssetDeposit.js +33 -29
- package/dist/esm/base/vault/single-asset/singleAssetDeposit.js.map +1 -1
- package/dist/esm/base/vault/single-asset/types.js +5 -2
- package/dist/esm/base/vault/single-asset/types.js.map +1 -1
- package/dist/esm/base/vault/utils.js +16 -7
- package/dist/esm/base/vault/utils.js.map +1 -1
- package/dist/esm/base/vault/withdraw/index.js +10 -6
- package/dist/esm/base/vault/withdraw/index.js.map +1 -1
- package/dist/esm/base/vault/withdraw/types.js +2 -1
- package/dist/esm/client.js +15 -11
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/const/abis/UniswapPool.js +4 -1
- package/dist/esm/const/abis/UniswapPool.js.map +1 -1
- package/dist/esm/const/abis/erc1155.js +4 -1
- package/dist/esm/const/abis/erc1155.js.map +1 -1
- package/dist/esm/const/abis/erc20.js +4 -1
- package/dist/esm/const/abis/erc20.js.map +1 -1
- package/dist/esm/const/abis/erc721.js +4 -1
- package/dist/esm/const/abis/erc721.js.map +1 -1
- package/dist/esm/const/abis/feeManager.js +4 -1
- package/dist/esm/const/abis/feeManager.js.map +1 -1
- package/dist/esm/const/abis/index.js +24 -8
- package/dist/esm/const/abis/index.js.map +1 -1
- package/dist/esm/const/abis/quoter.js +9 -6
- package/dist/esm/const/abis/quoter.js.map +1 -1
- package/dist/esm/const/abis/singleTokenDeposit.js +4 -1
- package/dist/esm/const/abis/singleTokenDeposit.js.map +1 -1
- package/dist/esm/const/abis/vaultFees.js +4 -1
- package/dist/esm/const/abis/vaultFees.js.map +1 -1
- package/dist/esm/const/amm/configs/ammConfig.js +98 -95
- package/dist/esm/const/amm/configs/ammConfig.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/aerodrome-v2.js +12 -8
- package/dist/esm/const/amm/configs/protocols/aerodrome-v2.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/aerodrome.js +12 -8
- package/dist/esm/const/amm/configs/protocols/aerodrome.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/arthswap.js +14 -10
- package/dist/esm/const/amm/configs/protocols/arthswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/baseswap.js +11 -7
- package/dist/esm/const/amm/configs/protocols/baseswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/basex.js +12 -8
- package/dist/esm/const/amm/configs/protocols/basex.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/beam.js +11 -7
- package/dist/esm/const/amm/configs/protocols/beam.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/beamswap.js +11 -7
- package/dist/esm/const/amm/configs/protocols/beamswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/blackhole.js +12 -8
- package/dist/esm/const/amm/configs/protocols/blackhole.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/camelot.js +17 -13
- package/dist/esm/const/amm/configs/protocols/camelot.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/crust.js +11 -7
- package/dist/esm/const/amm/configs/protocols/crust.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/cypher.js +13 -9
- package/dist/esm/const/amm/configs/protocols/cypher.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/dodo.js +11 -7
- package/dist/esm/const/amm/configs/protocols/dodo.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/dragonswap.js +11 -7
- package/dist/esm/const/amm/configs/protocols/dragonswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/eddy.js +11 -7
- package/dist/esm/const/amm/configs/protocols/eddy.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/equilibre.js +11 -7
- package/dist/esm/const/amm/configs/protocols/equilibre.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/fenix.js +11 -7
- package/dist/esm/const/amm/configs/protocols/fenix.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/forge.js +13 -9
- package/dist/esm/const/amm/configs/protocols/forge.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/fusionx.js +12 -8
- package/dist/esm/const/amm/configs/protocols/fusionx.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/glyph.js +13 -9
- package/dist/esm/const/amm/configs/protocols/glyph.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/henjin.js +11 -7
- package/dist/esm/const/amm/configs/protocols/henjin.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/hercules.js +11 -7
- package/dist/esm/const/amm/configs/protocols/hercules.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/horiza.js +13 -9
- package/dist/esm/const/amm/configs/protocols/horiza.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/index.js +56 -79
- package/dist/esm/const/amm/configs/protocols/index.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/katana.js +10 -6
- package/dist/esm/const/amm/configs/protocols/katana.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/katanaIntegral.js +10 -6
- package/dist/esm/const/amm/configs/protocols/katanaIntegral.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/kim.js +15 -11
- package/dist/esm/const/amm/configs/protocols/kim.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/kinetix.js +14 -10
- package/dist/esm/const/amm/configs/protocols/kinetix.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/kodiak.js +14 -10
- package/dist/esm/const/amm/configs/protocols/kodiak.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/kyo.js +12 -8
- package/dist/esm/const/amm/configs/protocols/kyo.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/linehub.js +11 -7
- package/dist/esm/const/amm/configs/protocols/linehub.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/lynex.js +13 -9
- package/dist/esm/const/amm/configs/protocols/lynex.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/machinex.js +13 -9
- package/dist/esm/const/amm/configs/protocols/machinex.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/maia.js +13 -9
- package/dist/esm/const/amm/configs/protocols/maia.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/metavault.js +16 -12
- package/dist/esm/const/amm/configs/protocols/metavault.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/nest.js +12 -8
- package/dist/esm/const/amm/configs/protocols/nest.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/novaswap.js +11 -7
- package/dist/esm/const/amm/configs/protocols/novaswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/ocelex.js +11 -7
- package/dist/esm/const/amm/configs/protocols/ocelex.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/pancakeswap.js +17 -13
- package/dist/esm/const/amm/configs/protocols/pancakeswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/poolshark.js +11 -7
- package/dist/esm/const/amm/configs/protocols/poolshark.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/quickswap-algebra.js +12 -8
- package/dist/esm/const/amm/configs/protocols/quickswap-algebra.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/quickswap-integral.js +17 -13
- package/dist/esm/const/amm/configs/protocols/quickswap-integral.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/quickswap-univ3.js +20 -16
- package/dist/esm/const/amm/configs/protocols/quickswap-univ3.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/quickswap.js +18 -14
- package/dist/esm/const/amm/configs/protocols/quickswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/retro.js +13 -9
- package/dist/esm/const/amm/configs/protocols/retro.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/sailor.js +11 -7
- package/dist/esm/const/amm/configs/protocols/sailor.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/shadow.js +13 -9
- package/dist/esm/const/amm/configs/protocols/shadow.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/silverswap.js +15 -11
- package/dist/esm/const/amm/configs/protocols/silverswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/spark-integral.js +12 -8
- package/dist/esm/const/amm/configs/protocols/spark-integral.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/spark.js +11 -7
- package/dist/esm/const/amm/configs/protocols/spark.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/spark32.js +11 -7
- package/dist/esm/const/amm/configs/protocols/spark32.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/spookyswap.js +11 -7
- package/dist/esm/const/amm/configs/protocols/spookyswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/stellaswap.js +13 -9
- package/dist/esm/const/amm/configs/protocols/stellaswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/supswap.js +11 -7
- package/dist/esm/const/amm/configs/protocols/supswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/sushi.js +73 -69
- package/dist/esm/const/amm/configs/protocols/sushi.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/swapmode.js +11 -7
- package/dist/esm/const/amm/configs/protocols/swapmode.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/swapsicle.js +11 -7
- package/dist/esm/const/amm/configs/protocols/swapsicle.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/thena.js +13 -9
- package/dist/esm/const/amm/configs/protocols/thena.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/thick.js +12 -8
- package/dist/esm/const/amm/configs/protocols/thick.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/thickv2.js +12 -8
- package/dist/esm/const/amm/configs/protocols/thickv2.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/thruster.js +12 -8
- package/dist/esm/const/amm/configs/protocols/thruster.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/uniswap.js +83 -79
- package/dist/esm/const/amm/configs/protocols/uniswap.js.map +1 -1
- package/dist/esm/const/amm/configs/protocols/wasabee.js +11 -7
- package/dist/esm/const/amm/configs/protocols/wasabee.js.map +1 -1
- package/dist/esm/const/amm/index.js +19 -3
- package/dist/esm/const/amm/index.js.map +1 -1
- package/dist/esm/const/amm/utils/beacon.js +76 -70
- package/dist/esm/const/amm/utils/beacon.js.map +1 -1
- package/dist/esm/const/amm/utils/contracts.js +26 -16
- package/dist/esm/const/amm/utils/contracts.js.map +1 -1
- package/dist/esm/const/amm/utils/index.js +46 -22
- package/dist/esm/const/amm/utils/index.js.map +1 -1
- package/dist/esm/const/amm/utils/protocol.js +24 -16
- package/dist/esm/const/amm/utils/protocol.js.map +1 -1
- package/dist/esm/const/api.js +7 -3
- package/dist/esm/const/api.js.map +1 -1
- package/dist/esm/const/capabilities.js +20 -15
- package/dist/esm/const/capabilities.js.map +1 -1
- package/dist/esm/const/chain.js +12 -9
- package/dist/esm/const/chain.js.map +1 -1
- package/dist/esm/const/deployments/abis.js +4 -1
- package/dist/esm/const/deployments/abis.js.map +1 -1
- package/dist/esm/const/deployments/apechain.js +4 -1
- package/dist/esm/const/deployments/apechain.js.map +1 -1
- package/dist/esm/const/deployments/arbitrum.js +4 -1
- package/dist/esm/const/deployments/arbitrum.js.map +1 -1
- package/dist/esm/const/deployments/arbitrumgoerli.js +4 -1
- package/dist/esm/const/deployments/arbitrumgoerli.js.map +1 -1
- package/dist/esm/const/deployments/astar.js +4 -1
- package/dist/esm/const/deployments/astar.js.map +1 -1
- package/dist/esm/const/deployments/astarzkevm.js +4 -1
- package/dist/esm/const/deployments/astarzkevm.js.map +1 -1
- package/dist/esm/const/deployments/avalanche.js +4 -1
- package/dist/esm/const/deployments/avalanche.js.map +1 -1
- package/dist/esm/const/deployments/bartiotest.js +4 -1
- package/dist/esm/const/deployments/bartiotest.js.map +1 -1
- package/dist/esm/const/deployments/base.js +4 -1
- package/dist/esm/const/deployments/base.js.map +1 -1
- package/dist/esm/const/deployments/bera.js +4 -1
- package/dist/esm/const/deployments/bera.js.map +1 -1
- package/dist/esm/const/deployments/berachainbartio.js +4 -1
- package/dist/esm/const/deployments/berachainbartio.js.map +1 -1
- package/dist/esm/const/deployments/blast.js +4 -1
- package/dist/esm/const/deployments/blast.js.map +1 -1
- package/dist/esm/const/deployments/bsc.js +4 -1
- package/dist/esm/const/deployments/bsc.js.map +1 -1
- package/dist/esm/const/deployments/celo.js +4 -1
- package/dist/esm/const/deployments/celo.js.map +1 -1
- package/dist/esm/const/deployments/core.js +4 -1
- package/dist/esm/const/deployments/core.js.map +1 -1
- package/dist/esm/const/deployments/eth.js +4 -1
- package/dist/esm/const/deployments/eth.js.map +1 -1
- package/dist/esm/const/deployments/evmos.js +4 -1
- package/dist/esm/const/deployments/evmos.js.map +1 -1
- package/dist/esm/const/deployments/fantom.js +4 -1
- package/dist/esm/const/deployments/fantom.js.map +1 -1
- package/dist/esm/const/deployments/filecoin.js +4 -1
- package/dist/esm/const/deployments/filecoin.js.map +1 -1
- package/dist/esm/const/deployments/flare.js +4 -1
- package/dist/esm/const/deployments/flare.js.map +1 -1
- package/dist/esm/const/deployments/goerli.js +4 -1
- package/dist/esm/const/deployments/goerli.js.map +1 -1
- package/dist/esm/const/deployments/hemi.js +4 -1
- package/dist/esm/const/deployments/hemi.js.map +1 -1
- package/dist/esm/const/deployments/hyperevm.js +4 -1
- package/dist/esm/const/deployments/hyperevm.js.map +1 -1
- package/dist/esm/const/deployments/index.js +99 -48
- package/dist/esm/const/deployments/index.js.map +1 -1
- package/dist/esm/const/deployments/katana.js +4 -1
- package/dist/esm/const/deployments/katana.js.map +1 -1
- package/dist/esm/const/deployments/kava.js +4 -1
- package/dist/esm/const/deployments/kava.js.map +1 -1
- package/dist/esm/const/deployments/linea.js +4 -1
- package/dist/esm/const/deployments/linea.js.map +1 -1
- package/dist/esm/const/deployments/localhost.js +4 -1
- package/dist/esm/const/deployments/localhost.js.map +1 -1
- package/dist/esm/const/deployments/manta.js +4 -1
- package/dist/esm/const/deployments/manta.js.map +1 -1
- package/dist/esm/const/deployments/mantle.js +4 -1
- package/dist/esm/const/deployments/mantle.js.map +1 -1
- package/dist/esm/const/deployments/metis.js +4 -1
- package/dist/esm/const/deployments/metis.js.map +1 -1
- package/dist/esm/const/deployments/mode.js +4 -1
- package/dist/esm/const/deployments/mode.js.map +1 -1
- package/dist/esm/const/deployments/moonbeam.js +4 -1
- package/dist/esm/const/deployments/moonbeam.js.map +1 -1
- package/dist/esm/const/deployments/mumbai.js +4 -1
- package/dist/esm/const/deployments/mumbai.js.map +1 -1
- package/dist/esm/const/deployments/nibiru.js +4 -1
- package/dist/esm/const/deployments/nibiru.js.map +1 -1
- package/dist/esm/const/deployments/okxtestnet.js +4 -1
- package/dist/esm/const/deployments/okxtestnet.js.map +1 -1
- package/dist/esm/const/deployments/optimism.js +4 -1
- package/dist/esm/const/deployments/optimism.js.map +1 -1
- package/dist/esm/const/deployments/optimismgoerli.js +4 -1
- package/dist/esm/const/deployments/optimismgoerli.js.map +1 -1
- package/dist/esm/const/deployments/peaq.js +4 -1
- package/dist/esm/const/deployments/peaq.js.map +1 -1
- package/dist/esm/const/deployments/polygon.js +4 -1
- package/dist/esm/const/deployments/polygon.js.map +1 -1
- package/dist/esm/const/deployments/polyzkevm.js +4 -1
- package/dist/esm/const/deployments/polyzkevm.js.map +1 -1
- package/dist/esm/const/deployments/pyzkevm.js +4 -1
- package/dist/esm/const/deployments/pyzkevm.js.map +1 -1
- package/dist/esm/const/deployments/ronin.js +4 -1
- package/dist/esm/const/deployments/ronin.js.map +1 -1
- package/dist/esm/const/deployments/rootstock.js +4 -1
- package/dist/esm/const/deployments/rootstock.js.map +1 -1
- package/dist/esm/const/deployments/saga.js +4 -1
- package/dist/esm/const/deployments/saga.js.map +1 -1
- package/dist/esm/const/deployments/scroll.js +4 -1
- package/dist/esm/const/deployments/scroll.js.map +1 -1
- package/dist/esm/const/deployments/sei.js +4 -1
- package/dist/esm/const/deployments/sei.js.map +1 -1
- package/dist/esm/const/deployments/soneium.js +4 -1
- package/dist/esm/const/deployments/soneium.js.map +1 -1
- package/dist/esm/const/deployments/sonic.js +4 -1
- package/dist/esm/const/deployments/sonic.js.map +1 -1
- package/dist/esm/const/deployments/taiko.js +4 -1
- package/dist/esm/const/deployments/taiko.js.map +1 -1
- package/dist/esm/const/deployments/tataratestnet.js +4 -1
- package/dist/esm/const/deployments/tataratestnet.js.map +1 -1
- package/dist/esm/const/deployments/telos.js +4 -1
- package/dist/esm/const/deployments/telos.js.map +1 -1
- package/dist/esm/const/deployments/thundercore.js +4 -1
- package/dist/esm/const/deployments/thundercore.js.map +1 -1
- package/dist/esm/const/deployments/uni.js +4 -1
- package/dist/esm/const/deployments/uni.js.map +1 -1
- package/dist/esm/const/deployments/xlayer.js +4 -1
- package/dist/esm/const/deployments/xlayer.js.map +1 -1
- package/dist/esm/const/deployments/zeta.js +4 -1
- package/dist/esm/const/deployments/zeta.js.map +1 -1
- package/dist/esm/const/deployments/zircuit.js +4 -1
- package/dist/esm/const/deployments/zircuit.js.map +1 -1
- package/dist/esm/const/deployments/zklinknova.js +4 -1
- package/dist/esm/const/deployments/zklinknova.js.map +1 -1
- package/dist/esm/const/index.js +28 -12
- package/dist/esm/const/index.js.map +1 -1
- package/dist/esm/const/network.js +232 -223
- package/dist/esm/const/network.js.map +1 -1
- package/dist/esm/const/protocol.js +97 -83
- package/dist/esm/const/protocol.js.map +1 -1
- package/dist/esm/const/quoter.js +53 -42
- package/dist/esm/const/quoter.js.map +1 -1
- package/dist/esm/const/stabilityVaults/index.js +17 -1
- package/dist/esm/const/stabilityVaults/index.js.map +1 -1
- package/dist/esm/const/stabilityVaults/stabilityVaultsConfig.js +15 -10
- package/dist/esm/const/stabilityVaults/stabilityVaultsConfig.js.map +1 -1
- package/dist/esm/const/subgraph.js +60 -56
- package/dist/esm/const/subgraph.js.map +1 -1
- package/dist/esm/const/thegraph.js +5 -1
- package/dist/esm/const/thegraph.js.map +1 -1
- package/dist/esm/index.js +31 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/scripts/processDeployments.js +15 -10
- package/dist/esm/scripts/processDeployments.js.map +1 -1
- package/dist/esm/types.js +2 -1
- package/dist/esm/utils/PoolQueryAdapter.js +44 -38
- package/dist/esm/utils/PoolQueryAdapter.js.map +1 -1
- package/dist/esm/utils/SubgraphVaultClient.js +10 -6
- package/dist/esm/utils/SubgraphVaultClient.js.map +1 -1
- package/dist/esm/utils/subgraph-types.js +2 -1
- package/dist/types/const/amm/configs/ammConfig.d.ts.map +1 -1
- package/dist/types/const/amm/configs/protocols/index.d.ts +0 -39
- package/dist/types/const/amm/configs/protocols/index.d.ts.map +1 -1
- package/dist/types/const/stabilityVaults/index.d.ts +1 -1
- package/dist/types/const/stabilityVaults/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/const/amm/configs/ammConfig.ts +2 -3
- package/src/const/amm/configs/protocols/index.ts +1 -40
- package/src/const/stabilityVaults/index.ts +1 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VaultDepositClient = void 0;
|
|
4
|
+
const sdk_core_1 = require("@uniswap/sdk-core");
|
|
5
|
+
const v3_sdk_1 = require("@uniswap/v3-sdk");
|
|
6
|
+
const decimal_js_1 = require("decimal.js");
|
|
7
|
+
const UniswapPool_js_1 = require("../../../const/abis/UniswapPool.js");
|
|
8
|
+
const abis_js_1 = require("../../../const/deployments/abis.js");
|
|
9
|
+
const network_js_1 = require("../../../const/network.js");
|
|
10
|
+
const protocol_js_1 = require("../../../const/protocol.js");
|
|
11
|
+
const utils_js_1 = require("../utils.js");
|
|
12
|
+
const index_js_1 = require("../../../const/index.js");
|
|
13
|
+
const VAULT_ABI = abis_js_1.abis.QuickSwapUniv3MultiPositionLiquidityManager;
|
|
14
|
+
const PERIPHERY_ABI = abis_js_1.abis.SteerPeriphery;
|
|
15
|
+
class VaultDepositClient {
|
|
13
16
|
constructor(publicClient, walletClient) {
|
|
14
17
|
this.publicClient = publicClient;
|
|
15
18
|
this.walletClient = walletClient;
|
|
@@ -32,7 +35,7 @@ export class VaultDepositClient {
|
|
|
32
35
|
if (!params.chainId) {
|
|
33
36
|
throw new Error('chainId is required when using Steer Periphery');
|
|
34
37
|
}
|
|
35
|
-
const steerPeripheryAddress = getContractAddressByChainIdAndContractName(params.chainId, 'SteerPeriphery');
|
|
38
|
+
const steerPeripheryAddress = (0, network_js_1.getContractAddressByChainIdAndContractName)(params.chainId, 'SteerPeriphery');
|
|
36
39
|
if (!steerPeripheryAddress) {
|
|
37
40
|
throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);
|
|
38
41
|
}
|
|
@@ -102,7 +105,7 @@ export class VaultDepositClient {
|
|
|
102
105
|
if (!params.chainId) {
|
|
103
106
|
throw new Error('chainId is required when using Steer Periphery');
|
|
104
107
|
}
|
|
105
|
-
const steerPeripheryAddress = getContractAddressByChainIdAndContractName(params.chainId, 'SteerPeriphery');
|
|
108
|
+
const steerPeripheryAddress = (0, network_js_1.getContractAddressByChainIdAndContractName)(params.chainId, 'SteerPeriphery');
|
|
106
109
|
if (!steerPeripheryAddress) {
|
|
107
110
|
throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);
|
|
108
111
|
}
|
|
@@ -227,7 +230,7 @@ export class VaultDepositClient {
|
|
|
227
230
|
let vaultDetails;
|
|
228
231
|
let isAlgebraVault = false;
|
|
229
232
|
const chainId = await this.publicClient.getChainId();
|
|
230
|
-
const steerPeripheryAddress = getContractAddressByChainIdAndContractName(chainId, 'SteerPeriphery');
|
|
233
|
+
const steerPeripheryAddress = (0, network_js_1.getContractAddressByChainIdAndContractName)(chainId, 'SteerPeriphery');
|
|
231
234
|
if (!steerPeripheryAddress)
|
|
232
235
|
throw new Error('SteerPeriphery address not found');
|
|
233
236
|
try {
|
|
@@ -263,7 +266,7 @@ export class VaultDepositClient {
|
|
|
263
266
|
if (!pool.data)
|
|
264
267
|
throw new Error('Failed to retrieve pool for ratio calculation');
|
|
265
268
|
// Determine the protocol
|
|
266
|
-
const protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);
|
|
269
|
+
const protocol = (0, index_js_1.getProtocolTypeByBeacon)(vaultDetails.vaultType);
|
|
267
270
|
if (!protocol)
|
|
268
271
|
throw new Error('Unsupported protocol type');
|
|
269
272
|
console.log('Protocol detected:', protocol);
|
|
@@ -271,10 +274,10 @@ export class VaultDepositClient {
|
|
|
271
274
|
const poolInstanceResponse = await this.getPoolInstance({
|
|
272
275
|
vaultAddress,
|
|
273
276
|
chain: { id: chainId },
|
|
274
|
-
isAlgebraPool: isAlgebraProtocol(protocol),
|
|
275
|
-
isPoolSharkPool: isPoolSharkProtocol(protocol),
|
|
276
|
-
isAlgebraIntegralPool: isAlgebraIntegralProtocol(protocol),
|
|
277
|
-
isAlgebraDirectionPool: isAlgebraDirectionProtocol(protocol),
|
|
277
|
+
isAlgebraPool: (0, protocol_js_1.isAlgebraProtocol)(protocol),
|
|
278
|
+
isPoolSharkPool: (0, protocol_js_1.isPoolSharkProtocol)(protocol),
|
|
279
|
+
isAlgebraIntegralPool: (0, protocol_js_1.isAlgebraIntegralProtocol)(protocol),
|
|
280
|
+
isAlgebraDirectionPool: (0, protocol_js_1.isAlgebraDirectionProtocol)(protocol),
|
|
278
281
|
});
|
|
279
282
|
if (!poolInstanceResponse.success || !poolInstanceResponse.data) {
|
|
280
283
|
throw new Error('Failed to get pool instance for price calculation');
|
|
@@ -285,16 +288,16 @@ export class VaultDepositClient {
|
|
|
285
288
|
? poolInstance.priceOf(poolInstance.token0)
|
|
286
289
|
: poolInstance.priceOf(poolInstance.token0).invert();
|
|
287
290
|
// Convert price to string using Decimal for maximum precision
|
|
288
|
-
ratio = price.toSignificant(undefined, undefined, Rounding.ROUND_DOWN);
|
|
291
|
+
ratio = price.toSignificant(undefined, undefined, sdk_core_1.Rounding.ROUND_DOWN);
|
|
289
292
|
}
|
|
290
293
|
// Case 2: Vault has liquidity
|
|
291
294
|
else {
|
|
292
295
|
// Convert bigint values to Decimal instances for precise calculation
|
|
293
296
|
// Convert bigints to strings first to avoid type errors
|
|
294
|
-
const token0Bal = new Decimal(token0Balance.toString());
|
|
295
|
-
const token1Bal = new Decimal(token1Balance.toString());
|
|
296
|
-
const token0Dec = new Decimal(10).pow(Number(token0Decimals));
|
|
297
|
-
const token1Dec = new Decimal(10).pow(Number(token1Decimals));
|
|
297
|
+
const token0Bal = new decimal_js_1.Decimal(token0Balance.toString());
|
|
298
|
+
const token1Bal = new decimal_js_1.Decimal(token1Balance.toString());
|
|
299
|
+
const token0Dec = new decimal_js_1.Decimal(10).pow(Number(token0Decimals));
|
|
300
|
+
const token1Dec = new decimal_js_1.Decimal(10).pow(Number(token1Decimals));
|
|
298
301
|
// Calculate adjusted balances
|
|
299
302
|
const token0Adjusted = token0Bal.div(token0Dec);
|
|
300
303
|
const token1Adjusted = token1Bal.div(token1Dec);
|
|
@@ -370,11 +373,11 @@ export class VaultDepositClient {
|
|
|
370
373
|
// Handle different protocol types
|
|
371
374
|
if (params.isAlgebraIntegralPool) {
|
|
372
375
|
// For Algebra Integral pools
|
|
373
|
-
slot0Response = await getGlobalStateAlgebraIntegral(this.publicClient, poolData.data.id, params.isAlgebraDirectionPool);
|
|
376
|
+
slot0Response = await (0, utils_js_1.getGlobalStateAlgebraIntegral)(this.publicClient, poolData.data.id, params.isAlgebraDirectionPool);
|
|
374
377
|
}
|
|
375
378
|
else if (params.isPoolSharkPool) {
|
|
376
379
|
// For PoolShark pools
|
|
377
|
-
const poolSharkResponse = await getGlobalStatePoolShark(this.publicClient, poolData.data.id);
|
|
380
|
+
const poolSharkResponse = await (0, utils_js_1.getGlobalStatePoolShark)(this.publicClient, poolData.data.id);
|
|
378
381
|
if (poolSharkResponse.success && poolSharkResponse.data) {
|
|
379
382
|
slot0Response = {
|
|
380
383
|
success: true,
|
|
@@ -396,18 +399,18 @@ export class VaultDepositClient {
|
|
|
396
399
|
}
|
|
397
400
|
if (params.isAlgebraPool) {
|
|
398
401
|
// For Algebra pools
|
|
399
|
-
slot0Response = await getGlobalState(this.publicClient, poolData.data.id, params.isAlgebraDirectionPool);
|
|
402
|
+
slot0Response = await (0, utils_js_1.getGlobalState)(this.publicClient, poolData.data.id, params.isAlgebraDirectionPool);
|
|
400
403
|
}
|
|
401
404
|
else {
|
|
402
405
|
// For standard Uniswap V3 pools
|
|
403
|
-
slot0Response = await getSlot0(this.publicClient, poolData.data.id);
|
|
406
|
+
slot0Response = await (0, utils_js_1.getSlot0)(this.publicClient, poolData.data.id);
|
|
404
407
|
}
|
|
405
408
|
if (!slot0Response.success || !slot0Response.data) {
|
|
406
409
|
throw new Error('Failed to read pool state');
|
|
407
410
|
}
|
|
408
411
|
const slot0 = slot0Response.data;
|
|
409
|
-
const token0 = new Token(params.chain.id, poolData.data.token0.id, Number(poolData.data.token0.decimals), poolData.data.token0.symbol, poolData.data.token0.name);
|
|
410
|
-
const token1 = new Token(params.chain.id, poolData.data.token1.id, Number(poolData.data.token1.decimals), poolData.data.token1.symbol, poolData.data.token1.name);
|
|
412
|
+
const token0 = new sdk_core_1.Token(params.chain.id, poolData.data.token0.id, Number(poolData.data.token0.decimals), poolData.data.token0.symbol, poolData.data.token0.name);
|
|
413
|
+
const token1 = new sdk_core_1.Token(params.chain.id, poolData.data.token1.id, Number(poolData.data.token1.decimals), poolData.data.token1.symbol, poolData.data.token1.name);
|
|
411
414
|
// Get liquidity
|
|
412
415
|
const liquidity = await this.getPoolLiquidity(poolData.data.id);
|
|
413
416
|
if (!liquidity.success || !liquidity.data) {
|
|
@@ -430,7 +433,7 @@ export class VaultDepositClient {
|
|
|
430
433
|
throw new Error('Failed to get pool price');
|
|
431
434
|
}
|
|
432
435
|
return {
|
|
433
|
-
data: new
|
|
436
|
+
data: new v3_sdk_1.Pool(token0, token1, poolData.data.feeTier, price.toString(), liquidity.data.toString(), slot0.tick),
|
|
434
437
|
status: 200,
|
|
435
438
|
success: true,
|
|
436
439
|
};
|
|
@@ -453,7 +456,7 @@ export class VaultDepositClient {
|
|
|
453
456
|
try {
|
|
454
457
|
const liquidity = (await this.publicClient.readContract({
|
|
455
458
|
address: poolAddress,
|
|
456
|
-
abi: UniswapV3PoolABI,
|
|
459
|
+
abi: UniswapPool_js_1.UniswapV3PoolABI,
|
|
457
460
|
functionName: 'liquidity',
|
|
458
461
|
}));
|
|
459
462
|
return {
|
|
@@ -490,9 +493,9 @@ export class VaultDepositClient {
|
|
|
490
493
|
? token1Decimals - token0Decimals
|
|
491
494
|
: token0Decimals - token1Decimals;
|
|
492
495
|
// Convert all values to Decimal for precise calculation
|
|
493
|
-
const amountDecimal = new Decimal(amount.toString());
|
|
494
|
-
const ratioDecimal = new Decimal(ratio);
|
|
495
|
-
const adjustmentDecimal = new Decimal(10).pow(Number(decimalDiff));
|
|
496
|
+
const amountDecimal = new decimal_js_1.Decimal(amount.toString());
|
|
497
|
+
const ratioDecimal = new decimal_js_1.Decimal(ratio);
|
|
498
|
+
const adjustmentDecimal = new decimal_js_1.Decimal(10).pow(Number(decimalDiff));
|
|
496
499
|
// Perform calculation using Decimal.js
|
|
497
500
|
const result = amountDecimal.times(ratioDecimal).times(adjustmentDecimal);
|
|
498
501
|
// Convert result back to bigint, rounding down to nearest integer
|
|
@@ -522,7 +525,7 @@ export class VaultDepositClient {
|
|
|
522
525
|
// Try to get vault details, first attempt with regular vault
|
|
523
526
|
let vaultDetails;
|
|
524
527
|
const chainId = await this.publicClient.getChainId();
|
|
525
|
-
const steerPeripheryAddress = getContractAddressByChainIdAndContractName(chainId, 'SteerPeriphery');
|
|
528
|
+
const steerPeripheryAddress = (0, network_js_1.getContractAddressByChainIdAndContractName)(chainId, 'SteerPeriphery');
|
|
526
529
|
if (!steerPeripheryAddress)
|
|
527
530
|
throw new Error('SteerPeriphery address not found');
|
|
528
531
|
try {
|
|
@@ -550,7 +553,7 @@ export class VaultDepositClient {
|
|
|
550
553
|
// Get tick spacing
|
|
551
554
|
const tickSpacing = (await this.publicClient.readContract({
|
|
552
555
|
address: pool.data,
|
|
553
|
-
abi: UniswapV3PoolABI,
|
|
556
|
+
abi: UniswapPool_js_1.UniswapV3PoolABI,
|
|
554
557
|
functionName: 'tickSpacing',
|
|
555
558
|
}));
|
|
556
559
|
const poolData = {
|
|
@@ -587,4 +590,5 @@ export class VaultDepositClient {
|
|
|
587
590
|
}
|
|
588
591
|
}
|
|
589
592
|
}
|
|
593
|
+
exports.VaultDepositClient = VaultDepositClient;
|
|
590
594
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/base/vault/deposit/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Rounding, Token } from '@uniswap/sdk-core';\nimport { Pool as PoolV3 } from '@uniswap/v3-sdk';\nimport { Decimal } from 'decimal.js';\nimport { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { UniswapV3PoolABI } from '../../../const/abis/UniswapPool.js';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport { isAlgebraDirectionProtocol, isAlgebraIntegralProtocol, isAlgebraProtocol, isPoolSharkProtocol } from '../../../const/protocol.js';\nimport { AlgebraVaultDetails, PoolData, SteerResponse, VaultDetails } from '../../../types.js';\nimport { getGlobalState, getGlobalStateAlgebraIntegral, getGlobalStatePoolShark, getSlot0 } from '../utils.js';\nimport { DepositRatioResponse, PoolInstanceParams, VaultDepositParams } from './types.js';\nimport { getProtocolTypeByBeacon } from \"../../../const/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\nexport class VaultDepositClient {\n constructor(\n protected readonly publicClient: PublicClient,\n protected readonly walletClient: WalletClient\n ) {}\n\n /**\n * Deposits tokens into a vault\n * @param params The deposit parameters\n */\n public async deposit(params: VaultDepositParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n // Calculate min amounts based on slippage\n const amount0Min =\n (params.amount0Desired * BigInt(Math.floor((1 - params.slippage) * 1000))) / 1000n;\n const amount1Min =\n (params.amount1Desired * BigInt(Math.floor((1 - params.slippage) * 1000))) / 1000n;\n\n let hash: Hash;\n\n // If using Steer Periphery\n if (params.isSteerPeriphery) {\n if (!params.chainId) {\n throw new Error('chainId is required when using Steer Periphery');\n }\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n params.chainId,\n 'SteerPeriphery'\n );\n\n if (!steerPeripheryAddress) {\n throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'deposit',\n args: [\n params.vaultAddress,\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ],\n account: account[0],\n });\n hash = await this.walletClient.writeContract(request);\n } else {\n // Regular vault deposit\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'deposit',\n args: [\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ],\n account: account[0],\n });\n hash = await this.walletClient.writeContract(request);\n }\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Prepares the transaction data for depositing tokens into a vault without executing it\n * @param params The deposit parameters\n */\n public async prepareDepositTx(params: VaultDepositParams): Promise<\n SteerResponse<{\n address: Address;\n abi: {\n type: string;\n inputs: {\n name: string;\n internalType: string;\n type: string;\n }[];\n name: string;\n outputs: {\n internalType: string;\n name: string;\n type: string;\n }[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [Address, bigint, bigint, bigint, bigint, Address] | readonly [bigint, bigint, bigint, bigint, Address];\n }>\n > {\n try {\n const account = await this.walletClient.getAddresses();\n if (!params.to) {\n if (!account[0]) throw new Error('No account found');\n }\n\n const amount0Min = 0n;\n const amount1Min = 0n;\n\n // If using Steer Periphery\n if (params.isSteerPeriphery) {\n if (!params.chainId) {\n throw new Error('chainId is required when using Steer Periphery');\n }\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n params.chainId,\n 'SteerPeriphery'\n );\n\n if (!steerPeripheryAddress) {\n throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);\n }\n\n // Steer Periphery ABI and parameters\n return {\n data: {\n address: steerPeripheryAddress as Address,\n abi: [\n {\n type: 'function',\n inputs: [\n { name: 'vaultAddress', internalType: 'address', type: 'address' },\n { name: 'amount0Desired', internalType: 'uint256', type: 'uint256' },\n { name: 'amount1Desired', internalType: 'uint256', type: 'uint256' },\n { name: 'amount0Min', internalType: 'uint256', type: 'uint256' },\n { name: 'amount1Min', internalType: 'uint256', type: 'uint256' },\n { name: 'to', internalType: 'address', type: 'address' },\n ],\n name: 'deposit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n ],\n functionName: 'deposit',\n args: [\n params.vaultAddress,\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ] as const,\n },\n status: 200,\n success: true,\n };\n }\n\n // Regular vault deposit\n return {\n data: {\n address: params.vaultAddress,\n abi: [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'amount0Desired',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1Desired',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount0Min',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1Min',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n internalType: 'uint256',\n name: 'shares',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount0Used',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1Used',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ],\n functionName: 'deposit',\n args: [\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ] as const,\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the deposit ratio for a vault\n * @param vaultAddress The vault address\n */\n public async getDepositRatio(\n vaultAddress: Address,\n zeroForOne: boolean\n ): Promise<SteerResponse<DepositRatioResponse>> {\n try {\n // Try to get vault details, first attempt with regular vault\n let vaultDetails: VaultDetails | AlgebraVaultDetails;\n let isAlgebraVault = false;\n\n const chainId = await this.publicClient.getChainId();\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n chainId,\n 'SteerPeriphery'\n );\n if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n try {\n // First try regular vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'vaultDetailsByAddress',\n args: [vaultAddress],\n })) as VaultDetails;\n } catch (error) {\n // If regular vault fails, try Algebra vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'algebraVaultDetailsByAddress',\n args: [vaultAddress],\n })) as AlgebraVaultDetails;\n isAlgebraVault = true;\n }\n\n const token0Balance = vaultDetails.token0Balance;\n const token1Balance = vaultDetails.token1Balance;\n const token0Decimals = vaultDetails.token0Decimals;\n const token1Decimals = vaultDetails.token1Decimals;\n\n let ratio: string;\n\n // Case 1: No liquidity in the vault\n if (token0Balance === 0n && token1Balance === 0n) {\n // Get pool instance to calculate price\n const chainId = await this.publicClient.getChainId();\n\n // Get the pool address\n const pool = await this.getPool(vaultAddress);\n if (!pool.data) throw new Error('Failed to retrieve pool for ratio calculation');\n\n // Determine the protocol\n const protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\n if (!protocol) throw new Error('Unsupported protocol type');\n console.log('Protocol detected:', protocol);\n\n // Get pool instance with the correct protocol type\n const poolInstanceResponse = await this.getPoolInstance({\n vaultAddress,\n chain: { id: chainId },\n isAlgebraPool: isAlgebraProtocol(protocol),\n isPoolSharkPool: isPoolSharkProtocol(protocol),\n isAlgebraIntegralPool: isAlgebraIntegralProtocol(protocol),\n isAlgebraDirectionPool: isAlgebraDirectionProtocol(protocol),\n });\n\n if (!poolInstanceResponse.success || !poolInstanceResponse.data) {\n throw new Error('Failed to get pool instance for price calculation');\n }\n\n const poolInstance = poolInstanceResponse.data;\n // Get price based on zeroForOne\n const price = zeroForOne\n ? poolInstance.priceOf(poolInstance.token0)\n : poolInstance.priceOf(poolInstance.token0).invert();\n\n // Convert price to string using Decimal for maximum precision\n ratio = price.toSignificant(undefined, undefined, Rounding.ROUND_DOWN);\n }\n // Case 2: Vault has liquidity\n else {\n // Convert bigint values to Decimal instances for precise calculation\n // Convert bigints to strings first to avoid type errors\n const token0Bal = new Decimal(token0Balance.toString());\n const token1Bal = new Decimal(token1Balance.toString());\n const token0Dec = new Decimal(10).pow(Number(token0Decimals));\n const token1Dec = new Decimal(10).pow(Number(token1Decimals));\n\n // Calculate adjusted balances\n const token0Adjusted = token0Bal.div(token0Dec);\n const token1Adjusted = token1Bal.div(token1Dec);\n\n // Calculate ratio based on token balances\n // If zeroForOne is true: ratio = token1/token0\n // If zeroForOne is false: ratio = token0/token1\n ratio = zeroForOne\n ? token1Adjusted.div(token0Adjusted).toString() // token1/token0 ratio\n : token0Adjusted.div(token1Adjusted).toString(); // token0/token1 ratio\n }\n\n return {\n data: {\n ratio,\n token0Balance,\n token1Balance,\n token0Decimals,\n token1Decimals,\n vaultDetails,\n isAlgebraVault,\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the pool address for a vault\n * @param vaultAddress The vault address\n */\n private async getPool(vaultAddress: Address): Promise<SteerResponse<Address>> {\n try {\n const pool = (await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'pool',\n })) as Address;\n\n return {\n data: pool,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets a pool instance for a vault\n * @param params The pool instance parameters\n */\n public async getPoolInstance(params: PoolInstanceParams): Promise<SteerResponse<PoolV3>> {\n console.log('Fetching pool instance...');\n\n try {\n const poolData = await this.preparePoolData(params.vaultAddress);\n console.log('Pool data fetched:', poolData);\n\n if (!poolData.success || !poolData.data) {\n throw new Error('Failed to fetch pool data');\n }\n\n let slot0Response;\n\n // Handle different protocol types\n if (params.isAlgebraIntegralPool) {\n // For Algebra Integral pools\n slot0Response = await getGlobalStateAlgebraIntegral(\n this.publicClient,\n poolData.data.id,\n params.isAlgebraDirectionPool\n );\n } else if (params.isPoolSharkPool) {\n // For PoolShark pools\n const poolSharkResponse = await getGlobalStatePoolShark(\n this.publicClient,\n poolData.data.id\n );\n if (poolSharkResponse.success && poolSharkResponse.data) {\n slot0Response = {\n success: true,\n status: 200,\n data: {\n sqrtPriceX96: poolSharkResponse.data.pool.price,\n tick: poolSharkResponse.data.pool.tickAtPrice,\n observationIndex: 0,\n observationCardinality: 0,\n observationCardinalityNext: 0,\n feeProtocol: 0,\n unlocked: poolSharkResponse.data.unlocked === 1,\n },\n };\n } else {\n slot0Response = poolSharkResponse;\n }\n }\n if (params.isAlgebraPool) {\n // For Algebra pools\n slot0Response = await getGlobalState(\n this.publicClient,\n poolData.data.id,\n params.isAlgebraDirectionPool\n );\n } else {\n // For standard Uniswap V3 pools\n slot0Response = await getSlot0(this.publicClient, poolData.data.id);\n }\n\n if (!slot0Response.success || !slot0Response.data) {\n throw new Error('Failed to read pool state');\n }\n\n const slot0 = slot0Response.data;\n\n const token0 = new Token(\n params.chain.id,\n poolData.data.token0.id,\n Number(poolData.data.token0.decimals),\n poolData.data.token0.symbol,\n poolData.data.token0.name\n );\n\n const token1 = new Token(\n params.chain.id,\n poolData.data.token1.id,\n Number(poolData.data.token1.decimals),\n poolData.data.token1.symbol,\n poolData.data.token1.name\n );\n\n // Get liquidity\n const liquidity = await this.getPoolLiquidity(poolData.data.id);\n if (!liquidity.success || !liquidity.data) {\n throw new Error('Failed to fetch pool liquidity');\n }\n\n let price: bigint | undefined;\n\n if (params.isAlgebraPool && !params.isAlgebraIntegralPool) {\n price = slot0Response?.data?.price;\n } else if (params.isAlgebraIntegralPool) {\n price = slot0Response?.data?.price;\n } else if (params.isPoolSharkPool) {\n price = (slot0Response?.data?.tick as unknown as { price: bigint })?.price;\n } else {\n price = slot0Response?.data?.sqrtPriceX96;\n }\n\n if (!price) {\n throw new Error('Failed to get pool price');\n }\n\n return {\n data: new PoolV3(\n token0,\n token1,\n poolData.data.feeTier,\n price.toString(),\n liquidity.data.toString(),\n slot0.tick\n ),\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error('Error creating pool instance:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the pool liquidity\n * @param poolAddress The pool address\n */\n private async getPoolLiquidity(poolAddress: Address): Promise<SteerResponse<bigint>> {\n try {\n const liquidity = (await this.publicClient.readContract({\n address: poolAddress,\n abi: UniswapV3PoolABI,\n functionName: 'liquidity',\n })) as bigint;\n\n return {\n data: liquidity,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the corresponding token amount based on the provided token amount and ratio\n * @param vaultAddress The vault address\n * @param amount The amount of token to calculate the corresponding amount for\n * @param zeroForOne If true, calculates token1 amount for given token0, if false calculates token0 amount for given token1\n */\n public async getCorrespondingTokenAmount(\n vaultAddress: Address,\n amount: bigint,\n zeroForOne: boolean\n ): Promise<SteerResponse<bigint>> {\n try {\n // Get the deposit ratio for the vault\n const ratioResponse = await this.getDepositRatio(vaultAddress, zeroForOne);\n if (!ratioResponse.success || !ratioResponse.data) {\n throw new Error('Failed to get deposit ratio');\n }\n\n const { ratio, token0Decimals, token1Decimals } = ratioResponse.data;\n\n // Calculate the decimal adjustment based on token decimals\n const decimalDiff = zeroForOne\n ? token1Decimals - token0Decimals\n : token0Decimals - token1Decimals;\n\n // Convert all values to Decimal for precise calculation\n const amountDecimal = new Decimal(amount.toString());\n const ratioDecimal = new Decimal(ratio);\n const adjustmentDecimal = new Decimal(10).pow(Number(decimalDiff));\n\n // Perform calculation using Decimal.js\n const result = amountDecimal.times(ratioDecimal).times(adjustmentDecimal);\n\n // Convert result back to bigint, rounding down to nearest integer\n // Use toFixed(0) to avoid scientific notation which BigInt cannot parse\n const correspondingAmount = BigInt(result.floor().toFixed(0));\n\n return {\n data: correspondingAmount,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Prepares pool data from vault details\n * @param vaultAddress The vault address\n */\n private async preparePoolData(vaultAddress: Address): Promise<SteerResponse<PoolData>> {\n try {\n // Try to get vault details, first attempt with regular vault\n let vaultDetails: VaultDetails | AlgebraVaultDetails;\n\n const chainId = await this.publicClient.getChainId();\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n chainId,\n 'SteerPeriphery'\n );\n if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n try {\n // First try regular vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'vaultDetailsByAddress',\n args: [vaultAddress],\n })) as VaultDetails;\n } catch (error) {\n // If regular vault fails, try Algebra vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'algebraVaultDetailsByAddress',\n args: [vaultAddress],\n })) as AlgebraVaultDetails;\n }\n\n // Get the pool contract to fetch tick spacing\n const pool = await this.getPool(vaultAddress);\n if (!pool.data) throw new Error('Failed to retrieve pool');\n\n // Get tick spacing\n const tickSpacing = (await this.publicClient.readContract({\n address: pool.data,\n abi: UniswapV3PoolABI,\n functionName: 'tickSpacing',\n })) as number;\n\n const poolData: PoolData = {\n id: pool.data,\n token0: {\n id: vaultDetails.token0,\n decimals: vaultDetails.token0Decimals.toString(),\n symbol: vaultDetails.token0Symbol,\n name: vaultDetails.token0Symbol,\n },\n token1: {\n id: vaultDetails.token1,\n decimals: vaultDetails.token1Decimals.toString(),\n symbol: vaultDetails.token1Symbol,\n name: vaultDetails.token1Symbol,\n },\n chainId: await this.publicClient.getChainId(),\n feeTier: 3000, // Fixed fee tier as specified\n tickSpacing,\n };\n\n return {\n data: poolData,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/base/vault/deposit/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Rounding, Token } from '@uniswap/sdk-core';\nimport { Pool as PoolV3 } from '@uniswap/v3-sdk';\nimport { Decimal } from 'decimal.js';\nimport { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { UniswapV3PoolABI } from '../../../const/abis/UniswapPool.js';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport { isAlgebraDirectionProtocol, isAlgebraIntegralProtocol, isAlgebraProtocol, isPoolSharkProtocol } from '../../../const/protocol.js';\nimport { AlgebraVaultDetails, PoolData, SteerResponse, VaultDetails } from '../../../types.js';\nimport { getGlobalState, getGlobalStateAlgebraIntegral, getGlobalStatePoolShark, getSlot0 } from '../utils.js';\nimport { DepositRatioResponse, PoolInstanceParams, VaultDepositParams } from './types.js';\nimport { getProtocolTypeByBeacon } from \"../../../const/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\nexport class VaultDepositClient {\n constructor(\n protected readonly publicClient: PublicClient,\n protected readonly walletClient: WalletClient\n ) {}\n\n /**\n * Deposits tokens into a vault\n * @param params The deposit parameters\n */\n public async deposit(params: VaultDepositParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n // Calculate min amounts based on slippage\n const amount0Min =\n (params.amount0Desired * BigInt(Math.floor((1 - params.slippage) * 1000))) / 1000n;\n const amount1Min =\n (params.amount1Desired * BigInt(Math.floor((1 - params.slippage) * 1000))) / 1000n;\n\n let hash: Hash;\n\n // If using Steer Periphery\n if (params.isSteerPeriphery) {\n if (!params.chainId) {\n throw new Error('chainId is required when using Steer Periphery');\n }\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n params.chainId,\n 'SteerPeriphery'\n );\n\n if (!steerPeripheryAddress) {\n throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'deposit',\n args: [\n params.vaultAddress,\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ],\n account: account[0],\n });\n hash = await this.walletClient.writeContract(request);\n } else {\n // Regular vault deposit\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'deposit',\n args: [\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ],\n account: account[0],\n });\n hash = await this.walletClient.writeContract(request);\n }\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Prepares the transaction data for depositing tokens into a vault without executing it\n * @param params The deposit parameters\n */\n public async prepareDepositTx(params: VaultDepositParams): Promise<\n SteerResponse<{\n address: Address;\n abi: {\n type: string;\n inputs: {\n name: string;\n internalType: string;\n type: string;\n }[];\n name: string;\n outputs: {\n internalType: string;\n name: string;\n type: string;\n }[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [Address, bigint, bigint, bigint, bigint, Address] | readonly [bigint, bigint, bigint, bigint, Address];\n }>\n > {\n try {\n const account = await this.walletClient.getAddresses();\n if (!params.to) {\n if (!account[0]) throw new Error('No account found');\n }\n\n const amount0Min = 0n;\n const amount1Min = 0n;\n\n // If using Steer Periphery\n if (params.isSteerPeriphery) {\n if (!params.chainId) {\n throw new Error('chainId is required when using Steer Periphery');\n }\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n params.chainId,\n 'SteerPeriphery'\n );\n\n if (!steerPeripheryAddress) {\n throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);\n }\n\n // Steer Periphery ABI and parameters\n return {\n data: {\n address: steerPeripheryAddress as Address,\n abi: [\n {\n type: 'function',\n inputs: [\n { name: 'vaultAddress', internalType: 'address', type: 'address' },\n { name: 'amount0Desired', internalType: 'uint256', type: 'uint256' },\n { name: 'amount1Desired', internalType: 'uint256', type: 'uint256' },\n { name: 'amount0Min', internalType: 'uint256', type: 'uint256' },\n { name: 'amount1Min', internalType: 'uint256', type: 'uint256' },\n { name: 'to', internalType: 'address', type: 'address' },\n ],\n name: 'deposit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n ],\n functionName: 'deposit',\n args: [\n params.vaultAddress,\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ] as const,\n },\n status: 200,\n success: true,\n };\n }\n\n // Regular vault deposit\n return {\n data: {\n address: params.vaultAddress,\n abi: [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'amount0Desired',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1Desired',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount0Min',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1Min',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n internalType: 'uint256',\n name: 'shares',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount0Used',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1Used',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ],\n functionName: 'deposit',\n args: [\n params.amount0Desired,\n params.amount1Desired,\n amount0Min,\n amount1Min,\n params.to ?? account[0],\n ] as const,\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the deposit ratio for a vault\n * @param vaultAddress The vault address\n */\n public async getDepositRatio(\n vaultAddress: Address,\n zeroForOne: boolean\n ): Promise<SteerResponse<DepositRatioResponse>> {\n try {\n // Try to get vault details, first attempt with regular vault\n let vaultDetails: VaultDetails | AlgebraVaultDetails;\n let isAlgebraVault = false;\n\n const chainId = await this.publicClient.getChainId();\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n chainId,\n 'SteerPeriphery'\n );\n if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n try {\n // First try regular vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'vaultDetailsByAddress',\n args: [vaultAddress],\n })) as VaultDetails;\n } catch (error) {\n // If regular vault fails, try Algebra vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'algebraVaultDetailsByAddress',\n args: [vaultAddress],\n })) as AlgebraVaultDetails;\n isAlgebraVault = true;\n }\n\n const token0Balance = vaultDetails.token0Balance;\n const token1Balance = vaultDetails.token1Balance;\n const token0Decimals = vaultDetails.token0Decimals;\n const token1Decimals = vaultDetails.token1Decimals;\n\n let ratio: string;\n\n // Case 1: No liquidity in the vault\n if (token0Balance === 0n && token1Balance === 0n) {\n // Get pool instance to calculate price\n const chainId = await this.publicClient.getChainId();\n\n // Get the pool address\n const pool = await this.getPool(vaultAddress);\n if (!pool.data) throw new Error('Failed to retrieve pool for ratio calculation');\n\n // Determine the protocol\n const protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\n if (!protocol) throw new Error('Unsupported protocol type');\n console.log('Protocol detected:', protocol);\n\n // Get pool instance with the correct protocol type\n const poolInstanceResponse = await this.getPoolInstance({\n vaultAddress,\n chain: { id: chainId },\n isAlgebraPool: isAlgebraProtocol(protocol),\n isPoolSharkPool: isPoolSharkProtocol(protocol),\n isAlgebraIntegralPool: isAlgebraIntegralProtocol(protocol),\n isAlgebraDirectionPool: isAlgebraDirectionProtocol(protocol),\n });\n\n if (!poolInstanceResponse.success || !poolInstanceResponse.data) {\n throw new Error('Failed to get pool instance for price calculation');\n }\n\n const poolInstance = poolInstanceResponse.data;\n // Get price based on zeroForOne\n const price = zeroForOne\n ? poolInstance.priceOf(poolInstance.token0)\n : poolInstance.priceOf(poolInstance.token0).invert();\n\n // Convert price to string using Decimal for maximum precision\n ratio = price.toSignificant(undefined, undefined, Rounding.ROUND_DOWN);\n }\n // Case 2: Vault has liquidity\n else {\n // Convert bigint values to Decimal instances for precise calculation\n // Convert bigints to strings first to avoid type errors\n const token0Bal = new Decimal(token0Balance.toString());\n const token1Bal = new Decimal(token1Balance.toString());\n const token0Dec = new Decimal(10).pow(Number(token0Decimals));\n const token1Dec = new Decimal(10).pow(Number(token1Decimals));\n\n // Calculate adjusted balances\n const token0Adjusted = token0Bal.div(token0Dec);\n const token1Adjusted = token1Bal.div(token1Dec);\n\n // Calculate ratio based on token balances\n // If zeroForOne is true: ratio = token1/token0\n // If zeroForOne is false: ratio = token0/token1\n ratio = zeroForOne\n ? token1Adjusted.div(token0Adjusted).toString() // token1/token0 ratio\n : token0Adjusted.div(token1Adjusted).toString(); // token0/token1 ratio\n }\n\n return {\n data: {\n ratio,\n token0Balance,\n token1Balance,\n token0Decimals,\n token1Decimals,\n vaultDetails,\n isAlgebraVault,\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the pool address for a vault\n * @param vaultAddress The vault address\n */\n private async getPool(vaultAddress: Address): Promise<SteerResponse<Address>> {\n try {\n const pool = (await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'pool',\n })) as Address;\n\n return {\n data: pool,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets a pool instance for a vault\n * @param params The pool instance parameters\n */\n public async getPoolInstance(params: PoolInstanceParams): Promise<SteerResponse<PoolV3>> {\n console.log('Fetching pool instance...');\n\n try {\n const poolData = await this.preparePoolData(params.vaultAddress);\n console.log('Pool data fetched:', poolData);\n\n if (!poolData.success || !poolData.data) {\n throw new Error('Failed to fetch pool data');\n }\n\n let slot0Response;\n\n // Handle different protocol types\n if (params.isAlgebraIntegralPool) {\n // For Algebra Integral pools\n slot0Response = await getGlobalStateAlgebraIntegral(\n this.publicClient,\n poolData.data.id,\n params.isAlgebraDirectionPool\n );\n } else if (params.isPoolSharkPool) {\n // For PoolShark pools\n const poolSharkResponse = await getGlobalStatePoolShark(\n this.publicClient,\n poolData.data.id\n );\n if (poolSharkResponse.success && poolSharkResponse.data) {\n slot0Response = {\n success: true,\n status: 200,\n data: {\n sqrtPriceX96: poolSharkResponse.data.pool.price,\n tick: poolSharkResponse.data.pool.tickAtPrice,\n observationIndex: 0,\n observationCardinality: 0,\n observationCardinalityNext: 0,\n feeProtocol: 0,\n unlocked: poolSharkResponse.data.unlocked === 1,\n },\n };\n } else {\n slot0Response = poolSharkResponse;\n }\n }\n if (params.isAlgebraPool) {\n // For Algebra pools\n slot0Response = await getGlobalState(\n this.publicClient,\n poolData.data.id,\n params.isAlgebraDirectionPool\n );\n } else {\n // For standard Uniswap V3 pools\n slot0Response = await getSlot0(this.publicClient, poolData.data.id);\n }\n\n if (!slot0Response.success || !slot0Response.data) {\n throw new Error('Failed to read pool state');\n }\n\n const slot0 = slot0Response.data;\n\n const token0 = new Token(\n params.chain.id,\n poolData.data.token0.id,\n Number(poolData.data.token0.decimals),\n poolData.data.token0.symbol,\n poolData.data.token0.name\n );\n\n const token1 = new Token(\n params.chain.id,\n poolData.data.token1.id,\n Number(poolData.data.token1.decimals),\n poolData.data.token1.symbol,\n poolData.data.token1.name\n );\n\n // Get liquidity\n const liquidity = await this.getPoolLiquidity(poolData.data.id);\n if (!liquidity.success || !liquidity.data) {\n throw new Error('Failed to fetch pool liquidity');\n }\n\n let price: bigint | undefined;\n\n if (params.isAlgebraPool && !params.isAlgebraIntegralPool) {\n price = slot0Response?.data?.price;\n } else if (params.isAlgebraIntegralPool) {\n price = slot0Response?.data?.price;\n } else if (params.isPoolSharkPool) {\n price = (slot0Response?.data?.tick as unknown as { price: bigint })?.price;\n } else {\n price = slot0Response?.data?.sqrtPriceX96;\n }\n\n if (!price) {\n throw new Error('Failed to get pool price');\n }\n\n return {\n data: new PoolV3(\n token0,\n token1,\n poolData.data.feeTier,\n price.toString(),\n liquidity.data.toString(),\n slot0.tick\n ),\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error('Error creating pool instance:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the pool liquidity\n * @param poolAddress The pool address\n */\n private async getPoolLiquidity(poolAddress: Address): Promise<SteerResponse<bigint>> {\n try {\n const liquidity = (await this.publicClient.readContract({\n address: poolAddress,\n abi: UniswapV3PoolABI,\n functionName: 'liquidity',\n })) as bigint;\n\n return {\n data: liquidity,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the corresponding token amount based on the provided token amount and ratio\n * @param vaultAddress The vault address\n * @param amount The amount of token to calculate the corresponding amount for\n * @param zeroForOne If true, calculates token1 amount for given token0, if false calculates token0 amount for given token1\n */\n public async getCorrespondingTokenAmount(\n vaultAddress: Address,\n amount: bigint,\n zeroForOne: boolean\n ): Promise<SteerResponse<bigint>> {\n try {\n // Get the deposit ratio for the vault\n const ratioResponse = await this.getDepositRatio(vaultAddress, zeroForOne);\n if (!ratioResponse.success || !ratioResponse.data) {\n throw new Error('Failed to get deposit ratio');\n }\n\n const { ratio, token0Decimals, token1Decimals } = ratioResponse.data;\n\n // Calculate the decimal adjustment based on token decimals\n const decimalDiff = zeroForOne\n ? token1Decimals - token0Decimals\n : token0Decimals - token1Decimals;\n\n // Convert all values to Decimal for precise calculation\n const amountDecimal = new Decimal(amount.toString());\n const ratioDecimal = new Decimal(ratio);\n const adjustmentDecimal = new Decimal(10).pow(Number(decimalDiff));\n\n // Perform calculation using Decimal.js\n const result = amountDecimal.times(ratioDecimal).times(adjustmentDecimal);\n\n // Convert result back to bigint, rounding down to nearest integer\n // Use toFixed(0) to avoid scientific notation which BigInt cannot parse\n const correspondingAmount = BigInt(result.floor().toFixed(0));\n\n return {\n data: correspondingAmount,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Prepares pool data from vault details\n * @param vaultAddress The vault address\n */\n private async preparePoolData(vaultAddress: Address): Promise<SteerResponse<PoolData>> {\n try {\n // Try to get vault details, first attempt with regular vault\n let vaultDetails: VaultDetails | AlgebraVaultDetails;\n\n const chainId = await this.publicClient.getChainId();\n\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n chainId,\n 'SteerPeriphery'\n );\n if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n try {\n // First try regular vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'vaultDetailsByAddress',\n args: [vaultAddress],\n })) as VaultDetails;\n } catch (error) {\n // If regular vault fails, try Algebra vault\n vaultDetails = (await this.publicClient.readContract({\n address: steerPeripheryAddress as Address,\n abi: PERIPHERY_ABI,\n functionName: 'algebraVaultDetailsByAddress',\n args: [vaultAddress],\n })) as AlgebraVaultDetails;\n }\n\n // Get the pool contract to fetch tick spacing\n const pool = await this.getPool(vaultAddress);\n if (!pool.data) throw new Error('Failed to retrieve pool');\n\n // Get tick spacing\n const tickSpacing = (await this.publicClient.readContract({\n address: pool.data,\n abi: UniswapV3PoolABI,\n functionName: 'tickSpacing',\n })) as number;\n\n const poolData: PoolData = {\n id: pool.data,\n token0: {\n id: vaultDetails.token0,\n decimals: vaultDetails.token0Decimals.toString(),\n symbol: vaultDetails.token0Symbol,\n name: vaultDetails.token0Symbol,\n },\n token1: {\n id: vaultDetails.token1,\n decimals: vaultDetails.token1Decimals.toString(),\n symbol: vaultDetails.token1Symbol,\n name: vaultDetails.token1Symbol,\n },\n chainId: await this.publicClient.getChainId(),\n feeTier: 3000, // Fixed fee tier as specified\n tickSpacing,\n };\n\n return {\n data: poolData,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n}\n"]}
|
|
@@ -1,23 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bigintToDecimal = bigintToDecimal;
|
|
4
|
+
exports.decimalToBigint = decimalToBigint;
|
|
5
|
+
exports.getQuoteFromSqrtRatioX96 = getQuoteFromSqrtRatioX96;
|
|
6
|
+
exports.calculateLimitPrice = calculateLimitPrice;
|
|
7
|
+
exports.getPoolSlot0 = getPoolSlot0;
|
|
8
|
+
const decimal_js_1 = require("decimal.js");
|
|
9
|
+
const erc20_js_1 = require("../../../const/abis/erc20.js");
|
|
10
|
+
const utils_js_1 = require("../utils.js");
|
|
11
|
+
const types_js_1 = require("./types.js");
|
|
5
12
|
/**
|
|
6
13
|
* Configure Decimal.js for high precision calculations
|
|
7
14
|
*/
|
|
8
|
-
Decimal.config({
|
|
15
|
+
decimal_js_1.Decimal.config({
|
|
9
16
|
precision: 50, // High precision for financial calculations
|
|
10
|
-
rounding: Decimal.ROUND_DOWN // Conservative rounding for safety
|
|
17
|
+
rounding: decimal_js_1.Decimal.ROUND_DOWN // Conservative rounding for safety
|
|
11
18
|
});
|
|
12
19
|
/**
|
|
13
20
|
* Constants matching the Solidity contract using Decimal.js
|
|
14
21
|
*/
|
|
15
|
-
const BASIS_POINTS = new Decimal(10000);
|
|
16
|
-
const Q96 = new Decimal(2).pow(96);
|
|
22
|
+
const BASIS_POINTS = new decimal_js_1.Decimal(10000);
|
|
23
|
+
const Q96 = new decimal_js_1.Decimal(2).pow(96);
|
|
17
24
|
const Q192 = Q96.mul(Q96);
|
|
18
|
-
const Q128 = new Decimal(2).pow(128);
|
|
19
|
-
const Q64 = new Decimal(2).pow(64);
|
|
20
|
-
const UINT128_MAX = new Decimal(2).pow(128).sub(1);
|
|
25
|
+
const Q128 = new decimal_js_1.Decimal(2).pow(128);
|
|
26
|
+
const Q64 = new decimal_js_1.Decimal(2).pow(64);
|
|
27
|
+
const UINT128_MAX = new decimal_js_1.Decimal(2).pow(128).sub(1);
|
|
21
28
|
/**
|
|
22
29
|
* High-precision multiplication and division using Decimal.js
|
|
23
30
|
* Equivalent to Solidity's FullMath.mulDiv
|
|
@@ -30,20 +37,20 @@ function mulDiv(a, b, denominator) {
|
|
|
30
37
|
*/
|
|
31
38
|
function sqrt(value) {
|
|
32
39
|
if (value.isZero())
|
|
33
|
-
return new Decimal(0);
|
|
40
|
+
return new decimal_js_1.Decimal(0);
|
|
34
41
|
return value.sqrt();
|
|
35
42
|
}
|
|
36
43
|
/**
|
|
37
44
|
* Convert BigInt to Decimal for calculations
|
|
38
45
|
*/
|
|
39
|
-
|
|
40
|
-
return new Decimal(value.toString());
|
|
46
|
+
function bigintToDecimal(value) {
|
|
47
|
+
return new decimal_js_1.Decimal(value.toString());
|
|
41
48
|
}
|
|
42
49
|
/**
|
|
43
50
|
* Convert Decimal back to BigInt for return values
|
|
44
51
|
* Uses toFixed(0) to get full decimal representation without scientific notation
|
|
45
52
|
*/
|
|
46
|
-
|
|
53
|
+
function decimalToBigint(value) {
|
|
47
54
|
// Use toFixed(0) to get full integer representation without scientific notation
|
|
48
55
|
const stringValue = value.floor().toFixed(0);
|
|
49
56
|
return BigInt(stringValue);
|
|
@@ -57,7 +64,7 @@ export function decimalToBigint(value) {
|
|
|
57
64
|
* @param quoteToken Address of quote token
|
|
58
65
|
* @returns The quote amount as Decimal
|
|
59
66
|
*/
|
|
60
|
-
|
|
67
|
+
function getQuoteFromSqrtRatioX96(sqrtRatioX96, baseAmount, baseToken, quoteToken) {
|
|
61
68
|
// Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself
|
|
62
69
|
if (sqrtRatioX96.lte(UINT128_MAX)) {
|
|
63
70
|
const ratioX192 = sqrtRatioX96.mul(sqrtRatioX96);
|
|
@@ -87,10 +94,10 @@ async function applySlippageProtection(sqrtPriceX96, slippageBP, zeroForOne, tok
|
|
|
87
94
|
// Get current price: how much token1 per 1 unit of token0
|
|
88
95
|
const decimals0 = await publicClient.readContract({
|
|
89
96
|
address: token0,
|
|
90
|
-
abi: erc20Abi,
|
|
97
|
+
abi: erc20_js_1.erc20Abi,
|
|
91
98
|
functionName: 'decimals'
|
|
92
99
|
});
|
|
93
|
-
const baseAmount = new Decimal(10).pow(decimals0);
|
|
100
|
+
const baseAmount = new decimal_js_1.Decimal(10).pow(decimals0);
|
|
94
101
|
const currentQuote = getQuoteFromSqrtRatioX96(sqrtPriceX96, baseAmount, token0, token1);
|
|
95
102
|
let adjustedQuote;
|
|
96
103
|
if (zeroForOne) {
|
|
@@ -144,22 +151,22 @@ async function applySlippageProtection(sqrtPriceX96, slippageBP, zeroForOne, tok
|
|
|
144
151
|
* }
|
|
145
152
|
* ```
|
|
146
153
|
*/
|
|
147
|
-
|
|
154
|
+
async function calculateLimitPrice(publicClient, params) {
|
|
148
155
|
try {
|
|
149
156
|
// Get current pool state from slot0
|
|
150
|
-
const slot0Data = await getPoolState(publicClient, {
|
|
157
|
+
const slot0Data = await (0, utils_js_1.getPoolState)(publicClient, {
|
|
151
158
|
poolAddress: params.pool,
|
|
152
|
-
isAlgebraPool: params.ammType === AMMType.Algebra,
|
|
153
|
-
isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,
|
|
154
|
-
isAlgebraDirectionPool: params.ammType === AMMType.AlgebraDirectional,
|
|
159
|
+
isAlgebraPool: params.ammType === types_js_1.AMMType.Algebra,
|
|
160
|
+
isAlgebraIntegralPool: params.ammType === types_js_1.AMMType.AlgebraIntegral,
|
|
161
|
+
isAlgebraDirectionPool: params.ammType === types_js_1.AMMType.AlgebraDirectional,
|
|
155
162
|
isPoolSharkPool: false // PoolShark not defined in AMMType enum
|
|
156
163
|
});
|
|
157
164
|
if (!slot0Data.success || !slot0Data.data) {
|
|
158
165
|
throw new Error(slot0Data.error || 'Failed to get pool state');
|
|
159
166
|
}
|
|
160
|
-
const sqrtPriceX96BigInt = getPoolPrice(slot0Data.data, {
|
|
161
|
-
isAlgebraPool: params.ammType === AMMType.Algebra,
|
|
162
|
-
isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,
|
|
167
|
+
const sqrtPriceX96BigInt = (0, utils_js_1.getPoolPrice)(slot0Data.data, {
|
|
168
|
+
isAlgebraPool: params.ammType === types_js_1.AMMType.Algebra,
|
|
169
|
+
isAlgebraIntegralPool: params.ammType === types_js_1.AMMType.AlgebraIntegral,
|
|
163
170
|
isPoolSharkPool: false // PoolShark not defined in AMMType enum
|
|
164
171
|
});
|
|
165
172
|
if (!sqrtPriceX96BigInt) {
|
|
@@ -167,7 +174,7 @@ export async function calculateLimitPrice(publicClient, params) {
|
|
|
167
174
|
}
|
|
168
175
|
// Convert to Decimal for high-precision calculations
|
|
169
176
|
const sqrtPriceX96 = bigintToDecimal(sqrtPriceX96BigInt);
|
|
170
|
-
const slippageBP = new Decimal(params.slippageBP);
|
|
177
|
+
const slippageBP = new decimal_js_1.Decimal(params.slippageBP);
|
|
171
178
|
// Apply slippage protection using high-precision arithmetic
|
|
172
179
|
const limitSqrtPriceX96Decimal = await applySlippageProtection(sqrtPriceX96, slippageBP, params.zeroForOne, params.token0, params.token1, publicClient);
|
|
173
180
|
return {
|
|
@@ -194,13 +201,13 @@ export async function calculateLimitPrice(publicClient, params) {
|
|
|
194
201
|
* @param ammType - Type of AMM
|
|
195
202
|
* @returns Promise resolving to the pool slot0 data
|
|
196
203
|
*/
|
|
197
|
-
|
|
204
|
+
async function getPoolSlot0(publicClient, poolAddress, ammType) {
|
|
198
205
|
try {
|
|
199
|
-
const poolState = await getPoolStateWithPrice(publicClient, {
|
|
206
|
+
const poolState = await (0, utils_js_1.getPoolStateWithPrice)(publicClient, {
|
|
200
207
|
poolAddress,
|
|
201
|
-
isAlgebraPool: ammType === AMMType.Algebra,
|
|
202
|
-
isAlgebraIntegralPool: ammType === AMMType.AlgebraIntegral,
|
|
203
|
-
isAlgebraDirectionPool: ammType === AMMType.AlgebraDirectional,
|
|
208
|
+
isAlgebraPool: ammType === types_js_1.AMMType.Algebra,
|
|
209
|
+
isAlgebraIntegralPool: ammType === types_js_1.AMMType.AlgebraIntegral,
|
|
210
|
+
isAlgebraDirectionPool: ammType === types_js_1.AMMType.AlgebraDirectional,
|
|
204
211
|
isPoolSharkPool: false // PoolShark not defined in AMMType enum
|
|
205
212
|
});
|
|
206
213
|
if (!poolState.success || !poolState.data) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculateLimitPrice.js","sourceRoot":"","sources":["../../../../../src/base/vault/single-asset/calculateLimitPrice.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from 'decimal.js';\nimport type { PublicClient } from 'viem';\nimport { erc20Abi } from '../../../const/abis/erc20.js';\nimport { SteerResponse } from '../../../types.js';\nimport { getPoolPrice, getPoolState, getPoolStateWithPrice } from '../utils.js';\nimport type { CalculateLimitPriceParams, PoolSlot0 } from './types.js';\nimport { AMMType } from './types.js';\n\n/**\n * Configure Decimal.js for high precision calculations\n */\nDecimal.config({ \n precision: 50, // High precision for financial calculations\n rounding: Decimal.ROUND_DOWN // Conservative rounding for safety\n});\n\n/**\n * Constants matching the Solidity contract using Decimal.js\n */\nconst BASIS_POINTS = new Decimal(10000);\nconst Q96 = new Decimal(2).pow(96);\nconst Q192 = Q96.mul(Q96);\nconst Q128 = new Decimal(2).pow(128);\nconst Q64 = new Decimal(2).pow(64);\nconst UINT128_MAX = new Decimal(2).pow(128).sub(1);\n\n/**\n * High-precision multiplication and division using Decimal.js\n * Equivalent to Solidity's FullMath.mulDiv\n */\nfunction mulDiv(a: Decimal, b: Decimal, denominator: Decimal): Decimal {\n return a.mul(b).div(denominator);\n}\n\n/**\n * High-precision square root using Decimal.js\n */\nfunction sqrt(value: Decimal): Decimal {\n if (value.isZero()) return new Decimal(0);\n return value.sqrt();\n}\n\n/**\n * Convert BigInt to Decimal for calculations\n */\nexport function bigintToDecimal(value: bigint): Decimal {\n return new Decimal(value.toString());\n}\n\n/**\n * Convert Decimal back to BigInt for return values\n * Uses toFixed(0) to get full decimal representation without scientific notation\n */\nexport function decimalToBigint(value: Decimal): bigint {\n // Use toFixed(0) to get full integer representation without scientific notation\n const stringValue = value.floor().toFixed(0);\n return BigInt(stringValue);\n}\n\n/**\n * Get quote from sqrtRatioX96 using high-precision Decimal arithmetic\n * Equivalent to Solidity's getQuoteFromSqrtRatioX96\n * @param sqrtRatioX96 The sqrt ratio for which to compute the quote\n * @param baseAmount Amount of base token\n * @param baseToken Address of base token\n * @param quoteToken Address of quote token\n * @returns The quote amount as Decimal\n */\nexport function getQuoteFromSqrtRatioX96(\n sqrtRatioX96: Decimal,\n baseAmount: Decimal,\n baseToken: `0x${string}`,\n quoteToken: `0x${string}`\n): Decimal {\n // Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself\n if (sqrtRatioX96.lte(UINT128_MAX)) {\n const ratioX192 = sqrtRatioX96.mul(sqrtRatioX96);\n return baseToken < quoteToken\n ? mulDiv(ratioX192, baseAmount, Q192)\n : mulDiv(Q192, baseAmount, ratioX192);\n } else {\n const ratioX128 = mulDiv(sqrtRatioX96, sqrtRatioX96, Q64);\n return baseToken < quoteToken\n ? mulDiv(ratioX128, baseAmount, Q128)\n : mulDiv(Q128, baseAmount, ratioX128);\n }\n}\n\n/**\n * Applies slippage protection to sqrtPriceX96 based on swap direction using high-precision arithmetic\n * Equivalent to Solidity's applySlippageProtection function\n * @param sqrtPriceX96 The current square root price\n * @param slippageBP Slippage protection in basis points (e.g., 300 = 3%)\n * @param zeroForOne True if swapping token0 for token1\n * @param token0 Address of token0\n * @param token1 Address of token1\n * @param publicClient Viem public client for reading token decimals\n * @returns The price limit with slippage protection as Decimal\n */\nasync function applySlippageProtection(\n sqrtPriceX96: Decimal,\n slippageBP: Decimal,\n zeroForOne: boolean,\n token0: `0x${string}`,\n token1: `0x${string}`,\n publicClient: PublicClient\n): Promise<Decimal> {\n // Get current price: how much token1 per 1 unit of token0\n const decimals0 = await publicClient.readContract({\n address: token0,\n abi: erc20Abi,\n functionName: 'decimals'\n }) as number;\n \n const baseAmount = new Decimal(10).pow(decimals0);\n \n const currentQuote = getQuoteFromSqrtRatioX96(\n sqrtPriceX96,\n baseAmount,\n token0,\n token1\n );\n \n let adjustedQuote: Decimal;\n \n if (zeroForOne) {\n // Swapping token0 for token1\n // We want to ensure we don't get less than expected token1\n // So we set a minimum acceptable rate (decrease the quote)\n adjustedQuote = mulDiv(currentQuote, BASIS_POINTS.sub(slippageBP), BASIS_POINTS);\n } else {\n // Swapping token1 for token0 \n // We want to ensure we don't pay more than expected token1\n // So we set a maximum acceptable rate (increase the quote)\n adjustedQuote = mulDiv(currentQuote, BASIS_POINTS.add(slippageBP), BASIS_POINTS);\n }\n \n if (adjustedQuote.isZero()) {\n throw new Error('AdjustedQuoteCalculationFailed');\n }\n \n // Convert adjusted quote back to sqrtPriceX96\n // This is the reverse of getQuoteFromSqrtRatioX96\n let adjustedRatioX192: Decimal;\n if (token0 < token1) {\n // ratioX192 = (adjustedQuote * 2^192) / baseAmount\n adjustedRatioX192 = mulDiv(adjustedQuote, Q192, baseAmount);\n } else {\n // ratioX192 = (baseAmount * 2^192) / adjustedQuote \n adjustedRatioX192 = mulDiv(baseAmount, Q192, adjustedQuote);\n }\n \n return sqrt(adjustedRatioX192);\n}\n\n/**\n * Calculates the sqrt price limit for slippage protection during swaps using high-precision arithmetic\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for limit price calculation\n * @returns Promise resolving to the calculated sqrt price limit\n * \n * @example\n * ```typescript\n * const result = await calculateLimitPrice(publicClient, {\n * pool: '0x...',\n * slippageBP: 500, // 5% slippage\n * zeroForOne: true,\n * ammType: AMMType.UniswapV3,\n * token0: '0x...',\n * token1: '0x...'\n * });\n * \n * if (result.success) {\n * console.log('Sqrt price limit:', result.data);\n * }\n * ```\n */\nexport async function calculateLimitPrice(\n publicClient: PublicClient,\n params: CalculateLimitPriceParams\n): Promise<SteerResponse<bigint>> {\n try {\n // Get current pool state from slot0\n const slot0Data = await getPoolState(\n publicClient,\n {\n poolAddress: params.pool,\n isAlgebraPool: params.ammType === AMMType.Algebra,\n isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n isAlgebraDirectionPool: params.ammType === AMMType.AlgebraDirectional,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n }\n );\n\n if (!slot0Data.success || !slot0Data.data) {\n throw new Error(slot0Data.error || 'Failed to get pool state');\n }\n\n const sqrtPriceX96BigInt = getPoolPrice(slot0Data.data, {\n isAlgebraPool: params.ammType === AMMType.Algebra,\n isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n });\n\n if (!sqrtPriceX96BigInt) {\n throw new Error('Failed to extract pool price');\n }\n \n // Convert to Decimal for high-precision calculations\n const sqrtPriceX96 = bigintToDecimal(sqrtPriceX96BigInt);\n const slippageBP = new Decimal(params.slippageBP);\n\n // Apply slippage protection using high-precision arithmetic\n const limitSqrtPriceX96Decimal = await applySlippageProtection(\n sqrtPriceX96,\n slippageBP,\n params.zeroForOne,\n params.token0,\n params.token1,\n publicClient\n );\n\n return {\n data: decimalToBigint(limitSqrtPriceX96Decimal),\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to calculate limit price'\n };\n }\n}\n\n/**\n * Gets the current pool state from slot0\n * Currently supports UniswapV3 only\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param poolAddress - Address of the pool\n * @param ammType - Type of AMM\n * @returns Promise resolving to the pool slot0 data\n */\nexport async function getPoolSlot0(\n publicClient: PublicClient,\n poolAddress: `0x${string}`,\n ammType: AMMType\n): Promise<SteerResponse<PoolSlot0>> {\n try {\n const poolState = await getPoolStateWithPrice(publicClient, {\n poolAddress,\n isAlgebraPool: ammType === AMMType.Algebra,\n isAlgebraIntegralPool: ammType === AMMType.AlgebraIntegral,\n isAlgebraDirectionPool: ammType === AMMType.AlgebraDirectional,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n });\n\n if (!poolState.success || !poolState.data) {\n throw new Error(poolState.error || 'Failed to get pool state');\n }\n\n return {\n data: poolState.data.state as PoolSlot0,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to get pool slot0 data'\n };\n }\n} "]}
|
|
1
|
+
{"version":3,"file":"calculateLimitPrice.js","sourceRoot":"","sources":["../../../../../src/base/vault/single-asset/calculateLimitPrice.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from 'decimal.js';\nimport type { PublicClient } from 'viem';\nimport { erc20Abi } from '../../../const/abis/erc20.js';\nimport { SteerResponse } from '../../../types.js';\nimport { getPoolPrice, getPoolState, getPoolStateWithPrice } from '../utils.js';\nimport type { CalculateLimitPriceParams, PoolSlot0 } from './types.js';\nimport { AMMType } from './types.js';\n\n/**\n * Configure Decimal.js for high precision calculations\n */\nDecimal.config({ \n precision: 50, // High precision for financial calculations\n rounding: Decimal.ROUND_DOWN // Conservative rounding for safety\n});\n\n/**\n * Constants matching the Solidity contract using Decimal.js\n */\nconst BASIS_POINTS = new Decimal(10000);\nconst Q96 = new Decimal(2).pow(96);\nconst Q192 = Q96.mul(Q96);\nconst Q128 = new Decimal(2).pow(128);\nconst Q64 = new Decimal(2).pow(64);\nconst UINT128_MAX = new Decimal(2).pow(128).sub(1);\n\n/**\n * High-precision multiplication and division using Decimal.js\n * Equivalent to Solidity's FullMath.mulDiv\n */\nfunction mulDiv(a: Decimal, b: Decimal, denominator: Decimal): Decimal {\n return a.mul(b).div(denominator);\n}\n\n/**\n * High-precision square root using Decimal.js\n */\nfunction sqrt(value: Decimal): Decimal {\n if (value.isZero()) return new Decimal(0);\n return value.sqrt();\n}\n\n/**\n * Convert BigInt to Decimal for calculations\n */\nexport function bigintToDecimal(value: bigint): Decimal {\n return new Decimal(value.toString());\n}\n\n/**\n * Convert Decimal back to BigInt for return values\n * Uses toFixed(0) to get full decimal representation without scientific notation\n */\nexport function decimalToBigint(value: Decimal): bigint {\n // Use toFixed(0) to get full integer representation without scientific notation\n const stringValue = value.floor().toFixed(0);\n return BigInt(stringValue);\n}\n\n/**\n * Get quote from sqrtRatioX96 using high-precision Decimal arithmetic\n * Equivalent to Solidity's getQuoteFromSqrtRatioX96\n * @param sqrtRatioX96 The sqrt ratio for which to compute the quote\n * @param baseAmount Amount of base token\n * @param baseToken Address of base token\n * @param quoteToken Address of quote token\n * @returns The quote amount as Decimal\n */\nexport function getQuoteFromSqrtRatioX96(\n sqrtRatioX96: Decimal,\n baseAmount: Decimal,\n baseToken: `0x${string}`,\n quoteToken: `0x${string}`\n): Decimal {\n // Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself\n if (sqrtRatioX96.lte(UINT128_MAX)) {\n const ratioX192 = sqrtRatioX96.mul(sqrtRatioX96);\n return baseToken < quoteToken\n ? mulDiv(ratioX192, baseAmount, Q192)\n : mulDiv(Q192, baseAmount, ratioX192);\n } else {\n const ratioX128 = mulDiv(sqrtRatioX96, sqrtRatioX96, Q64);\n return baseToken < quoteToken\n ? mulDiv(ratioX128, baseAmount, Q128)\n : mulDiv(Q128, baseAmount, ratioX128);\n }\n}\n\n/**\n * Applies slippage protection to sqrtPriceX96 based on swap direction using high-precision arithmetic\n * Equivalent to Solidity's applySlippageProtection function\n * @param sqrtPriceX96 The current square root price\n * @param slippageBP Slippage protection in basis points (e.g., 300 = 3%)\n * @param zeroForOne True if swapping token0 for token1\n * @param token0 Address of token0\n * @param token1 Address of token1\n * @param publicClient Viem public client for reading token decimals\n * @returns The price limit with slippage protection as Decimal\n */\nasync function applySlippageProtection(\n sqrtPriceX96: Decimal,\n slippageBP: Decimal,\n zeroForOne: boolean,\n token0: `0x${string}`,\n token1: `0x${string}`,\n publicClient: PublicClient\n): Promise<Decimal> {\n // Get current price: how much token1 per 1 unit of token0\n const decimals0 = await publicClient.readContract({\n address: token0,\n abi: erc20Abi,\n functionName: 'decimals'\n }) as number;\n \n const baseAmount = new Decimal(10).pow(decimals0);\n \n const currentQuote = getQuoteFromSqrtRatioX96(\n sqrtPriceX96,\n baseAmount,\n token0,\n token1\n );\n \n let adjustedQuote: Decimal;\n \n if (zeroForOne) {\n // Swapping token0 for token1\n // We want to ensure we don't get less than expected token1\n // So we set a minimum acceptable rate (decrease the quote)\n adjustedQuote = mulDiv(currentQuote, BASIS_POINTS.sub(slippageBP), BASIS_POINTS);\n } else {\n // Swapping token1 for token0 \n // We want to ensure we don't pay more than expected token1\n // So we set a maximum acceptable rate (increase the quote)\n adjustedQuote = mulDiv(currentQuote, BASIS_POINTS.add(slippageBP), BASIS_POINTS);\n }\n \n if (adjustedQuote.isZero()) {\n throw new Error('AdjustedQuoteCalculationFailed');\n }\n \n // Convert adjusted quote back to sqrtPriceX96\n // This is the reverse of getQuoteFromSqrtRatioX96\n let adjustedRatioX192: Decimal;\n if (token0 < token1) {\n // ratioX192 = (adjustedQuote * 2^192) / baseAmount\n adjustedRatioX192 = mulDiv(adjustedQuote, Q192, baseAmount);\n } else {\n // ratioX192 = (baseAmount * 2^192) / adjustedQuote \n adjustedRatioX192 = mulDiv(baseAmount, Q192, adjustedQuote);\n }\n \n return sqrt(adjustedRatioX192);\n}\n\n/**\n * Calculates the sqrt price limit for slippage protection during swaps using high-precision arithmetic\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for limit price calculation\n * @returns Promise resolving to the calculated sqrt price limit\n * \n * @example\n * ```typescript\n * const result = await calculateLimitPrice(publicClient, {\n * pool: '0x...',\n * slippageBP: 500, // 5% slippage\n * zeroForOne: true,\n * ammType: AMMType.UniswapV3,\n * token0: '0x...',\n * token1: '0x...'\n * });\n * \n * if (result.success) {\n * console.log('Sqrt price limit:', result.data);\n * }\n * ```\n */\nexport async function calculateLimitPrice(\n publicClient: PublicClient,\n params: CalculateLimitPriceParams\n): Promise<SteerResponse<bigint>> {\n try {\n // Get current pool state from slot0\n const slot0Data = await getPoolState(\n publicClient,\n {\n poolAddress: params.pool,\n isAlgebraPool: params.ammType === AMMType.Algebra,\n isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n isAlgebraDirectionPool: params.ammType === AMMType.AlgebraDirectional,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n }\n );\n\n if (!slot0Data.success || !slot0Data.data) {\n throw new Error(slot0Data.error || 'Failed to get pool state');\n }\n\n const sqrtPriceX96BigInt = getPoolPrice(slot0Data.data, {\n isAlgebraPool: params.ammType === AMMType.Algebra,\n isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n });\n\n if (!sqrtPriceX96BigInt) {\n throw new Error('Failed to extract pool price');\n }\n \n // Convert to Decimal for high-precision calculations\n const sqrtPriceX96 = bigintToDecimal(sqrtPriceX96BigInt);\n const slippageBP = new Decimal(params.slippageBP);\n\n // Apply slippage protection using high-precision arithmetic\n const limitSqrtPriceX96Decimal = await applySlippageProtection(\n sqrtPriceX96,\n slippageBP,\n params.zeroForOne,\n params.token0,\n params.token1,\n publicClient\n );\n\n return {\n data: decimalToBigint(limitSqrtPriceX96Decimal),\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to calculate limit price'\n };\n }\n}\n\n/**\n * Gets the current pool state from slot0\n * Currently supports UniswapV3 only\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param poolAddress - Address of the pool\n * @param ammType - Type of AMM\n * @returns Promise resolving to the pool slot0 data\n */\nexport async function getPoolSlot0(\n publicClient: PublicClient,\n poolAddress: `0x${string}`,\n ammType: AMMType\n): Promise<SteerResponse<PoolSlot0>> {\n try {\n const poolState = await getPoolStateWithPrice(publicClient, {\n poolAddress,\n isAlgebraPool: ammType === AMMType.Algebra,\n isAlgebraIntegralPool: ammType === AMMType.AlgebraIntegral,\n isAlgebraDirectionPool: ammType === AMMType.AlgebraDirectional,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n });\n\n if (!poolState.success || !poolState.data) {\n throw new Error(poolState.error || 'Failed to get pool state');\n }\n\n return {\n data: poolState.data.state as PoolSlot0,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to get pool slot0 data'\n };\n }\n} "]}
|