@steerprotocol/sdk 2.0.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.mjs","names":["getSwapRouterAddress","getInitCodeHash","getFactoryAddress","getTickLensAddress","getNFTManagerAddress","VAULT_ABI","PERIPHERY_ABI","PoolV3","VAULT_ABI","PERIPHERY_ABI","VAULT_ABI"],"sources":["../src/const/chain.ts","../src/const/deployments/abis.ts","../src/const/deployments/apechain.ts","../src/const/deployments/arbitrum.ts","../src/const/deployments/arbitrumgoerli.ts","../src/const/deployments/astar.ts","../src/const/deployments/astarzkevm.ts","../src/const/deployments/avalanche.ts","../src/const/deployments/bartiotest.ts","../src/const/deployments/base.ts","../src/const/deployments/blast.ts","../src/const/deployments/bsc.ts","../src/const/deployments/celo.ts","../src/const/deployments/evmos.ts","../src/const/deployments/fantom.ts","../src/const/deployments/filecoin.ts","../src/const/deployments/flare.ts","../src/const/deployments/goerli.ts","../src/const/deployments/kava.ts","../src/const/deployments/linea.ts","../src/const/deployments/localhost.ts","../src/const/deployments/eth.ts","../src/const/deployments/manta.ts","../src/const/deployments/mantle.ts","../src/const/deployments/metis.ts","../src/const/deployments/mode.ts","../src/const/deployments/moonbeam.ts","../src/const/deployments/mumbai.ts","../src/const/deployments/okxtestnet.ts","../src/const/deployments/optimism.ts","../src/const/deployments/optimismgoerli.ts","../src/const/deployments/polygon.ts","../src/const/deployments/polyzkevm.ts","../src/const/deployments/rootstock.ts","../src/const/deployments/scroll.ts","../src/const/deployments/sei.ts","../src/const/deployments/sonic.ts","../src/const/deployments/taiko.ts","../src/const/deployments/telos.ts","../src/const/deployments/thundercore.ts","../src/const/deployments/xlayer.ts","../src/const/deployments/zircuit.ts","../src/const/deployments/hemi.ts","../src/const/deployments/soneium.ts","../src/const/deployments/uni.ts","../src/const/deployments/zeta.ts","../src/const/deployments/bera.ts","../src/const/deployments/katana.ts","../src/const/deployments/saga.ts","../src/const/deployments/berachainbartio.ts","../src/const/deployments/core.ts","../src/const/deployments/tataratestnet.ts","../src/const/deployments/zklinknova.ts","../src/const/deployments/peaq.ts","../src/const/deployments/ronin.ts","../src/const/deployments/nibiru.ts","../src/const/deployments/hyperevm.ts","../src/const/feeManagerContracts.ts","../src/const/network.ts","../src/base/vault/single-asset/types.ts","../src/const/protocol.ts","../src/const/subgraph.ts","../src/const/thegraph.ts","../src/const/api.ts","../src/const/abis/erc20.ts","../src/const/abis/erc721.ts","../src/const/abis/erc1155.ts","../src/const/abis/singleTokenDeposit.ts","../src/const/abis/UniswapPool.ts","../src/const/abis/quoter.ts","../src/const/abis/feeManager.ts","../src/const/abis/vaultFees.ts","../src/const/amm/configs/protocols/arthswap.ts","../src/const/amm/configs/protocols/baseswap.ts","../src/const/amm/configs/protocols/basex.ts","../src/const/amm/configs/protocols/camelot.ts","../src/const/amm/configs/protocols/crust.ts","../src/const/amm/configs/protocols/equilibre.ts","../src/const/amm/configs/protocols/fenix.ts","../src/const/amm/configs/protocols/forge.ts","../src/const/amm/configs/protocols/fusionx.ts","../src/const/amm/configs/protocols/henjin.ts","../src/const/amm/configs/protocols/hercules.ts","../src/const/amm/configs/protocols/horiza.ts","../src/const/amm/configs/protocols/kim.ts","../src/const/amm/configs/protocols/linehub.ts","../src/const/amm/configs/protocols/lynex.ts","../src/const/amm/configs/protocols/maia.ts","../src/const/amm/configs/protocols/metavault.ts","../src/const/amm/configs/protocols/novaswap.ts","../src/const/amm/configs/protocols/pancakeswap.ts","../src/const/amm/configs/protocols/poolshark.ts","../src/const/amm/configs/protocols/quickswap.ts","../src/const/amm/configs/protocols/quickswap-algebra.ts","../src/const/amm/configs/protocols/quickswap-integral.ts","../src/const/amm/configs/protocols/quickswap-univ3.ts","../src/const/amm/configs/protocols/retro.ts","../src/const/amm/configs/protocols/spark.ts","../src/const/amm/configs/protocols/spark32.ts","../src/const/amm/configs/protocols/supswap.ts","../src/const/amm/configs/protocols/swapmode.ts","../src/const/amm/configs/protocols/swapsicle.ts","../src/const/amm/configs/protocols/sushi.ts","../src/const/amm/configs/protocols/thena.ts","../src/const/amm/configs/protocols/thick.ts","../src/const/amm/configs/protocols/thruster.ts","../src/const/amm/configs/protocols/uniswap.ts","../src/const/amm/configs/protocols/kinetix.ts","../src/const/amm/configs/protocols/glyph.ts","../src/const/amm/configs/protocols/katana.ts","../src/const/amm/configs/protocols/shadow.ts","../src/const/amm/configs/protocols/nest.ts","../src/const/amm/configs/protocols/blackhole.ts","../src/const/amm/configs/protocols/beam.ts","../src/const/amm/configs/protocols/beamswap.ts","../src/const/amm/configs/protocols/dodo.ts","../src/const/amm/configs/protocols/dragonswap.ts","../src/const/amm/configs/protocols/eddy.ts","../src/const/amm/configs/protocols/kodiak.ts","../src/const/amm/configs/protocols/kyo.ts","../src/const/amm/configs/protocols/ocelex.ts","../src/const/amm/configs/protocols/sailor.ts","../src/const/amm/configs/protocols/silverswap.ts","../src/const/amm/configs/protocols/spookyswap.ts","../src/const/amm/configs/protocols/stellaswap.ts","../src/const/amm/configs/protocols/thickv2.ts","../src/const/amm/configs/protocols/wasabee.ts","../src/const/amm/configs/protocols/machinex.ts","../src/const/amm/configs/protocols/katanaIntegral.ts","../src/const/amm/configs/protocols/aerodrome.ts","../src/const/amm/configs/protocols/aerodrome-v2.ts","../src/const/amm/configs/protocols/cypher.ts","../src/const/amm/configs/protocols/spark-integral.ts","../src/const/amm/configs/protocols/uniswapv4.ts","../src/const/amm/configs/ammConfig.ts","../src/const/amm/utils/beacon.ts","../src/const/amm/utils/contracts.ts","../src/const/amm/utils/protocol.ts","../src/const/amm/utils/index.ts","../src/const/capabilities.ts","../src/const/quoter.ts","../src/const/stabilityVaults/stabilityVaultsConfig.ts","../src/utils/SubgraphVaultClient.ts","../src/base/SmartRewards.ts","../src/base/SubgraphClient.ts","../src/base/vault/utils.ts","../src/base/vault/deposit/index.ts","../src/base/vault/single-asset/calculateSwapAmount.ts","../src/base/vault/single-asset/calculateLimitPrice.ts","../src/base/vault/single-asset/simulateSwap.ts","../src/base/vault/single-asset/estimateLpTokens.ts","../src/base/vault/single-asset/singleAssetDeposit.ts","../src/base/vault/single-asset/index.ts","../src/base/vault/withdraw/index.ts","../src/base/VaultClient.ts","../src/base/SmartRewardClient.ts","../src/utils/PoolQueryAdapter.ts","../src/base/PoolClient.ts","../src/base/StakingClient.ts","../src/client.ts","../src/base/FeeManagerClient.ts","../src/index.ts"],"sourcesContent":["// Chain types\nexport enum Chain {\n // Mainnet = 'Mainnet',\n Polygon = 'Polygon',\n Arbitrum = 'Arbitrum',\n Optimism = 'Optimism',\n BSC = 'BSC',\n Evmos = 'Evmos',\n Metis = 'Metis',\n Thundercore = 'Thundercore',\n Base = 'Base',\n Avalanche = 'Avalanche',\n PolygonzkEVM = 'PolygonzkEVM',\n Celo = 'Celo',\n Kava = 'Kava',\n Linea = 'Linea',\n Scroll = 'Scroll',\n Manta = 'Manta',\n Astar = 'Astar',\n Fantom = 'Fantom',\n OkxTestnet = 'OkxTestnet',\n Mantle = 'Mantle',\n AstarZkevm = 'AstarZkevm',\n Blast = 'Blast',\n Mode = 'Mode',\n XLayer = 'XLayer',\n Telos = 'Telos',\n Rootstock = 'Rootstock',\n Taiko = 'Taiko',\n ZklinkNova = 'ZklinkNova',\n Flare = 'Flare',\n BeraChainBartio = 'BeraChainBartio',\n Filecoin = 'Filecoin',\n Apechain = 'Apechain',\n Zircuit = 'Zircuit',\n Moonbeam = 'Moonbeam',\n Sei = 'Sei',\n Sonic = 'Sonic',\n Zeta = 'Zeta',\n Soneium = 'Soneium',\n Mainnet = 'Mainnet',\n Bera = 'Bera',\n Unichain = 'Unichain',\n TataraTestnet = 'TataraTestnet',\n Hemi = 'Hemi',\n Core = 'Core',\n Peaq = 'Peaq',\n Katana = 'Katana',\n Ronin='Ronin',\n Saga='Saga',\n Nibiru='Nibiru',\n Hyperevm='Hyperevm'\n}\n\nexport const ChainId: {\n [key in Chain]: number;\n} = {\n Polygon: 137,\n Arbitrum: 42161,\n Optimism: 10,\n BSC: 56,\n Evmos: 9001,\n Metis: 1088,\n Avalanche: 43114,\n Thundercore: 108,\n PolygonzkEVM: 1101,\n Celo: 42220,\n Kava: 2222,\n Linea: 59144,\n Scroll: 534352,\n Manta: 169,\n Astar: 592,\n Mantle: 5000,\n Fantom: 250,\n AstarZkevm: 3776,\n Blast: 81457,\n Mode: 34443,\n Telos: 40,\n Base: 8453,\n XLayer: 196,\n Rootstock: 30,\n Taiko: 167000,\n ZklinkNova: 810180,\n Flare: 14,\n BeraChainBartio: 80084,\n Filecoin: 314,\n Apechain: 33139,\n Zircuit: 48900,\n Moonbeam: 1284,\n Sei: 1329,\n Sonic: 146,\n Bera: 80094,\n Zeta: 7000,\n Soneium: 1868,\n Mainnet: 1,\n Unichain: 130,\n TataraTestnet: 129399,\n Hemi: 43111,\n OkxTestnet: 195,\n Core: 1116,\n Peaq: 3338,\n Katana: 747474,\n Ronin: 2020,\n Saga: 5464,\n Nibiru: 6900,\n Hyperevm: 999\n};\n\n// Protocol types\nexport enum Protocol {\n QuickSwap = 'QuickSwap',\n Uniswap = 'Uniswap',\n Sushi = 'Sushi',\n Forge = 'Forge',\n PancakeSwap = 'PancakeSwap',\n Maia = 'Maia',\n Retro = 'Retro',\n Kinetix = 'Kinetix',\n MetaVault = 'MetaVault',\n QuickSwapUniv3 = 'QuickSwapUniv3',\n Camelot = 'Camelot',\n Lynex = 'Lynex',\n Thena = 'Thena',\n Horiza = 'Horiza',\n BaseX = 'BaseX',\n ArthSwap = 'ArthSwap',\n Hercules = 'Hercules',\n Thick = 'Thick',\n Crust = 'Crust',\n Thruster = 'Thruster',\n FusionX = 'FusionX',\n SupSwap = 'SupSwap',\n SwapMode = 'SwapMode',\n BaseSwap = 'BaseSwap',\n PoolShark = 'PoolShark',\n Kim = 'Kim',\n Swapsicle = 'Swapsicle',\n Equilibre = 'Equilibre',\n QuickSwapAlgebra = 'QuickSwapAlgebra',\n Fenix = 'Fenix',\n LineHub = 'LineHub',\n Henjin = 'Henjin',\n NovaSwap = 'NovaSwap',\n Spark = 'Spark',\n Spark32 = 'Spark32',\n Kodiak = 'Kodiak',\n Ocelex = 'Ocelex',\n StellaSwap = 'StellaSwap',\n BeamSwap = 'BeamSwap',\n DragonSwap = 'DragonSwap',\n SpookySwap = 'SpookySwap',\n SilverSwap = 'SilverSwap',\n ThickV2 = 'ThickV2',\n Beam = 'Beam',\n QuickSwapIntegral = 'QuickSwapIntegral',\n Kyo = 'Kyo',\n Wasabee = 'Wasabee',\n Katana = 'Katana',\n Eddy = 'Eddy',\n Dodo = 'Dodo',\n Glyph = 'Glyph',\n Sailor = 'Sailor',\n Shadow = 'Shadow',\n MachineX = 'MachineX',\n KatanaIntegral = 'KatanaIntegral',\n Blackhole = 'Blackhole',\n Aerodrome = 'Aerodrome',\n AerodromeV2 = 'AerodromeV2',\n Nest = 'Nest',\n Cypher = 'Cypher',\n SparkIntegral='SparkIntegral',\n UniswapV4 = 'UniswapV4',\n}\n\nexport enum StrykePositionManagers {\n StrykeEqualizerManager= 'StrykeEqualizerPositionManager',\n StrykeShadowManager = 'StrykeShadowManager'\n}\n\nexport enum MultiPositionManagers {\n MultiPositionUniswapV3 = 'MultiPositionUniswapV3',\n MultiPositionSushi = 'MultiPositionSushi',\n MultiPositionForge = 'MultiPositionForge',\n MultiPositionMAIA = 'MultiPositionMAIA',\n MultiPositionPancake = 'MultiPositionPancake',\n MultiPositionRetro = 'MultiPositionRetro',\n MultiPositionKinetix = 'MultiPositionKinetix',\n MultiPositionQuickSwap = 'MultiPositionQuickSwap',\n MultiPositionQuickSwapUniv3 = 'MultiPositionQuickSwapUniv3',\n MultiPositionMetaVault = 'MultiPositionMetaVault',\n MultiPositionCamelot = 'MultiPositionCamelot',\n MultiPositionLynex = 'MultiPositionLynex',\n MultiPositionThena = 'MultiPositionThena',\n MultiPositionHoriza = 'MultiPositionHoriza',\n MultiPositionBaseX = 'MultiPositionBasex',\n MultiPositionArthSwap = 'MultiPositionArthSwap',\n MultiPositionHercules = 'MultiPositionHercules',\n MultiPositionThick = 'MultiPositionThick',\n MultiPositionCrust = 'MultiPositionCrust',\n MultiPositionThruster = 'MultiPositionThruster',\n MultiPositionFusionX = 'MultiPositionFusionx',\n MultiPositionSupSwap = 'MultiPositionSupSwap',\n MultiPositionSwapMode = 'MultiPositionSwapMode',\n MultiPositionBaseSwap = 'MultiPositionBaseSwap',\n MultiPositionQuickswap19 = 'MultiPositionQuickSwap19',\n MultiPositionPoolShark = 'MultiPositionPoolShark',\n MultiPositionKim = 'MultiPositionKim',\n MultiPositionSwasicle = 'MultiPositionSwapsicle',\n MultiPositionEquilibre = 'MultiPositionEquilibre',\n MultiPositionFenix = 'MultiPositionFenix',\n MultiPositionLineHub = 'MultiPositionLineHub',\n MultiPositionHenjin = 'MultiPositionHenjin',\n MultiPositionNovaSwap = 'MultiPositionNovaSwap',\n MultiPositionSpark = 'MultiPositionSpark',\n MultiPositionSpark32 = 'MultipositionSpark32',\n MultiPositionKodiak = 'MultiPositionKodiak',\n MultiPositionOcelex = 'MultiPositionOcelex',\n MultiPositionStellaSwap = 'MultiPositionStellaSwap',\n MultiPositionBeamSwap = 'MultiPositionBeamSwap',\n MultiPositionDragonSwap = 'MultiPositionDragonSwap',\n MultiPositionSpookySwap = 'MultiPositionSpookySwap',\n MultiPositionSilverSwap = 'MultiPositionSilverSwap',\n MultiPositionThickV2 = 'MultiPositionThickV2',\n MultiPositionBeam = 'MultiPositionBeam',\n MultiPositionQuickSwapIntegral = 'MultiPositionQuickSwapIntegral',\n MultiPositionKyo = 'MultiPositionKyo',\n MultiPositionSailor = 'MultiPositionSailor',\n MultiPositionWasabee = 'MultiPositionWasabee',\n MultiPositionEddy = 'MultiPositionEddy',\n MultiPositionDodo = 'MultiPositionDodo',\n MultiPositionGlyph = 'MultiPositionGlyph',\n MultiPositionKatana = 'MultiPositionKatana',\n MultiPositionShadow = 'MultiPositionShadow',\n MultiPositionMachineX = 'MultiPositionMachineX',\n MultiPositionKatanaIntegral = 'MultiPositionKatanaIntegral',\n MultiPositionUniswapV4ALM = 'MultiPositionUniswapV4',\n MultiPositionUniswapV4Hook = 'MultiPositionUniHookTest',\n MultiPositionUniswapV4HookOld = 'UniswapV4Hook',\n MultiPositionBlackhole = 'MultiPositionBlackHoleV1',\n MultiPositionBlackholeOld = 'MultiPositionBlackhole',\n AlgebraHook = 'AlgebraHook',\n MultiPositionAerodrome = 'MultiPositionAerodrome',\n MultiPositionAerodromeV2 = 'AerodromeStakedPositionManager',\n MultiPositionNest = 'MultiPositionNest',\n MultiPositionCypher = 'MultiPositionCypher',\n MultiPositionSushiManaged = 'MultiPositionSushiManaged',\n MultiPositionSparkIntegral='MultiPositionSparkIntegral',\n MultiPositionHenjinAlgebraHook='HenjinIntegralHook'\n}\n\n","// This file is auto-generated. Do not edit directly.\nexport const abis = {\n \"BundleRegistry\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconUpgraded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"hash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"bundle\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"host\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"source\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"output\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"infoHash\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"active\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"creator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BundleRegistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"hash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"toggle\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"BundleStateChange\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"bundles\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"bundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"source\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"host\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"output\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"info\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"active\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"author\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_bundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_source\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_host\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_output\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_infoHash\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"_active\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"register\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"_adapter\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"_remainActive\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"setAdapterState\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialLogic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialAdmin\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n }\n ],\n \"CamelotMultiPositionLiquidityManager\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"shares\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0Earned\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1Earned\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"FeesEarned\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"totalAmount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"totalAmount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"totalSupply\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Snapshot\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"shares\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"STEER_FRACTION_OF_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"STRATEGIST_FRACTION_OF_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOTAL_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"accruedFees0\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"accruedFees1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedSteerFees0\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedSteerFees1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedStrategistFees0\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedStrategistFees1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"algebraMintCallback\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Wanted\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"amount1Wanted\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"algebraSwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"feeIdentifier\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"collectFees\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\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 \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"emergencyBurn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"feeDetails\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"string[]\",\n \"name\": \"\",\n \"type\": \"string[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPositions\",\n \"outputs\": [\n {\n \"internalType\": \"int24[]\",\n \"name\": \"\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"int24[]\",\n \"name\": \"\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"uint16[]\",\n \"name\": \"\",\n \"type\": \"uint16[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getRoleMember\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleMemberCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getTotalAmounts\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_vaultManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_steer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_params\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxTickChange\",\n \"outputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"\",\n \"type\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"migrate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"poke\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pool\",\n \"outputs\": [\n {\n \"internalType\": \"contract IAlgebraPool\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalWeight\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"int24[]\",\n \"name\": \"lowerTick\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"int24[]\",\n \"name\": \"upperTick\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"uint16[]\",\n \"name\": \"relativeWeight\",\n \"type\": \"uint16[]\"\n }\n ],\n \"internalType\": \"struct CamelotMultiPositionLiquidityManager.LiquidityPositions\",\n \"name\": \"newPositions\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"timeSensitiveData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"tend\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token0\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token1\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalFees0\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalFees1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"twapInterval\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"shares\",\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\": \"withdraw\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"GasVault\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconUpgraded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"origin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposited\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"jobHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"EtherUsed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"targetAddress\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdrawn\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"targetAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ethBalances\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_targetAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"gasAvailableForTransaction\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_orchestrator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_stratRegistry\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_vaultRegistry\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"orchestrator\",\n \"outputs\": [\n {\n \"internalType\": \"contract IOrchestrator\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"targetAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"originalGas\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"jobHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"reimburseGas\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"strategyRegistry\",\n \"outputs\": [\n {\n \"internalType\": \"contract IStrategyRegistry\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"targetAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"highGasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transactionsRemaining\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"vaultRegistry\",\n \"outputs\": [\n {\n \"internalType\": \"contract IVaultRegistry\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address payable\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialLogic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialAdmin\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n }\n ],\n \"SteerPeriphery\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconUpgraded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"algebraVaultDetailsByAddress\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"string\",\n \"name\": \"vaultType\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"decimals\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token0Name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token1Name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token0Symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token1Symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token0Decimals\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token1Decimals\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalLPTokensIssued\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token0Balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token1Balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultCreator\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IMultiPositionManager.AlgebraVaultDetails\",\n \"name\": \"details\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"params\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"payloadIpfs\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct ISteerPeriphery.CVDGParams\",\n \"name\": \"cvdgParams\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"createVaultAndDepositGas\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newVault\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"strategyCreator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"execBundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasPerAction\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"params\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"payloadIpfs\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct ISteerPeriphery.CVSParams\",\n \"name\": \"cvsParams\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"createVaultAndStrategy\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"newVault\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"strategyCreator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"execBundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasPerAction\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"jobInitParams\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"payloadIpfs\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"userProvidedData\",\n \"type\": \"bytes[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"targetAddresses\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"jobName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"ipfsForJobDetails\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct ISteerPeriphery.CVSRJParams\",\n \"name\": \"cvsrjParams\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"createVaultStrategyAndRegisterJob\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"newVault\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vaultAddress\",\n \"type\": \"address\"\n },\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 \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vaultAddress\",\n \"type\": \"address\"\n },\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\": \"uint256\",\n \"name\": \"poolId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"depositAndStake\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_strategyRegistry\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_vaultRegistry\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_gasVault\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_stakingRewards\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_nodeConfig\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"nodeConfig\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_nodeConfig\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setNodeConfig\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"creator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"strategiesByCreator\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"execBundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasPerAction\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IStrategyRegistry.RegisteredStrategy[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"vaultBalancesByAddressWithFees\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToken0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToken1\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IMultiPositionManager.VaultBalance\",\n \"name\": \"balances\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"vaultDetailsByAddress\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"string\",\n \"name\": \"vaultType\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"decimals\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token0Name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token1Name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token0Symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"token1Symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token0Decimals\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token1Decimals\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeTier\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalLPTokensIssued\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token0Balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"token1Balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultCreator\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IMultiPositionManager.VaultDetails\",\n \"name\": \"details\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"strategyId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"vaultsByStrategy\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"enum IVaultRegistry.VaultState\",\n \"name\": \"state\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"vaultID\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"payloadIpfs\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct IVaultRegistry.VaultData[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialLogic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialAdmin\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n }\n ],\n \"StrategyRegistry\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"approved\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"approved\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"ApprovalForAll\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconUpgraded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StrategyCreated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"GOVERNANCE_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PAUSER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"_tokenIdTracker\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"baseURI\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"strategyCreator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"strategyName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"execBundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasPerAction\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"createStrategy\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"newStrategyTokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getApproved\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getRegisteredStrategy\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"execBundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasPerAction\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IStrategyRegistry.RegisteredStrategy\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"hashedEmptyString\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"registry\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isApprovedForAll\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxMaxGasPerAction\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ownerOf\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"safeTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"safeTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"approved\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"setApprovalForAll\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"_maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"_maxGasPerAction\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"setGasParameters\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_maxMaxGasPerAction\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setMaxMaxGasPerAction\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"strategies\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"id\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"execBundle\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasCost\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxGasPerAction\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenByIndex\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenIdToExecBundle\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenOfOwnerByIndex\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenURI\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialLogic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialAdmin\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n }\n ],\n \"VaultRegistry\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"selectorLength\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"isImplementedLength\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"IncorrectArrayLengths\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"_ipfsHash\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconConfigUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconDeregistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"_address\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"_ipfsHash\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconRegistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconUpgraded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"FeeSettingFailed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"deployer\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"vaultManager\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"VaultCreated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum VaultRegistry.VaultState\",\n \"name\": \"newState\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"VaultStateChanged\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"beaconAddresses\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"beaconTypes\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"_params\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_beaconName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_vaultManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_payloadIpfs\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"createVault\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_address\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_ipfsConfigForBeacon\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"deployAndRegisterBeacon\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"deregisterBeacon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"doISupportInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"feeManager\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_vault\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getStrategyCreatorForVault\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_vaultId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getVaultByStrategyAndIndex\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"enum VaultRegistry.VaultState\",\n \"name\": \"state\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"vaultID\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"payloadIpfs\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct VaultRegistry.VaultData\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getVaultCountByStrategyId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_address\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getVaultDetails\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"enum VaultRegistry.VaultState\",\n \"name\": \"state\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"vaultID\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"payloadIpfs\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"vaultAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct VaultRegistry.VaultData\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_orchestrator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_strategyRegistry\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_whitelistRegistry\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bytes4\",\n \"name\": \"\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"interfaceImplementations\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"linkedVaults\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"orchestrator\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_address\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_ipfsConfigForBeacon\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerBeacon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_feeManager\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setFeeManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_vaultHelper\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setVaultHelper\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"strategyRegistry\",\n \"outputs\": [\n {\n \"internalType\": \"contract IStrategyRegistry\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalVaultCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_newIPFSConfigForBeacon\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"updateBeaconConfig\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"beaconName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bytes4[]\",\n \"name\": \"selectors\",\n \"type\": \"bytes4[]\"\n },\n {\n \"internalType\": \"bool[]\",\n \"name\": \"isImplemented\",\n \"type\": \"bool[]\"\n }\n ],\n \"name\": \"updateInterfaceImplementations\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_vault\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"enum VaultRegistry.VaultState\",\n \"name\": \"_newState\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"updateVaultState\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"vaultHelper\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"whitelistRegistry\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialLogic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialAdmin\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n }\n ],\n \"Helper\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"currentTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_twapInterval\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"_maxTickChange\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"pool\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"algebraVolatilityCheck\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"lowerTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"upperTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"relativeWeight\",\n \"type\": \"uint16\"\n }\n ],\n \"internalType\": \"struct IHelper.NewLiquidityPositions[]\",\n \"name\": \"positions\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\"\n }\n ],\n \"name\": \"getAlgebraVaultBalances\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_totalSupply\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n },\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\": \"uint256\",\n \"name\": \"minShares\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getShares\",\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\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"lowerTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"upperTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"relativeWeight\",\n \"type\": \"uint16\"\n }\n ],\n \"internalType\": \"struct IHelper.NewLiquidityPositions[]\",\n \"name\": \"positions\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeManager\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getUniswapVaultBalances\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"currentTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_twapInterval\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"_maxTickChange\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"pool\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"poolsharkCheckVolatility\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"currentTick\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_twapInterval\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"_maxTickChange\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"pool\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"uniVolatilityCheck\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"QuickSwapUniv3MultiPositionLiquidityManager\": [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"shares\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0Earned\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1Earned\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"FeesEarned\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"totalAmount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"totalAmount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"totalSupply\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Snapshot\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"shares\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"STEER_FRACTION_OF_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOTAL_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedSteerFees0\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedSteerFees1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedStrategistFees0\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accruedStrategistFees1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\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 \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"emergencyBurn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPositions\",\n \"outputs\": [\n {\n \"internalType\": \"int24[]\",\n \"name\": \"\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"int24[]\",\n \"name\": \"\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"uint16[]\",\n \"name\": \"\",\n \"type\": \"uint16[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getRoleMember\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleMemberCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getTotalAmounts\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_vaultManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_steer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_params\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxTickChange\",\n \"outputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"\",\n \"type\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"poke\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pool\",\n \"outputs\": [\n {\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"steerCollectFees\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"strategistCollectFees\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalWeight\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"int24[]\",\n \"name\": \"lowerTick\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"int24[]\",\n \"name\": \"upperTick\",\n \"type\": \"int24[]\"\n },\n {\n \"internalType\": \"uint16[]\",\n \"name\": \"relativeWeight\",\n \"type\": \"uint16[]\"\n }\n ],\n \"internalType\": \"struct QuickSwapUniv3MultiPositionLiquidityManager.LiquidityPositions\",\n \"name\": \"newPositions\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"timeSensitiveData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"tend\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token0\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token1\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"twapInterval\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"uniswapV3MintCallback\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Wanted\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"amount1Wanted\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"uniswapV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"shares\",\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\": \"withdraw\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ]\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const apechainAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3\", startBlock: 643298 },\n \"CamelotMultiPositionLiquidityManager\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 643002 },\n \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 643030 },\n \"SteerPeriphery\": { address: \"0xd5532a58E4ABB6485FF4e7BCf5bED278e32A516e\", startBlock: 643272 },\n \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 642937 },\n \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 642981 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 642883 },\n \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 642917 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const arbitrumAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 88699181 },\n \"CamelotMultiPositionLiquidityManager\": { address: \"0xa2C286BD8E5d2cBA08674ACD202b37d9F922026f\", startBlock: 151369116 },\n \"GasVault\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 88699087 },\n \"SteerPeriphery\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 88699141 },\n \"StrategyRegistry\": { address: \"0xd964811233b8A0185D3C93664df82136C80d1bb2\", startBlock: 88698868 },\n \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 88698956 },\n \"KeeperRegistry\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 88698828 },\n \"Orchestrator\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 88698903 },\n \"Helper\": {\n address: \"0xd1b49Bb21d2c2638CFDdf4B2dC8dbC61DCBCe0ee\",\n startBlock: 367658396 \n\n },\n \"SingleAssetDeposit\": {\n address: \"0x122126e397677cfd6476c531416b7cbec74c06c8\",\n startBlock: 367649306 \n }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const arbitrumgoerliAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xdA97EfAa1576FA251D18dcdddFC51A1dE218189f\", startBlock: 18807200 },\n \"GasVault\": { address: \"0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b\", startBlock: 18807160 },\n \"SteerPeriphery\": { address: \"0x5248661e4fd7c59C87222806506E905752978800\", startBlock: 18807185 },\n \"StrategyRegistry\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 18804021 },\n \"VaultRegistry\": { address: \"0xAd406Cd438f8b28695B9dac2BB18B92B92f01BbF\", startBlock: 18805793 },\n \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 18804003 },\n \"Orchestrator\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 18804037 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const astarAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x7Daa68204232a78dBF1Dd853a4018330EE934A39\", startBlock: 5466115 },\n \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 5465971 },\n \"SteerPeriphery\": { address: \"0x1afD31627170607657224eD4aE701470209C4B2e\", startBlock: 5466109 },\n \"StrategyRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 5465955 },\n \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 5465965 },\n \"KeeperRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 5465944 },\n \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 5465950 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const astarzkevmAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xD40699A642172DeD33BCFe4E3F84D54610C757Cd\", startBlock: 215291 },\n \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 215237 },\n \"SteerPeriphery\": { address: \"0x37Cff062D52Dd6E9E39Df619CCd30c037a36bB83\", startBlock: 215281 },\n \"StrategyRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 210939 },\n \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 210954 },\n \"KeeperRegistry\": { address: \"0x99eca0E5Db125900E3a0389F6D3503837e99F59b\", startBlock: 210922 },\n \"Orchestrator\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 210932 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const avalancheAddresses: Record<string, Contract> = {\n KeeperRegistry: {\n address: '0x925C4454820b2b88c2f70F2621E6890b451266Dd',\n startBlock: 30433379,\n },\n Orchestrator: {\n address: '0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77',\n startBlock: 30433780,\n },\n StrategyRegistry: {\n address: '0x09eb271b444d1db7163c8555919dE85b20Be7D1d',\n startBlock: 30433735,\n },\n VaultRegistry: {\n address: '0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc',\n startBlock: 30434642,\n },\n BundleRegistry: {\n address: '0x87A37bEEcE2918A342F95773Bea7cAA6823c6DC3',\n startBlock: 30435305,\n },\n DynamicJobs: {\n address: '0x7c464A0AB1f5ebf3E2dCccfec7EF41D02ED7a2f4',\n startBlock: 30435322,\n },\n GasVault: {\n address: '0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4',\n startBlock: 30434925,\n },\n WhitelistRegistry: {\n address: '0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9',\n startBlock: 30434591,\n },\n SteerPeriphery: {\n address: '0x5D8249e3F5f702e1Fd720167b40424fc2daDCd1e',\n startBlock: 30435289,\n },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const bartiotestAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xbAa0E7Ac5e57E0d5614762D45D7df574Ed36efB8\", startBlock: 5094358 },\n \"GasVault\": { address: \"0x2870B7F2469FBABa16aAabc3d642216685C94E1f\", startBlock: 5094269 },\n \"SteerPeriphery\": { address: \"0xb503E92D4e60b3E4F3c4D1F5037BaBde07994D4C\", startBlock: 5094352 },\n \"StrategyRegistry\": { address: \"0x2c9305e4Db122017a751Df245620E36008d30BC8\", startBlock: 5094238 },\n \"VaultRegistry\": { address: \"0xa07bE822021cf648632Ab026978541ACa0C785B2\", startBlock: 5094258 },\n \"KeeperRegistry\": { address: \"0xba318B1141ffD56a0B7C17b4f0A8D258016e79D5\", startBlock: 5094220 },\n \"Orchestrator\": { address: \"0x6d5d2BFc6269e6694FD4578Db74Bc2eA1e082FE1\", startBlock: 5094230 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const baseAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 2092242 },\n \"GasVault\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 2092217 },\n \"SteerPeriphery\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 2092232 },\n \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 2092162 },\n \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 2092181 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 2092152 },\n \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 2092171 },\n \"Helper\": {\n address: \"0xa98376572375692455172f6750C67339667974fe\",\n startBlock: 17910406\n },\n \"SingleAssetDeposit\": {\n address: \"0x71be4708c86b8afd6aa47929ce073e400b5b7747\",\n startBlock: 34107126 \n }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const blastAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 417476 },\n \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 417398 },\n \"SteerPeriphery\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 417462 },\n \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 411072 },\n \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 417373 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 411010 },\n \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 411025 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const bscAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x36C796BcA1E8E4031D3FdFA1ff0FA5EF429e0ED2\", startBlock: 28461525 },\n \"GasVault\": { address: \"0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce\", startBlock: 28461501 },\n \"SteerPeriphery\": { address: \"0xe240B9a2936f6Fb8860219bC059349e50F03492e\", startBlock: 28461517 },\n \"StrategyRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 28461392 },\n \"VaultRegistry\": { address: \"0x31e4ee367d4f2685BAfcAb9566e9C87E60D48983\", startBlock: 28461459 },\n \"KeeperRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 28461329 },\n \"Orchestrator\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 28461434 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const celoAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 19813153 },\n \"GasVault\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 19813141 },\n \"SteerPeriphery\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 19813148 },\n \"StrategyRegistry\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 19813118 },\n \"VaultRegistry\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 19813127 },\n \"KeeperRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 19813113 },\n \"Orchestrator\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 19813123 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const evmosAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x7Daa68204232a78dBF1Dd853a4018330EE934A39\", startBlock: 13671980 },\n \"GasVault\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 13671912 },\n \"SteerPeriphery\": { address: \"0x1afD31627170607657224eD4aE701470209C4B2e\", startBlock: 13671971 },\n \"StrategyRegistry\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 13671887 },\n \"VaultRegistry\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 13671900 },\n \"KeeperRegistry\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 13671871 },\n \"Orchestrator\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 13671882 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const fantomAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xCF9b0A9D456d6325Bc3B508aB67365D697fe0590\", startBlock: 76157142 },\n \"GasVault\": { address: \"0x7760D5cb6366dD1dEad394012186202B1834cDE5\", startBlock: 76157028 },\n \"SteerPeriphery\": { address: \"0xcb77e4C30D92c8b959811E99213625C7b9490b96\", startBlock: 76157080 },\n \"StrategyRegistry\": { address: \"0xEfecC1cEb7325C269fdb6337208E096f73f76CeD\", startBlock: 76156961 },\n \"VaultRegistry\": { address: \"0x4DE18F1582Aa71671828F329B826ad45B2798b12\", startBlock: 76156993 },\n \"KeeperRegistry\": { address: \"0x4Cb98E1eeef513086B6a724f6B5401031b125649\", startBlock: 76156897 },\n \"Orchestrator\": { address: \"0xc38507394FAdcf1a421BC4103FD66151089FbcfE\", startBlock: 76156977 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const filecoinAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 4333421 },\n \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 4333398 },\n \"SteerPeriphery\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 4333415 },\n \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 4333366 },\n \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 4333381 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 4333359 },\n \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 4333373 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const flareAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x9fCFb37f7ED723dE280F5E1D3617aB7d06caaa0A\", startBlock: 26092328 },\n \"GasVault\": { address: \"0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3\", startBlock: 26092127 },\n \"SteerPeriphery\": { address: \"0x7Daa68204232a78dBF1Dd853a4018330EE934A39\", startBlock: 26092312 },\n \"StrategyRegistry\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 26092027 },\n \"VaultRegistry\": { address: \"0x64F9A121Ccbb8956249Ed52C4f63d0f759da53Ce\", startBlock: 26092102 },\n \"KeeperRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 26092014 },\n \"Orchestrator\": { address: \"0xe240B9a2936f6Fb8860219bC059349e50F03492e\", startBlock: 26092087 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const goerliAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x908fA92f4eFA88d7CE2E4DE86127Ca7868978FbE\", startBlock: 8829474 },\n \"GasVault\": { address: \"0xfE838bF793202E7d479a34bF28C2CA939194895F\", startBlock: 8829435 },\n \"SteerPeriphery\": { address: \"0x4023AB29dd224Bf5eD71fe5e2Be92637d0176c4C\", startBlock: 8829448 },\n \"StrategyRegistry\": { address: \"0xD9BbcE593e47AebF12f3Eb2c4Ca6EA03E13e7E77\", startBlock: 8829280 },\n \"VaultRegistry\": { address: \"0x93a76EAb5bE3c25Cd9f0B53e68173d811D8728dE\", startBlock: 8829407 },\n \"KeeperRegistry\": { address: \"0x8b313438E027bC6d5FA45D09603B6290d97bc62d\", startBlock: 8829267 },\n \"Orchestrator\": { address: \"0x03d300515dF6f5b4e1C4F2772F3fC3089B023d96\", startBlock: 8829376 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const kavaAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xfb4F2358F8677e1309868aBce4c447A55eAfb326\", startBlock: 5915652 },\n \"GasVault\": { address: \"0x7c31a819a36E29939058b61fDAEA28bC3CFb66B8\", startBlock: 5915251 },\n \"SteerPeriphery\": { address: \"0xf90107890B640387ec3b0474F0c61674AEbCb510\", startBlock: 5915571 },\n \"StrategyRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 5915194 },\n \"VaultRegistry\": { address: \"0xe240B9a2936f6Fb8860219bC059349e50F03492e\", startBlock: 5915232 },\n \"KeeperRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 5915167 },\n \"Orchestrator\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 5915211 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const lineaAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xE431A1dE6F37cD08AAA8821F83bD2157857E8172\", startBlock: 656320 },\n \"GasVault\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 656313 },\n \"SteerPeriphery\": { address: \"0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce\", startBlock: 656317 },\n \"StrategyRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 656297 },\n \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 656303 },\n \"KeeperRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 656294 },\n \"Orchestrator\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 656300 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\nexport const localhostAddresses = {\n \"BundleRegistry\": \"0x63B2bF39E0D7bbF5DBE49dD356CA8BA19B175794\",\n \"GasVault\": \"0xaD0AB54da38B9f7b7b9fAD14404a8e05Aaa7679f\",\n \"SteerPeriphery\": \"0xC09c86CA28e4252D01aaC3F2dbFDa21A93a034fb\",\n \"StrategyRegistry\": \"0xb86e6ED9FDd7eFD408462092cA7C270D44Ce62F1\",\n \"VaultRegistry\": \"0x80df25e3a384BeAA65D48E6d40b0304589510536\"\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const ethAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x38E6291bADD1680054A3fB67f449F8848444Dfa4\", startBlock: 21701103 },\n \"GasVault\": { address: \"0xa3137A5F54f803BDf0c0209a11EE41446f0C2AfA\", startBlock: 21701090 },\n \"SteerPeriphery\": { address: \"0xCEBF1A54A9Ce703FC80967760b5A6cbDb4111099\", startBlock: 21701098 },\n \"StrategyRegistry\": { address: \"0xBb9C7123432B3871b2edF3Cc026c22684F999189\", startBlock: 21701068 },\n \"VaultRegistry\": { address: \"0x5ef68cc787Cd560ab8b723a2499e9a79c639C647\", startBlock: 21701081 },\n \"KeeperRegistry\": { address: \"0x86fd6C835FEeA48e1f344d0312D9b081441ced69\", startBlock: 21701065 },\n \"Orchestrator\": { address: \"0x4867dc4e325C3fF0F676A6316d69180f15bcd463\", startBlock: 21701073 },\n \"SingleAssetDeposit\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 23239469 },\n \"Helper\": {\n address: \"0x18F89CD017f58837721C05ff0aD309ACf7B4087C\",\n startBlock: 21701078\n \n },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const mantaAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 407259 },\n \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 407252 },\n \"SteerPeriphery\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 407256 },\n \"StrategyRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 407239 },\n \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 407246 },\n \"KeeperRegistry\": { address: \"0xf71Bb63b641031150220f84Fa0326F851ecb3d30\", startBlock: 407236 },\n \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 407243 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const mantleAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x7c31a819a36E29939058b61fDAEA28bC3CFb66B8\", startBlock: 48569983 },\n \"GasVault\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 48569748 },\n \"SteerPeriphery\": { address: \"0x36C796BcA1E8E4031D3FdFA1ff0FA5EF429e0ED2\", startBlock: 48569965 },\n \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 48569697 },\n \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 48569734 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 48569643 },\n \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 48569676 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const metisAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xB27a61fAf33d2F6ad7Af8CC2512C3b58901F779B\", startBlock: 6067804 },\n \"GasVault\": { address: \"0x31e4ee367d4f2685BAfcAb9566e9C87E60D48983\", startBlock: 6067770 },\n \"SteerPeriphery\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 6067794 },\n \"StrategyRegistry\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 6067712 },\n \"VaultRegistry\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 6067741 },\n \"KeeperRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 6067702 },\n \"Orchestrator\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 6067725 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const modeAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 5307828 },\n \"GasVault\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 5307798 },\n \"SteerPeriphery\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 5307816 },\n \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 5307749 },\n \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 5307774 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 5307737 },\n \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 5307762 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const moonbeamAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xbfd2E0C4cF82d91ec13731e7bc14Ac6120cd01F5\", startBlock: 8677441 },\n \"GasVault\": { address: \"0x00D0Cc8Db826dA3F68B0F645acC7785F917aAff8\", startBlock: 8677412 },\n \"SteerPeriphery\": { address: \"0xa4a2f232C92f2DE7181E9fe4d46297FbBb4afaaA\", startBlock: 8677428 },\n \"StrategyRegistry\": { address: \"0x4Cb98E1eeef513086B6a724f6B5401031b125649\", startBlock: 8677373 },\n \"VaultRegistry\": { address: \"0xE11709193e7b2E0a0F2a4591022cFf4f01E75050\", startBlock: 8677394 },\n \"KeeperRegistry\": { address: \"0xa3fd4B3BD38aB8BBF3f26BB17aA410222B9965Bc\", startBlock: 8677361 },\n \"Orchestrator\": { address: \"0xEfecC1cEb7325C269fdb6337208E096f73f76CeD\", startBlock: 8677382 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const mumbaiAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xdA97EfAa1576FA251D18dcdddFC51A1dE218189f\", startBlock: 35213026 },\n \"GasVault\": { address: \"0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b\", startBlock: 35213005 },\n \"SteerPeriphery\": { address: \"0x5248661e4fd7c59C87222806506E905752978800\", startBlock: 35213018 },\n \"StrategyRegistry\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 35212955 },\n \"VaultRegistry\": { address: \"0xAd406Cd438f8b28695B9dac2BB18B92B92f01BbF\", startBlock: 35212977 },\n \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 35212946 },\n \"Orchestrator\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 35212964 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const okxtestnetAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x2cDAD0Cfa7D5cFc1e54E9f4b9dAcBcFd51b7c466\", startBlock: 10562524 },\n \"GasVault\": { address: \"0x93470e5d4aFFab0CE2E80D47be420C42F0EB9692\", startBlock: 10562507 },\n \"SteerPeriphery\": { address: \"0x22Ee5c43031F045f792cCd81c8fEcf70e51B1011\", startBlock: 10562516 },\n \"StrategyRegistry\": { address: \"0x1673a527836C577c8807480C89CE6de529ab0017\", startBlock: 10562093 },\n \"VaultRegistry\": { address: \"0xEfE1A4a97181d37d9Fd2aacb306E9a2dB956Ccdd\", startBlock: 10562483 },\n \"KeeperRegistry\": { address: \"0x125116e39Ec5CECfE29F3d139050cd036Ea2ce19\", startBlock: 10562075 },\n \"Orchestrator\": { address: \"0xD259853e5d3DB0844f1E70fB876AEdEfBb021148\", startBlock: 10562445 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const optimismAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x64F9A121Ccbb8956249Ed52C4f63d0f759da53Ce\", startBlock: 97061023 },\n \"GasVault\": { address: \"0x5D8249e3F5f702e1Fd720167b40424fc2daDCd1e\", startBlock: 97060844 },\n \"SteerPeriphery\": { address: \"0x7c464A0AB1f5ebf3E2dCccfec7EF41D02ED7a2f4\", startBlock: 97060953 },\n \"StrategyRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 96971404 },\n \"VaultRegistry\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 96971465 },\n \"KeeperRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 96971378 },\n \"Orchestrator\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 96971425 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const optimismgoerliAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xdA97EfAa1576FA251D18dcdddFC51A1dE218189f\", startBlock: 8886190 },\n \"GasVault\": { address: \"0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b\", startBlock: 8886163 },\n \"SteerPeriphery\": { address: \"0x5248661e4fd7c59C87222806506E905752978800\", startBlock: 8886179 },\n \"StrategyRegistry\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 8885948 },\n \"VaultRegistry\": { address: \"0xAd406Cd438f8b28695B9dac2BB18B92B92f01BbF\", startBlock: 8886127 },\n \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 8885936 },\n \"Orchestrator\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 8886113 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const polygonAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x3cEa6c4d74d84aF61d9Dc4AA59a69bBf9fE0A5e1\", startBlock: 41535643 },\n \"GasVault\": { address: \"0xAEF566edD7f25D50b584e4227F62cB5A2e2eBae7\", startBlock: 41535585 },\n \"SteerPeriphery\": { address: \"0x29E1888F7DD0757f2873E494463Ec389dab38D27\", startBlock: 41535635 },\n \"StrategyRegistry\": { address: \"0x0f88432be83a7AA4608CC6C0dE555bE74c10F5c3\", startBlock: 41535505 },\n \"VaultRegistry\": { address: \"0x24825B3C44742600D3995d1D3760cceE999A7f0b\", startBlock: 41535540 },\n \"KeeperRegistry\": { address: \"0x40402363fD11729183108b10DC96776675229ae7\", startBlock: 41535492 },\n \"Orchestrator\": { address: \"0x76C9557c63ECFB3a3215A9e7fDA9245b672f521a\", startBlock: 41535523 },\n \"Helper\": {\n address: \"0x526e12c87dc9d48623D28e24d997EF81EcA22133\",\n startBlock: 74667935\n },\n \"SingleAssetDeposit\": {\n address: \"0x7c0222afd475e707b48c6dae27cd2a16d2643218\",\n startBlock: 75114382\n \n }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const polyzkevmAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 1022506 },\n \"GasVault\": { address: \"0x254d37F5eD7E96fc2d242CB06B17FAe1EE9E1ADA\", startBlock: 1022454 },\n \"SteerPeriphery\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 1022486 },\n \"StrategyRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 1022115 },\n \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 1022413 },\n \"KeeperRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 1022098 },\n \"Orchestrator\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 1022377 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const rootstockAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xD40699A642172DeD33BCFe4E3F84D54610C757Cd\", startBlock: 6413199 },\n \"GasVault\": { address: \"0x5D8249e3F5f702e1Fd720167b40424fc2daDCd1e\", startBlock: 6413185 },\n \"SteerPeriphery\": { address: \"0x37Cff062D52Dd6E9E39Df619CCd30c037a36bB83\", startBlock: 6413193 },\n \"StrategyRegistry\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 6413160 },\n \"VaultRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 6413173 },\n \"KeeperRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 6413154 },\n \"Orchestrator\": { address: \"0x254d37F5eD7E96fc2d242CB06B17FAe1EE9E1ADA\", startBlock: 6413166 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const scrollAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 287617 },\n \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 287579 },\n \"SteerPeriphery\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 287609 },\n \"StrategyRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 287545 },\n \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 287562 },\n \"KeeperRegistry\": { address: \"0xf71Bb63b641031150220f84Fa0326F851ecb3d30\", startBlock: 287537 },\n \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 287553 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const seiAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x391cf3047db983caB8dD95B16c4e6C3918d72d23\", startBlock: 119979618 },\n \"GasVault\": { address: \"0x4Cb98E1eeef513086B6a724f6B5401031b125649\", startBlock: 119979437 },\n \"SteerPeriphery\": { address: \"0xfF42cD42d8a5812CB38fb3C0720Dfc490912f48B\", startBlock: 119979598 },\n \"StrategyRegistry\": { address: \"0xB1B736e7189ea99634f33EC199a1753E6CC7171C\", startBlock: 119979272 },\n \"VaultRegistry\": { address: \"0xa3fd4B3BD38aB8BBF3f26BB17aA410222B9965Bc\", startBlock: 119979309 },\n \"KeeperRegistry\": { address: \"0x9fCFb37f7ED723dE280F5E1D3617aB7d06caaa0A\", startBlock: 119979224 },\n \"Orchestrator\": { address: \"0xb944789b5C962f1096Ce8674456E68fb0F2e3BB7\", startBlock: 119979256 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const sonicAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x42D1316c1ce4E0f143C12771004AFb91a03CaF6d\", startBlock: 474917 },\n \"GasVault\": { address: \"0x9A9E78387c21d88138481dA872E1DbaEF71078B2\", startBlock: 474894 },\n \"SteerPeriphery\": { address: \"0xb95572432c935f62E25376280724FDbAD9F8F755\", startBlock: 474909 },\n \"StrategyRegistry\": { address: \"0x169133E32C4A68Ad0F922c567Db816951000f0AA\", startBlock: 474861 },\n \"VaultRegistry\": { address: \"0x253B89EfA5a23B1b0305416973F21F6a11CEfab0\", startBlock: 474881 },\n \"KeeperRegistry\": { address: \"0x9d72AAc456B5Adf6a557d68EF30862a0755CcCDf\", startBlock: 474855 },\n \"Orchestrator\": { address: \"0x8cB05d7b3B525070f489167DbB9C0f174e1FB137\", startBlock: 474869 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const taikoAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xAa4448AeF5f5967693751BFB67197946BB6D1dC0\", startBlock: 35165 },\n \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 34588 },\n \"SteerPeriphery\": { address: \"0xD40699A642172DeD33BCFe4E3F84D54610C757Cd\", startBlock: 35160 },\n \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 34577 },\n \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 34583 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 34571 },\n \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 34575 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const telosAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 337121451 },\n \"GasVault\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 337121367 },\n \"SteerPeriphery\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 337121426 },\n \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 337121273 },\n \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 337121319 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 337121247 },\n \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 337121296 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const thundercoreAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 135181905 },\n \"GasVault\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 135181876 },\n \"SteerPeriphery\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 135181890 },\n \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 135181826 },\n \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 135181847 },\n \"KeeperRegistry\": { address: \"0x99eca0E5Db125900E3a0389F6D3503837e99F59b\", startBlock: 135181811 },\n \"Orchestrator\": { address: \"0xd964811233b8A0185D3C93664df82136C80d1bb2\", startBlock: 135181840 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const xlayerAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 653519 },\n \"GasVault\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 653502 },\n \"SteerPeriphery\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 653511 },\n \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 653475 },\n \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 653490 },\n \"KeeperRegistry\": { address: \"0x99eca0E5Db125900E3a0389F6D3503837e99F59b\", startBlock: 653467 },\n \"Orchestrator\": { address: \"0xd964811233b8A0185D3C93664df82136C80d1bb2\", startBlock: 653482 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const zircuitAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 5524154 },\n \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 5522254 },\n \"SteerPeriphery\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 5524033 },\n \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 5522181 },\n \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 5522213 },\n \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 5522168 },\n \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 5522196 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const hemiAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xc9De841A2A00DeaAF9F0E5374Fd5011C952e5f5C\", startBlock: 1390479 },\n \"GasVault\": { address: \"0xAa4448AeF5f5967693751BFB67197946BB6D1dC0\", startBlock: 1390468 },\n \"SteerPeriphery\": { address: \"0xd47CE509bE01e62cd4629E2f1eb22BA04e7dA192\", startBlock: 1390475 },\n \"StrategyRegistry\": { address: \"0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce\", startBlock: 1390398 },\n \"VaultRegistry\": { address: \"0x37Cff062D52Dd6E9E39Df619CCd30c037a36bB83\", startBlock: 1390406 },\n \"KeeperRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 1390389 },\n \"Orchestrator\": { address: \"0xE431A1dE6F37cD08AAA8821F83bD2157857E8172\", startBlock: 1390401 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const soneiumAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x15471a7555B9d7dbe8fd577FDE381E8Fb7E7702d\", startBlock: 2154765 },\n \"GasVault\": { address: \"0x3144706Fd5EF06c8fC1B80494902D0fC0Da8497B\", startBlock: 2154739 },\n \"SteerPeriphery\": { address: \"0x1e5Fd638E8BF242Ae2a5bdd9ABBfd2681D25aDDC\", startBlock: 2154753 },\n \"StrategyRegistry\": { address: \"0xb95572432c935f62E25376280724FDbAD9F8F755\", startBlock: 2154691 },\n \"VaultRegistry\": { address: \"0x371A7af1c64396186DfE0d3D0BdBAf43a0Fd8a09\", startBlock: 2154716 },\n \"KeeperRegistry\": { address: \"0x2Ca933639900b88346EdB1D1dDF58A752314D566\", startBlock: 2154680 },\n \"Orchestrator\": { address: \"0x42D1316c1ce4E0f143C12771004AFb91a03CaF6d\", startBlock: 2154701 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const uniAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x7bb362141BB277C7609519e9fBA4927A5e2e5cC7\", startBlock: 8620614 },\n \"GasVault\": { address: \"0xBcD427Ff26b70E73149858C4898DFa60107bedBe\", startBlock: 8620543 },\n \"SteerPeriphery\": { address: \"0x01ffCeBd15e2EfFD96ba1c3014c9260ecB575823\", startBlock: 8620593 },\n \"StrategyRegistry\": { address: \"0xfF42cD42d8a5812CB38fb3C0720Dfc490912f48B\", startBlock: 8620443 },\n \"VaultRegistry\": { address: \"0x6d5A04974ba2CdC3E307135fE5886b8c7C499e9A\", startBlock: 8620494 },\n \"KeeperRegistry\": { address: \"0xbfd2E0C4cF82d91ec13731e7bc14Ac6120cd01F5\", startBlock: 8620421 },\n \"Orchestrator\": { address: \"0x391cf3047db983caB8dD95B16c4e6C3918d72d23\", startBlock: 8620465 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const zetaAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x51aC65B177F084455750131A81706C32b466101D\", startBlock: 6576836 },\n \"GasVault\": { address: \"0x8b82CaF0CDcbbf53F9b071c643609EFE02307536\", startBlock: 6576804 },\n \"SteerPeriphery\": { address: \"0x42D1316c1ce4E0f143C12771004AFb91a03CaF6d\", startBlock: 6576833 },\n \"StrategyRegistry\": { address: \"0x918b3E95eE1329D9549E32874db0BF161D516457\", startBlock: 6576795 },\n \"VaultRegistry\": { address: \"0x49c40936D8430dCBf5787bb6F0F3B26578cc3c12\", startBlock: 6576801 },\n \"KeeperRegistry\": { address: \"0x7bb362141BB277C7609519e9fBA4927A5e2e5cC7\", startBlock: 6576790 },\n \"Orchestrator\": { address: \"0x82013a220c21caFEa99381738EDFbC52a6956f90\", startBlock: 6576793 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const beraAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x6d5A04974ba2CdC3E307135fE5886b8c7C499e9A\", startBlock: 785307 },\n \"GasVault\": { address: \"0xcfffEc77F478959ef5D6B1AE9f4d9b35D12921E1\", startBlock: 785218 },\n \"SteerPeriphery\": { address: \"0x71bE4708C86B8AFd6Aa47929Ce073e400B5B7747\", startBlock: 785298 },\n \"StrategyRegistry\": { address: \"0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a\", startBlock: 785194 },\n \"VaultRegistry\": { address: \"0x1578228D5c62e2705AEe5BA1DeBd6D9a68830189\", startBlock: 785208 },\n \"KeeperRegistry\": { address: \"0xDAeed7DA964B212963Ce207660633758fc6ECfec\", startBlock: 785177 },\n \"Orchestrator\": { address: \"0xB1B736e7189ea99634f33EC199a1753E6CC7171C\", startBlock: 785187 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const katanaAddresses: Record<string, Contract> = {\n KeeperRegistry: {\n address: '0xe6C78a5Bb134F00a3111f34b5ee863c82041292F',\n startBlock: 2202723,\n },\n Orchestrator: {\n address: '0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a',\n startBlock: 2202743,\n },\n StrategyRegistry: {\n address: '0x27C6b12cC14a498E0E252BD7F3E7Af060eBAB048',\n startBlock: 2202735,\n },\n VaultRegistry: {\n address: '0x1D04A1f5FD79e09B7692baDeE2846Fd0F90dCF24',\n startBlock: 2202756,\n },\n BundleRegistry: {\n address: '0x491bf4ACa9a475E107Cfa4BcDd836648B72C34e5',\n startBlock: 2202801,\n },\n GasVault: {\n address: '0x2CCADD513EBBdc51b135879cb7BC1693CB476ED6',\n startBlock: 2202776,\n },\n WhitelistRegistry: {\n address: '0xBCF95873ed5397Bc0B2e0A35b06C0dd9Ac84C8B8',\n startBlock: 2202746,\n },\n SteerPeriphery: {\n address: '0x4DE18F1582Aa71671828F329B826ad45B2798b12',\n startBlock: 2202791,\n },\n StakingRewards: { address: '0x5BBDCB03183f5afE2C9DA5a30E2Cdac1CCd151E1', startBlock: 2202749 },\n Helper: { address: '0x64833f91Df7E9b5b1f35510a7FEbd213201AA06e', startBlock: 2202749 },\n FeeManager: { address: '0x7760D5cb6366dD1dEad394012186202B1834cDE5', startBlock: 2202811 },\n \"SingleAssetDeposit\": {\n address: \"0x01ffCeBd15e2EfFD96ba1c3014c9260ecB575823\",\n startBlock: 8260827 \n }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const sagaAddresses: Record<string, Contract> = {\n KeeperRegistry: {\n address: '0xdED9B1e5b1d419106d8C982a0D3fE1bbCB983d87',\n startBlock: 3008348,\n },\n Orchestrator: {\n address: '0x7Daa68204232a78dBF1Dd853a4018330EE934A39',\n startBlock: 3008357,\n },\n StrategyRegistry: {\n address: '0x1afD31627170607657224eD4aE701470209C4B2e',\n startBlock: 3008353,\n },\n VaultRegistry: {\n address: '0xe6C78a5Bb134F00a3111f34b5ee863c82041292F',\n startBlock: 3008375,\n },\n BundleRegistry: {\n address: '0xEfecC1cEb7325C269fdb6337208E096f73f76CeD',\n startBlock: 3008395,\n },\n GasVault: {\n address: '0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a',\n startBlock: 3008383,\n },\n WhitelistRegistry: {\n address: '0xc9De841A2A00DeaAF9F0E5374Fd5011C952e5f5C',\n startBlock: 3008358,\n },\n SteerPeriphery: {\n address: '0x4Cb98E1eeef513086B6a724f6B5401031b125649',\n startBlock: 3008391,\n },\n Helper: {\n address: \"0xB3d8529332450CFc942F480fDc9Ac5c17805c24b\",\n startBlock: 3106793\n },\n SingleAssetDeposit: {\n address: \"0xa1330e9017aB685dc34B746005f4DAB0476b16b4\",\n startBlock: 4003688\n }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const berachainbartioAddresses: Record<string, Contract> = {\n \"Orchestrator_Proxy\": { address: \"0x6d5d2BFc6269e6694FD4578Db74Bc2eA1e082FE1\", startBlock: 5094230 },\n \"StakingRewards_Proxy\": { address: \"0xc97B1df5fBB12339D1493d171E10a30Af60164c0\", startBlock: 5094345 },\n \"KeeperRegistry_Proxy\": { address: \"0xba318B1141ffD56a0B7C17b4f0A8D258016e79D5\", startBlock: 5094220 },\n \"VaultRegistry_Proxy\": { address: \"0xa07bE822021cf648632Ab026978541ACa0C785B2\", startBlock: 5094258 },\n \"GasVault\": { address: \"0x2870B7F2469FBABa16aAabc3d642216685C94E1f\", startBlock: 5094269 },\n \"SteerPeriphery\": { address: \"0xb503E92D4e60b3E4F3c4D1F5037BaBde07994D4C\", startBlock: 5094352 },\n \"WhitelistRegistry\": { address: \"0xdAD90649Ee38d6eE64e73231888Cc546978Ef20A\", startBlock: 5094244 },\n \"KeeperRegistry\": { address: \"0xba318B1141ffD56a0B7C17b4f0A8D258016e79D5\", startBlock: 5094220 },\n \"BundleRegistry\": { address: \"0xbAa0E7Ac5e57E0d5614762D45D7df574Ed36efB8\", startBlock: 5094358 },\n \"StakingRewards_Implementation\": { address: \"0xa017BDE31e344b18E6474D083581C73B1FA0481e\", startBlock: 5094344 },\n \"KeeperRegistry_Implementation\": { address: \"0xcD5248462534F637302461342AEE5fF806CB3A30\", startBlock: 5094216 },\n \"StrategyRegistry_Implementation\": { address: \"0x9B6D9a22628c4672f6d40DF99594a8fB4029599E\", startBlock: 5094233 },\n \"DefaultProxyAdmin\": { address: \"0xaBd55d8720Bc18ec4CDF79681763D879d3C99039\", startBlock: 5094210 },\n \"StrategyRegistry_Proxy\": { address: \"0x2c9305e4Db122017a751Df245620E36008d30BC8\", startBlock: 5094238 },\n \"StrategyRegistry\": { address: \"0x2c9305e4Db122017a751Df245620E36008d30BC8\", startBlock: 5094238 },\n \"SteerPeriphery_Implementation\": { address: \"0x1c2Ba63289fe76c98A5919A78839b429cf177C00\", startBlock: 5094350 },\n \"KodiakMultiPositionLiquidityManager\": { address: \"0xE34e9384d04190a3673249E60C75A2D3C30E3F9c\", startBlock: 5094209 },\n \"SteerPeriphery_Proxy\": { address: \"0xb503E92D4e60b3E4F3c4D1F5037BaBde07994D4C\", startBlock: 5094352 },\n \"StakingRewards\": { address: \"0xc97B1df5fBB12339D1493d171E10a30Af60164c0\", startBlock: 5094345 },\n \"Orchestrator_Implementation\": { address: \"0x5891EA0B417bea4316a2D55D63fA7e583476F554\", startBlock: 5094225 },\n \"Helper\": { address: \"0x7e816Dfd0d141aF36E0bC920b90d748C781334E9\", startBlock: 5094249 },\n \"FeeManager_Proxy\": { address: \"0x16351b41F131664fF717cA18fe82302abbfCbD7d\", startBlock: 5094363 },\n \"FeeManager_Implementation\": { address: \"0x512A8641197fE9222DD9558E586612EE3F2B4ea3\", startBlock: 5094360 },\n \"VaultRegistry\": { address: \"0xa07bE822021cf648632Ab026978541ACa0C785B2\", startBlock: 5094258 },\n \"BundleRegistry_Implementation\": { address: \"0xA545DdAC80a1DcCc1156A9d7bBa93BB0A8563Bc3\", startBlock: 5094355 },\n \"VaultRegistry_Implementation\": { address: \"0x95fda2FEE2595D0C0C8a82871df6EA48F188aFe0\", startBlock: 5094254 },\n \"Orchestrator\": { address: \"0x6d5d2BFc6269e6694FD4578Db74Bc2eA1e082FE1\", startBlock: 5094230 },\n \"BundleRegistry_Proxy\": { address: \"0xbAa0E7Ac5e57E0d5614762D45D7df574Ed36efB8\", startBlock: 5094358 },\n \"FeeManager\": { address: \"0x16351b41F131664fF717cA18fe82302abbfCbD7d\", startBlock: 5094363 },\n \"GasVault_Implementation\": { address: \"0x4Be69FCff456216B98467A564f5f9B4BFb1792Fe\", startBlock: 5094266 },\n \"GasVault_Proxy\": { address: \"0x2870B7F2469FBABa16aAabc3d642216685C94E1f\", startBlock: 5094269 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const coreAddresses: Record<string, Contract> = {\n BundleRegistry: { address: '0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3', startBlock: 23460135 },\n GasVault: { address: '0xC1Ecd10398A6D7036CceE1f50551ff169715081c', startBlock: 23460078 },\n SteerPeriphery: { address: '0xd5532a58E4ABB6485FF4e7BCf5bED278e32A516e', startBlock: 23460128 },\n StrategyRegistry: { address: '0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2', startBlock: 23460063 },\n VaultRegistry: { address: '0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9', startBlock: 23460073 },\n KeeperRegistry: { address: '0xf71Bb63b641031150220f84Fa0326F851ecb3d30', startBlock: 23460052 },\n Orchestrator: { address: '0x925C4454820b2b88c2f70F2621E6890b451266Dd', startBlock: 23460059 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const tataratestnetAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xaA98e8f03F528B73157E30a17de3EC40dB7382fE\", startBlock: 1115328 },\n \"GasVault\": { address: \"0x795BF9303441ef0b1134220d9142A49d8212260C\", startBlock: 1115180 },\n \"SteerPeriphery\": { address: \"0x2DBca2283f74cB663d1E0E7A85dFf46938B24c87\", startBlock: 1115320 },\n \"StrategyRegistry\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 1115072 },\n \"VaultRegistry\": { address: \"0x22Ee5c43031F045f792cCd81c8fEcf70e51B1011\", startBlock: 1115087 },\n \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 1115057 },\n \"Orchestrator\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 1115064 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n }\n \n export const zklinknovaAddresses: Record<string, Contract> = {\n \"GasVault\": { address: \"0x57174e55abFaa7d858F8a4C395967FFaF990190A\", startBlock: 34588 },\n \"SteerPeriphery\": { address: \"0x525b443C8d2D0aA8Bd70d22177EC6250286b9708\", startBlock: 35160 },\n \"WhitelistRegistry\": { address: \"0x5cC4EA2EbC2F0fF5783A6b21653d23849a6a000f\", startBlock: 34579 },\n \"KeeperRegistry\": { address: \"0x340C336E0e549e020DedD966F667c7B77D37C513\", startBlock: 34571 },\n \"BundleRegistry\": { address: \"0x0c38a501079bD12CE350431246311c21231f1242\", startBlock: 35165 },\n \"StrategyRegistry\": { address: \"0xd58a20afa275D400e4f74c3e822Eb06BDBbee259\", startBlock: 34577 },\n \"StakingRewards\": { address: \"0x92984a7df4Dc7Cb963eAb076738E2D1Be6453d77\", startBlock: 35157 },\n \"Helper\": { address: \"0xd401d054fAA7A304d0412982A63d9aC39eb5b3b4\", startBlock: 34580 },\n \"VaultRegistry\": { address: \"0xFB3b5b859B08Dc86fDA0aF9332E5Ca4cF6689d66\", startBlock: 34583 },\n \"Orchestrator\": { address: \"0xa5cF70F6e4e236De8c778Bc89741c617816f73aF\", startBlock: 34575 },\n \"FeeManager\": { address: \"0x7581aC01c19B57408Dd1Bd2ed2cea899BeFEE7dA\", startBlock: 34594 },\n } as const;\n ","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n }\n \n export const peaqAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 5383056 },\n \"GasVault\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 5383001 },\n \"SteerPeriphery\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 5383047 },\n \"StrategyRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 5382980 },\n \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 5382992 },\n \"KeeperRegistry\": { address: \"0xf71Bb63b641031150220f84Fa0326F851ecb3d30\", startBlock: 5382976 },\n \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 5382986 },\n \"Helper\": {\n address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\",\n startBlock: 5382988\n },\n \"SingleAssetDeposit\": {\n address: \"0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a\",\n startBlock: 6429095\n }\n } as const;\n ","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n }\n \n export const roninAddresses: Record<string, Contract> = {\n \"BundleRegistry\": { address: \"0x82013a220c21caFEa99381738EDFbC52a6956f90\", startBlock: 45874579 },\n \"GasVault\": { address: \"0xcb77e4C30D92c8b959811E99213625C7b9490b96\", startBlock: 45874479 },\n \"SteerPeriphery\": { address: \"0x7bb362141BB277C7609519e9fBA4927A5e2e5cC7\", startBlock: 45874567 },\n \"StrategyRegistry\": { address: \"0x491bf4ACa9a475E107Cfa4BcDd836648B72C34e5\", startBlock: 45874447 },\n \"VaultRegistry\": { address: \"0xac4D51669B80D09d8Cc5EeFF50026c4d1D3290e6\", startBlock: 45874467 },\n \"KeeperRegistry\": { address: \"0xE11709193e7b2E0a0F2a4591022cFf4f01E75050\", startBlock: 45874428 },\n \"Orchestrator\": { address: \"0x9427EA2b2262CC5f2F1876F85eFF4e48Fe33A8b2\", startBlock: 45874439 },\n } as const;\n ","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const nibiruAddresses: Record<string, Contract> = {\n KeeperRegistry: {\n address: '0x1D04A1f5FD79e09B7692baDeE2846Fd0F90dCF24',\n startBlock: 25374486,\n },\n Orchestrator: {\n address: '0x2CCADD513EBBdc51b135879cb7BC1693CB476ED6',\n startBlock: 25374513,\n },\n StrategyRegistry: {\n address: '0x5BBDCB03183f5afE2C9DA5a30E2Cdac1CCd151E1',\n startBlock: 25374497,\n },\n VaultRegistry: {\n address: '0x3Add6C19e86C22B2fe5AD9c328C0C3Db88382534',\n startBlock: 25374534,\n },\n BundleRegistry: {\n address: '0xCF9b0A9D456d6325Bc3B508aB67365D697fe0590',\n startBlock: 25374594,\n },\n GasVault: {\n address: '0xa98376572375692455172f6750C67339667974fe',\n startBlock: 25374560,\n },\n WhitelistRegistry: {\n address: '0x215431CF4699f8bb01F339E09E9603F2975b2997',\n startBlock: 25374516,\n },\n SteerPeriphery: {\n address: '0xcb77e4C30D92c8b959811E99213625C7b9490b96',\n startBlock: 25374582,\n },\n \"SingleAssetDeposit\": {\n address: \"0x4e48fced3b4cd92bbfba0314ed844046a91c4fd5\",\n startBlock: 32069570\n },\n \"Helper\": {\n address: \"0xc38507394FAdcf1a421BC4103FD66151089FbcfE\",\n startBlock: 25374521\n },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n address: string;\n startBlock?: number;\n}\n\nexport const hyperevmAddresses: Record<string, Contract> = {\n KeeperRegistry: {\n address: '0x5920168d62238e28e147BEdC0f5eDF02eB6b66f1',\n startBlock: 14721941,\n },\n Orchestrator: {\n address: '0xb031c61cE15fC62de2Bea264A2d7ac467e5B1e53',\n startBlock: 14722124,\n },\n StrategyRegistry: {\n address: '0x324e36ad36D204831a7E1eFD1FF882384499F4C0',\n startBlock: 14722368,\n },\n VaultRegistry: {\n address: '0x210770DEDbB70d269969ac9415241ca4A7b30341',\n startBlock: 14723039,\n },\n BundleRegistry: {\n address: '0x221b9F402d33dB2F48725782644fB2dd3090e08f',\n startBlock: 14724137,\n },\n GasVault: {\n address: '0xB8a1C40cE7e0ea1121D016913E32a73004819e24',\n startBlock: 14723222,\n },\n WhitelistRegistry: {\n address: '0xfEcB56d58B7f70A0EB2E3822fE7C4Eb959095F63',\n startBlock: 14722490,\n },\n SteerPeriphery: {\n address: '0x40CA241eE876caF5BFa9c0724069f082473a6fFC',\n startBlock: 14723954,\n },\n\n StakingRewards: { address: '0xbE0De6ea74EC22840e4cf91a85aA3F139787ac9e', startBlock: 14723771 },\n Helper: { address: '0xc98D361ef423fef0174643b42b6f3B018111Ae6a', startBlock: 14722795 },\n FeeManager: { address: '0x8BfAdC53bfd06F051685b42690076d9c94aaBCBd', startBlock: 14724320 },\n SingleAssetDeposit: {\n address: '0x776bddf9b0513f4e2f4622c55c32d5b56fb54927',\n startBlock: 20161135,\n },\n} as const;\n","// This file is generated from @steerprotocol/contracts deployment JSON.\n// It is intentionally scoped to FeeManager addresses only.\nexport interface FeeManagerDeployment {\n address: string;\n startBlock?: number;\n}\n\nexport const feeManagerContractsByChainId: Record<number, FeeManagerDeployment> = {\n 14: { address: '0xb944789b5C962f1096Ce8674456E68fb0F2e3BB7' },\n 30: { address: '0xAa4448AeF5f5967693751BFB67197946BB6D1dC0' },\n 40: { address: '0xE431A1dE6F37cD08AAA8821F83bD2157857E8172' },\n 146: { address: '0x51aC65B177F084455750131A81706C32b466101D' },\n 199: { address: '0xdca3251Ebe8f85458E8d95813bCb816460e4bef1' },\n 314: { address: '0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce' },\n 1284: { address: '0xfF42cD42d8a5812CB38fb3C0720Dfc490912f48B' },\n 1301: { address: '0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b' },\n 1329: { address: '0x9790aFEc5d23a840bC0597D9F54584057254d190' },\n 8453: { address: '0xac4D51669B80D09d8Cc5EeFF50026c4d1D3290e6' },\n 33139: { address: '0xd47CE509bE01e62cd4629E2f1eb22BA04e7dA192' },\n 34443: { address: '0x7Daa68204232a78dBF1Dd853a4018330EE934A39' },\n 43114: { address: '0x391cf3047db983caB8dD95B16c4e6C3918d72d23' },\n 48900: { address: '0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce' },\n 59144: { address: '0xBcD427Ff26b70E73149858C4898DFa60107bedBe' },\n 80084: { address: '0x0D3Ea88C8C3cb26EF21ab9E9ac6D178602Ef2779' },\n 81457: { address: '0x7Daa68204232a78dBF1Dd853a4018330EE934A39' },\n 167000: { address: '0x254d37F5eD7E96fc2d242CB06B17FAe1EE9E1ADA' },\n 534352: { address: '0xa4a2f232C92f2DE7181E9fe4d46297FbBb4afaaA' },\n};\n","import { Chain, ChainId } from \"./chain.js\";\nimport { apechainAddresses, astarAddresses, astarzkevmAddresses, avalancheAddresses, baseAddresses, beraAddresses, blastAddresses, bscAddresses, celoAddresses, ethAddresses, evmosAddresses, fantomAddresses, filecoinAddresses, flareAddresses, hemiAddresses, katanaAddresses, kavaAddresses, lineaAddresses, mantaAddresses, mantleAddresses, metisAddresses, modeAddresses, moonbeamAddresses, okxtestnetAddresses, polyzkevmAddresses, rootstockAddresses, sagaAddresses, scrollAddresses, seiAddresses, soneiumAddresses, sonicAddresses, taikoAddresses, telosAddresses, thundercoreAddresses, uniAddresses, xlayerAddresses, zetaAddresses, zircuitAddresses } from \"./deployments/index.js\";\nimport { arbitrumAddresses } from \"./deployments/arbitrum.js\";\nimport { berachainbartioAddresses } from \"./deployments/berachainbartio.js\";\nimport { coreAddresses } from \"./deployments/core.js\";\nimport { optimismAddresses } from \"./deployments/optimism.js\";\nimport { polygonAddresses } from \"./deployments/polygon.js\";\nimport { tataratestnetAddresses } from \"./deployments/tataratestnet.js\";\nimport { zklinknovaAddresses } from \"./deployments/zklinknova.js\";\nimport { peaqAddresses } from \"./deployments/peaq.js\";\nimport { roninAddresses } from \"./deployments/ronin.js\";\nimport { nibiruAddresses } from \"./deployments/nibiru.js\";\nimport { hyperevmAddresses } from \"./deployments/hyperevm.js\";\nimport { feeManagerContractsByChainId } from './feeManagerContracts.js';\n\n/**\n * Interface representing a smart contract with its address and optional start block\n */\nexport interface Contract {\n /** The contract's deployed address */\n address: string;\n /** The block number where the contract was deployed */\n startBlock?: number;\n}\n\n/**\n * Interface defining the structure of contract addresses for a protocol\n */\nexport interface ContractAddresses {\n /** Keeper Registry contract */\n KeeperRegistry: Contract;\n /** Orchestrator contract */\n Orchestrator: Contract;\n /** Strategy Registry contract */\n StrategyRegistry: Contract;\n /** Vault Registry contract */\n VaultRegistry: Contract;\n /** Bundle Registry contract */\n BundleRegistry: Contract;\n /** Steer Periphery contract */\n SteerPeriphery: Contract;\n /** Gas Vault contract */\n GasVault: Contract;\n /** Optional Runner Registry contract */\n RunnerRegistry?: Contract;\n /** Optional Pool Helper contract */\n PoolHelper?: Contract;\n /** Optional Whitelist Registry contract */\n WhitelistRegistry?: Contract;\n /** Optional Dynamic Jobs contract */\n DynamicJobs?: Contract;\n /** Optional Steer Token contract */\n SteerToken?: Contract;\n /** Optional Static Jobs contract */\n StaticJobs?: Contract;\n\n Helper?:Contract\n\n SingleAssetDeposit?:Contract\n FeeManager?: Contract\n}\n\n/**\n * Interface extending ContractAddresses with network-specific configuration\n */\nexport interface NetworkConfig extends ContractAddresses {\n /** Chain ID of the network */\n chainId: number;\n /** Transaction type used on the network (0 = legacy, 1 = EIP-2930, 2 = EIP-1559) */\n transactionType: number;\n /** Address of the network's native token wrapper contract */\n address: string;\n /** Optional chain name */\n name: Chain;\n /** Whether token wrapping is enabled on this network */\n isWrappingEnabled?: boolean;\n /** Symbol of the wrapped native token */\n wrappedNativeToken?: string;\n}\n\n/**\n * Type representing the contract name keys from ContractAddresses\n */\nexport type ContractName = keyof ContractAddresses;\n\n/**\n * Interface mapping Chain enum values to their NetworkConfig\n */\nexport interface Networks extends Record<Chain, NetworkConfig> {}\n\nexport const networks: Networks = {\n \n [Chain.Polygon]: {\n address: \"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270\",\n name: Chain.Polygon,\n isWrappingEnabled: true,\n wrappedNativeToken: \"WMATIC\",\n chainId: ChainId.Polygon,\n ...(polygonAddresses as unknown as ContractAddresses),\n PoolHelper: {\n address: \"0xa7da6196B871A53f6aEC27F9EA4BBC39C1390EF4\",\n startBlock: 59943299,\n },\n transactionType: 2,\n },\n [Chain.Optimism]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Optimism,\n ...(optimismAddresses as unknown as ContractAddresses),\n chainId: ChainId.Optimism,\n wrappedNativeToken: \"WETH\",\n transactionType: 0,\n },\n [Chain.Arbitrum]: {\n address: \"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\n name: Chain.Arbitrum,\n isWrappingEnabled: true,\n wrappedNativeToken: \"WETH\",\n ...(arbitrumAddresses as unknown as ContractAddresses),\n chainId: ChainId.Arbitrum,\n transactionType: 2,\n PoolHelper: {\n address: \"0x657bB5fD00e6D6BdA438988DcaF5B62Ef16F6163\",\n startBlock: 256472779,\n },\n },\n [Chain.BSC]: {\n address: \"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\",\n name: Chain.BSC,\n wrappedNativeToken: \"WBNB\",\n ...(bscAddresses as unknown as ContractAddresses),\n chainId: ChainId.BSC,\n transactionType: 2,\n },\n [Chain.Evmos]: {\n address: \"0xD4949664cD82660AaE99bEdc034a0deA8A0bd517\",\n name: Chain.Evmos,\n wrappedNativeToken: \"WEVMOS\",\n ...(evmosAddresses as unknown as ContractAddresses),\n chainId: ChainId.Evmos,\n transactionType: 0,\n },\n [Chain.Metis]: {\n address: \"0x75cb093e4d61d2a2e65d8e0bbb01de8d89b53481\",\n name: Chain.Metis,\n wrappedNativeToken: \"METIS\",\n isWrappingEnabled: true,\n ...(metisAddresses as unknown as ContractAddresses),\n chainId: ChainId.Metis,\n transactionType: 0,\n },\n [Chain.Avalanche]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Avalanche,\n wrappedNativeToken: \"WETH\",\n ...(avalancheAddresses as unknown as ContractAddresses),\n chainId: ChainId.Avalanche,\n transactionType: 0,\n },\n \n [Chain.PolygonzkEVM]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.PolygonzkEVM,\n wrappedNativeToken: \"WMATIC\",\n ...(polyzkevmAddresses as unknown as ContractAddresses),\n chainId: ChainId.PolygonzkEVM,\n transactionType: 0,\n },\n [Chain.Celo]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Celo,\n wrappedNativeToken: \"CELO\",\n ...(celoAddresses as unknown as ContractAddresses),\n chainId: ChainId.Celo,\n transactionType: 0,\n },\n [Chain.Base]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Base,\n wrappedNativeToken: \"WETH\",\n isWrappingEnabled: true,\n ...(baseAddresses as unknown as ContractAddresses),\n chainId: ChainId.Base,\n transactionType: 0,\n PoolHelper: {\n address: \"0x603823Ad53c1C7D402c5A20CD1B05488Dafc2646\",\n startBlock: 20147258,\n },\n ...(baseAddresses as unknown as ContractAddresses),\n },\n\n [Chain.Kava]: {\n address: \"0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b\",\n name: Chain.Kava,\n wrappedNativeToken: \"WKAVA\",\n ...(kavaAddresses as unknown as ContractAddresses),\n chainId: ChainId.Kava,\n PoolHelper: {\n address: \"0x4B76fE1D77faD404e4AFD7Fa9797cDCC84Aa2469\",\n startBlock: 12934741,\n },\n ...(kavaAddresses as unknown as ContractAddresses),\n transactionType: 0,\n },\n [Chain.Linea]: {\n address: \"0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f\",\n name: Chain.Linea,\n wrappedNativeToken: \"WETH\",\n ...(lineaAddresses as unknown as ContractAddresses),\n chainId: ChainId.Linea,\n transactionType: 0,\n },\n [Chain.Scroll]: {\n address: \"0x5300000000000000000000000000000000000004\",\n name: Chain.Scroll,\n wrappedNativeToken: \"WETH\",\n ...(scrollAddresses as unknown as ContractAddresses),\n chainId: ChainId.Scroll,\n transactionType: 0,\n },\n [Chain.Manta]: {\n address: \"0x0dc808adce2099a9f62aa87d9670745aba741746\",\n name: Chain.Manta,\n wrappedNativeToken: \"WETH\",\n ...(mantaAddresses as unknown as ContractAddresses),\n chainId: ChainId.Manta,\n transactionType: 0,\n },\n [Chain.Astar]: {\n address: \"0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720\",\n name: Chain.Astar,\n wrappedNativeToken: \"WASTAR\",\n ...(astarAddresses as unknown as ContractAddresses),\n chainId: ChainId.Astar,\n transactionType: 0,\n },\n [Chain.Mantle]: {\n address: \"0xCD88431107B72b1a1aa13DE27Ab894e27C7D1a61\",\n name: Chain.Mantle,\n wrappedNativeToken: \"MNT\",\n ...(mantleAddresses as unknown as ContractAddresses),\n chainId: ChainId.Mantle,\n transactionType: 0,\n },\n [Chain.Fantom]: {\n wrappedNativeToken: \"WFTM\",\n address: \"0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83\",\n name: Chain.Fantom,\n ...(fantomAddresses as unknown as ContractAddresses),\n chainId: ChainId.Fantom,\n transactionType: 0,\n },\n [Chain.AstarZkevm]: {\n wrappedNativeToken: \"WETH\",\n address: \"0xE9CC37904875B459Fa5D0FE37680d36F1ED55e38\",\n name: Chain.AstarZkevm,\n ...(astarzkevmAddresses as unknown as ContractAddresses),\n chainId: ChainId.AstarZkevm,\n transactionType: 0,\n },\n [Chain.Blast]: {\n wrappedNativeToken: \"WETH\",\n address: \"0x4300000000000000000000000000000000000004\",\n name: Chain.Blast,\n ...(blastAddresses as unknown as ContractAddresses),\n chainId: ChainId.Blast,\n transactionType: 0,\n },\n [Chain.Mode]: {\n wrappedNativeToken: \"WETH\",\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Mode,\n PoolHelper: {\n address: \"0xA9d55eb3fBEE553db12cB25C8cF8ADbdB6d74541\",\n startBlock: 13458174,\n },\n ...(modeAddresses as unknown as ContractAddresses),\n chainId: ChainId.Mode,\n transactionType: 0,\n },\n [Chain.XLayer]: {\n wrappedNativeToken: \"OKB\",\n address: \"0x5A77f1443D16ee5761d310e38b62f77f726bC71c\",\n name: Chain.XLayer,\n ...(xlayerAddresses as unknown as ContractAddresses),\n chainId: ChainId.XLayer,\n transactionType: 0,\n },\n [Chain.Telos]: {\n wrappedNativeToken: \"TELOS\",\n address: \"0xA0fB8cd450c8Fd3a11901876cD5f17eB47C6bc50\",\n name: Chain.Telos,\n ...(telosAddresses as unknown as ContractAddresses),\n chainId: ChainId.Telos,\n transactionType: 0,\n },\n [Chain.Taiko]: {\n wrappedNativeToken: \"ETH\",\n address: \"0xA0fB8cd450c8Fd3a11901876cD5f17eB47C6bc50\",\n name: Chain.Taiko,\n ...(taikoAddresses as unknown as ContractAddresses),\n chainId: ChainId.Taiko,\n transactionType: 0,\n },\n [Chain.Rootstock]: {\n wrappedNativeToken: \"RBTC\",\n address: \"0x542fda317318ebf1d3deaf76e0b632741a7e677d\",\n name: Chain.Rootstock,\n ...(rootstockAddresses as unknown as ContractAddresses),\n chainId: ChainId.Rootstock,\n transactionType: 0,\n },\n [Chain.Moonbeam]: {\n wrappedNativeToken: \"WGLMR\",\n address: \"0x7507c1dc16935B82698e4C63f2746A2fCf994dF8\",\n name: Chain.Moonbeam,\n PoolHelper: {\n address: \"0xDA6BA21f39d33e922ecC43d41E7068988dc36C6A\",\n startBlock: 9389000,\n },\n ...(moonbeamAddresses as unknown as ContractAddresses),\n chainId: ChainId.Moonbeam,\n transactionType: 0,\n },\n [Chain.Thundercore]: {\n wrappedNativeToken: \"WETH\",\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Thundercore,\n ...(thundercoreAddresses as unknown as ContractAddresses),\n chainId: ChainId.Thundercore,\n transactionType: 0,\n \n },\n [Chain.OkxTestnet]: {\n wrappedNativeToken: \"WETH\",\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.OkxTestnet,\n ...(okxtestnetAddresses as unknown as ContractAddresses),\n chainId: ChainId.OkxTestnet,\n transactionType: 0,\n },\n [Chain.ZklinkNova]: {\n wrappedNativeToken: \"ETH\",\n address: \"0x8280a4e7D5B3B658ec4580d3Bc30f5e50454F169\",\n name: Chain.ZklinkNova,\n ...(zklinknovaAddresses as unknown as ContractAddresses),\n chainId: ChainId.ZklinkNova,\n transactionType: 0,\n },\n [Chain.Flare]: {\n wrappedNativeToken: \"FLR\",\n // https://flarescan.com/address/0x1d80c49bbbcd1c0911346656b529df9e5c2f783d\n address: \"0x1d80c49bbbcd1c0911346656b529df9e5c2f783d\",\n name: Chain.Flare,\n isWrappingEnabled: true,\n chainId: ChainId.Flare,\n transactionType: 0,\n ...(flareAddresses as unknown as ContractAddresses),\n },\n [Chain.BeraChainBartio]: {\n wrappedNativeToken: \"BERA\",\n address: \"0x7507c1dc16935B82698e4C63f2746A2fCf994dF8\",\n name: Chain.BeraChainBartio,\n chainId: ChainId.BeraChainBartio,\n transactionType: 0,\n ...(berachainbartioAddresses as unknown as ContractAddresses),\n },\n [Chain.Filecoin]: {\n wrappedNativeToken: \"WFIL\",\n address: \"0x60e1773636cf5e4a227d9ac24f20feca034ee25a\",\n name: Chain.Filecoin,\n isWrappingEnabled: true,\n chainId: ChainId.Filecoin,\n transactionType: 0,\n ...(filecoinAddresses as unknown as ContractAddresses),\n },\n [Chain.Apechain]: {\n wrappedNativeToken: \"APE\",\n address: \"0x48b62137edfa95a428d35c09e44256a739f6b557\",\n // https://apescan.io/address/0x48b62137edfa95a428d35c09e44256a739f6b557\n name: Chain.Apechain,\n isWrappingEnabled: true,\n chainId: ChainId.Apechain,\n transactionType: 0,\n ...(apechainAddresses as unknown as ContractAddresses),\n },\n [Chain.Zircuit]: {\n chainId: 48900,\n wrappedNativeToken: \"ETH\",\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Zircuit,\n isWrappingEnabled: true,\n transactionType: 0,\n ...(zircuitAddresses as unknown as ContractAddresses),\n },\n [Chain.Sei]: {\n wrappedNativeToken: \"WSEI\",\n // https://seitrace.com/address/0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7?chain=pacific-1\n address: \"0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7\",\n name: Chain.Sei,\n isWrappingEnabled: true,\n chainId: ChainId.Sei,\n transactionType: 0,\n ...(seiAddresses as unknown as ContractAddresses),\n },\n [Chain.Sonic]: {\n wrappedNativeToken: \"WS\",\n address: \"0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38\",\n name: Chain.Sonic,\n isWrappingEnabled: true,\n chainId: ChainId.Sonic,\n transactionType: 0,\n ...(sonicAddresses as unknown as ContractAddresses),\n },\n [Chain.Zeta]: {\n wrappedNativeToken: \"WZETA\",\n isWrappingEnabled: true,\n name: Chain.Zeta,\n // https://zetachain.blockscout.com/address/0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf\n address: \"0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf\",\n chainId: ChainId.Zeta,\n transactionType: 0,\n ...(zetaAddresses as unknown as ContractAddresses),\n },\n [Chain.Soneium]: {\n wrappedNativeToken: \"ETH\",\n address: \"0x7507c1dc16935B82698e4C63f2746A2fCf994dF8\",\n chainId: ChainId.Soneium,\n transactionType: 0,\n ...(soneiumAddresses as unknown as ContractAddresses),\n name: Chain.Soneium,\n },\n [Chain.Mainnet]: {\n chainId: ChainId.Mainnet,\n transactionType: 0,\n ...(ethAddresses as unknown as ContractAddresses),\n \n address: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n name: Chain.Mainnet,\n },\n [Chain.Bera]: {\n chainId: ChainId.Bera,\n wrappedNativeToken: \"WBERA\",\n address: \"0x6969696969696969696969696969696969696969\",\n name: Chain.Bera,\n isWrappingEnabled: true,\n transactionType: 0,\n ...(beraAddresses as unknown as ContractAddresses),\n },\n [Chain.Unichain]: {\n chainId: ChainId.Unichain,\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Unichain,\n wrappedNativeToken: \"WETH\",\n isWrappingEnabled: true,\n transactionType: 0,\n ...(uniAddresses as unknown as ContractAddresses),\n \n },\n [Chain.TataraTestnet]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.TataraTestnet,\n wrappedNativeToken: \"WETH\",\n isWrappingEnabled: true,\n chainId: ChainId.TataraTestnet,\n transactionType: 0,\n ...(tataratestnetAddresses as unknown as ContractAddresses),\n },\n [Chain.Hemi]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Hemi,\n wrappedNativeToken: \"WETH\",\n isWrappingEnabled: true,\n ...(hemiAddresses as unknown as ContractAddresses),\n chainId: ChainId.Hemi,\n transactionType: 0,\n },\n [Chain.Core]: {\n address: \"0x191E94fa59739e188dcE837F7f6978d84727AD01\",\n name: Chain.Core,\n wrappedNativeToken: \"Core\",\n isWrappingEnabled: true,\n chainId: ChainId.Core,\n transactionType: 0,\n ...(coreAddresses as unknown as ContractAddresses),\n },\n [Chain.Peaq]: {\n address: \"0x3cd66d2e1fac1751b0a20bebf6ca4c9699bb12d7\",\n name: Chain.Peaq,\n wrappedNativeToken: \"WPEAQ\",\n isWrappingEnabled: false,\n chainId: ChainId.Peaq,\n transactionType: 0,\n ...(peaqAddresses as unknown as ContractAddresses),\n },\n [Chain.Katana]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Katana,\n wrappedNativeToken: \"WETH\",\n isWrappingEnabled: true,\n chainId: ChainId.Katana,\n transactionType: 0,\n ...(katanaAddresses as unknown as ContractAddresses),\n },\n [Chain.Ronin]: {\n address: \"0xe514d9deb7966c8be0ca922de8a064264ea6bcd4\",\n name: Chain.Ronin,\n wrappedNativeToken: \"WRON\",\n isWrappingEnabled: true,\n chainId: ChainId.Ronin,\n transactionType: 0,\n ...(roninAddresses as unknown as ContractAddresses),\n },\n [Chain.Saga]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Saga,\n wrappedNativeToken: \"WGAS\",\n isWrappingEnabled: false,\n chainId: ChainId.Saga,\n transactionType: 0,\n ...(sagaAddresses as unknown as ContractAddresses),\n },\n [Chain.Nibiru]: {\n address: \"0x4200000000000000000000000000000000000006\",\n name: Chain.Nibiru,\n wrappedNativeToken: \"NIBI\",\n isWrappingEnabled: false,\n chainId: ChainId.Nibiru,\n transactionType: 0,\n ...(nibiruAddresses as unknown as ContractAddresses),\n },\n [Chain.Hyperevm]: {\n address: \"0x5555555555555555555555555555555555555555\",\n name: Chain.Hyperevm,\n wrappedNativeToken: \"WHYPE\",\n isWrappingEnabled: false,\n chainId: ChainId.Hyperevm,\n transactionType: 0,\n ...(hyperevmAddresses as unknown as ContractAddresses),\n }\n};\n\nfor (const network of Object.values(networks) as NetworkConfig[]) {\n const feeManagerDeployment = feeManagerContractsByChainId[network.chainId];\n if (feeManagerDeployment) {\n network.FeeManager = feeManagerDeployment;\n }\n}\n\n\n/**\n * Retrieves a contract address for a specific chain ID and contract name.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @param contractName - The name of the contract to look up\n * @returns The contract address if found, undefined otherwise\n * @example\n * ```typescript\n * const address = getContractAddressByChainIdAndContractName(1, 'KeeperRegistry');\n * ```\n */\nexport function getContractAddressByChainIdAndContractName(\n chainId: number,\n contractName: ContractName\n): string | undefined {\n const network = Object.values(networks).find(\n (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n );\n if (network && contractName in network) {\n const contract = network[contractName];\n return contract?.address;\n }\n return undefined;\n}\n\n\nexport function getNetworkByChainId(chainId: number): NetworkConfig | undefined {\n return Object.values(networks).find(\n (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n );\n}\n\n\n/**\n * Retrieves the Pool Helper contract information for a specific chain ID.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @returns The Pool Helper contract information if found, undefined otherwise\n * @example\n * ```typescript\n * const poolHelper = getPoolHelperByChainId(1);\n * ```\n */\nexport function getPoolHelperByChainId(chainId: number): Contract | undefined {\n const contractName = \"PoolHelper\" as const;\n const network = Object.values(networks).find(\n (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n );\n if (network && contractName in network) {\n return network[contractName];\n }\n return undefined;\n}\n\n/**\n * Converts a chain ID to its corresponding chain name.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @returns The chain name if found, undefined otherwise\n * @example\n * ```typescript\n * const chainName = chainIdToName(137); // Returns \"Polygon\"\n * const chainName = chainIdToName(1); // Returns \"Mainnet\"\n * ```\n */\nexport function chainIdToName(chainId: number): Chain | undefined {\n const network = Object.values(networks).find(\n (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n );\n return network?.name;\n}\n\n/**\n * Converts a chain name to its corresponding chain ID.\n * \n * @param chainName - The chain name to look up\n * @returns The chain ID if found, undefined otherwise\n * @example\n * ```typescript\n * const chainId = chainNameToId(Chain.Polygon); // Returns 137\n * const chainId = chainNameToId(Chain.Mainnet); // Returns 1\n * ```\n */\nexport function chainNameToId(chainName: Chain): number | undefined {\n const network = networks[chainName];\n return network?.chainId;\n}\n\n\nexport function isSingleAssetDepositSupported(chainId: number) {\n const supportedChains = [ChainId.Polygon, ChainId.Hyperevm, ChainId.Peaq, ChainId.Arbitrum, ChainId.Katana, ChainId.Base, ChainId.Saga, ChainId.Mainnet, ChainId.Nibiru];\n\n return supportedChains.indexOf(chainId) > -1;\n}\n","import type { Address } from 'viem';\nimport { SwapWithSlippageResponse } from './simulateSwap.js';\nimport { Protocol } from '../../../const/index.js';\n\n/**\n * AMM Types supported by single-asset deposits\n */\nexport enum AMMType {\n UniswapV3 = 0,\n Algebra = 1,\n AlgebraDirectional = 2,\n AlgebraVE33 = 3,\n AlgebraIntegral = 4,\n Aerodrome = 5\n \n}\n\n/**\n * Parameters for single-asset deposit\n */\nexport interface SingleAssetDepositParams {\n /** Amount of input token provided by the user */\n assets: bigint;\n /** Address to receive LP tokens */\n receiver: Address;\n /** Address of the vault to deposit into */\n vault: Address;\n /** true if input token is token0, false if token1 */\n isToken0: boolean;\n /** Maximum allowed slippage during deposit (in %) */\n depositSlippagePercent: bigint;\n /** Slippage tolerance for internal swap (in basis points) */\n swapSlippageBP: number;\n /** Type of AMM */\n ammType: AMMType;\n /** Address of the single-asset deposit contract */\n singleAssetDepositContract?: Address;\n}\n\n/**\n * Parameters for calculating swap amount\n */\nexport interface CalculateSwapAmountParams {\n /** Amount of tokens being deposited */\n depositAmount: bigint;\n /** true if depositing token0, false if token1 */\n isToken0: boolean;\n /** Address of the vault */\n vault: Address;\n /** Address of the pool */\n pool: Address;\n /** Type of AMM */\n ammType: AMMType;\n /** Address of the single-asset deposit contract */\n singleAssetDepositContract: Address;\n}\n\n/**\n * Response from calculateSwapAmount\n */\nexport interface SwapAmountResponse {\n /** Amount to be swapped from the input token */\n swapAmount: bigint;\n /** Current sqrt price (used for internal calculation) */\n sqrtPrice: bigint;\n}\n\n/**\n * Parameters for calculating sqrt price limit\n */\nexport interface CalculateLimitPriceParams {\n /** Address of the pool */\n pool: Address;\n /** Slippage tolerance in basis points */\n slippageBP: number;\n /** true if swapping token0 for token1, false otherwise */\n zeroForOne: boolean;\n /** Type of AMM */\n ammType: AMMType;\n /** Address of token0 */\n token0: Address;\n /** Address of token1 */\n token1: Address;\n}\n\n/**\n * Parameters for simulating a swap\n */\nexport interface SimulateSwapParams {\n /** Address of the pool */\n pool: Address;\n /** Address that will receive the swap output (or address(this) for simulation) */\n recipient: Address;\n /** true if swapping token0 → token1, else false */\n zeroForOne: boolean;\n /** Value from calculateSwapAmount */\n amountSpecified: bigint;\n /** Slippage-adjusted limit price */\n sqrtPriceLimitX96: bigint;\n /** AMM type */\n ammType: AMMType;\n /** Input token address (required for Quoter) */\n tokenIn: Address;\n /** Output token address (required for Quoter) */\n tokenOut: Address;\n /** Pool fee (required for Quoter) */\n fee: number;\n /** Quoter contract address (optional - will use default if not provided) */\n quoterAddress?: Address;\n /*** Tick spacing */\n tickSpacing: number;\n\n /** Protocol */\n protocol?: Protocol | null;\n}\n\n/**\n * Response from swap simulation\n */\nexport interface SwapSimulationResponse {\n /** Final token0 amount after swap */\n amount0: bigint;\n /** Final token1 amount after swap */\n amount1: bigint;\n\n sqrtPriceX96After: bigint\n}\n\n/**\n * Parameters for estimating LP tokens\n */\nexport interface EstimateLpTokensParams {\n /** Address of the vault */\n vault: Address;\n /** Original deposit amount */\n originalAssets: bigint;\n /** Amount that was swapped internally */\n swapAmount: bigint;\n /** Tokens received from the swap (amount0 and amount1) */\n swapResult: SwapSimulationResponse;\n /** true if original deposit was token0, false if token1 */\n isToken0: boolean;\n}\n\n/**\n * Response from LP token estimation\n */\nexport interface LpTokenEstimationResponse {\n /** Estimated amount of LP tokens to be received */\n lpTokens: bigint;\n /** Final amount of token0 that will be deposited */\n finalAmount0: bigint;\n /** Final amount of token1 that will be deposited */\n finalAmount1: bigint;\n}\n\n/**\n * Comprehensive single-asset deposit preview\n */\nexport interface SingleAssetDepositPreview {\n /** Amount to be swapped internally */\n swapAmount: bigint;\n /** Current sqrt price */\n currentSqrtPrice: bigint;\n /** Slippage-adjusted limit price for swap */\n sqrtPriceLimitX96: bigint;\n /** Simulated swap result */\n swapSimulation: SwapWithSlippageResponse;\n /** LP token estimation */\n lpEstimation: LpTokenEstimationResponse;\n /** Whether the swap direction is token0 → token1 */\n zeroForOne: boolean;\n}\n\n/**\n * Pool slot0 data structure for UniswapV3\n */\nexport interface PoolSlot0 {\n sqrtPriceX96: bigint;\n tick: number;\n observationIndex: number;\n observationCardinality: number;\n observationCardinalityNext: number;\n feeProtocol: number;\n unlocked: boolean;\n} ","import { AMMType } from '../base/vault/single-asset/types.js';\nimport { SupportedProtocol } from '../types.js';\nimport { Protocol } from './chain.js';\n\n/**\n * Enum representing supported staking protocols\n */\nexport enum StakingProtocol {\n Forge = 'Forge',\n Kinetix = 'Kinetix',\n Uniswap = 'Uniswap',\n SushiSwap = 'SushiSwap',\n QuickSwapV3 = 'QuickSwapV3',\n ArthSwap = 'ArthSwap',\n arthswap = 'arthswap',\n Swapsicle = 'Swapsicle',\n Spark = 'Spark',\n Spark32 = 'Spark32',\n}\n\n/**\n * Checks if a given string is a valid StakingProtocol enum value.\n *\n * @param protocol - The protocol string to validate\n * @returns True if the protocol is a valid StakingProtocol, false otherwise\n * @example\n * ```typescript\n * if (isValidStakingProtocol('Uniswap')) {\n * // Handle valid protocol\n * }\n * ```\n */\nexport function isValidStakingProtocol(protocol: string | null | undefined): protocol is StakingProtocol {\n if (!protocol || typeof protocol !== 'string') {\n return false;\n }\n\n const normalizedProtocol = Object.values(StakingProtocol).find(\n (value) => value.toLowerCase() === protocol.toLowerCase(),\n );\n return Boolean(normalizedProtocol);\n}\n\n/**\n * Normalizes a protocol string to its corresponding StakingProtocol enum value.\n *\n * @param protocol - The protocol string to normalize\n * @returns The normalized StakingProtocol enum value\n * @throws Error if the protocol string is invalid\n * @example\n * ```typescript\n * const protocol = normalizeProtocol('uniswap');\n * // Returns: StakingProtocol.Uniswap\n * ```\n */\nexport function normalizeProtocol(protocol: string): StakingProtocol {\n const normalizedProtocol = Object.values(StakingProtocol).find(\n (value) => value.toLowerCase() === protocol.toLowerCase(),\n );\n if (!normalizedProtocol || !isValidStakingProtocol(normalizedProtocol)) {\n throw new Error(`Invalid protocol: ${protocol}`);\n }\n return normalizedProtocol;\n}\n\n/**\n * List of protocols that implement the Algebra interface\n */\n\n\nexport const ALGEBRA_PROTOCOLS = [\n Protocol.QuickSwap,\n Protocol.Wasabee,\n Protocol.Beam,\n Protocol.QuickSwapIntegral,\n Protocol.SilverSwap,\n Protocol.Ocelex,\n Protocol.Henjin,\n Protocol.Camelot,\n Protocol.Ocelex,\n Protocol.Lynex,\n Protocol.Thena,\n Protocol.Hercules,\n Protocol.QuickSwapAlgebra,\n Protocol.Kim,\n Protocol.Swapsicle,\n Protocol.Fenix,\n Protocol.StellaSwap,\n Protocol.Glyph,\n Protocol.KatanaIntegral,\n Protocol.Blackhole,\n Protocol.Nest,\n Protocol.Cypher,\n Protocol.SparkIntegral,\n];\n\nexport const SHADOW_PROTOCOLS = [Protocol.Shadow, Protocol.MachineX];\n\n/**\n * List of protocols that implement directional Algebra interface\n */\nexport const DIRECTIONAL_ALGEBRA_PROTOCOLS = [Protocol.Camelot, Protocol.Hercules];\n\n/**\n * List of protocols that implement the PoolShark interface\n */\nexport const POOLSHARK_PROTOCOLS = [Protocol.PoolShark];\n\n/**\n * List of protocols that implement the Algebra Integral interface\n */\nexport const ALGEBRA_INTEGRAL_PROTOCOLS = [\n Protocol.Kim,\n Protocol.Wasabee,\n Protocol.Swapsicle,\n Protocol.QuickSwapIntegral,\n Protocol.Fenix,\n Protocol.Henjin,\n Protocol.SilverSwap,\n Protocol.Beam,\n Protocol.Glyph,\n Protocol.KatanaIntegral,\n Protocol.Blackhole,\n Protocol.Nest,\n Protocol.Cypher,\n Protocol.SparkIntegral,\n];\n\nexport const AERODROME_PROTOCOLS = [Protocol.Aerodrome, Protocol.AerodromeV2, Protocol.Cypher];\n\nexport const ALGEBRA_INTEGRAL_V_2_0_PROTOCOLS = [\n Protocol.QuickSwapIntegral,\n Protocol.Wasabee,\n Protocol.KatanaIntegral,\n Protocol.Blackhole,\n Protocol.Cypher,\n Protocol.SparkIntegral,\n]\n\n/**\n * List of protocols that implement the Thick interface\n */\nconst THICK_PROTOCOLS = [Protocol.ThickV2];\n\n/**\n * Checks if a protocol implements the Algebra interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Algebra, false otherwise\n */\nexport const isAlgebraProtocol = (protocol: SupportedProtocol) => {\n return ALGEBRA_PROTOCOLS.includes(protocol);\n};\n\n\n/**\n * Checks if a protocol implements the Shadow interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Shadow, false otherwise\n */\nexport const isShadowProtocol = (protocol: SupportedProtocol) => {\n return SHADOW_PROTOCOLS.includes(protocol);\n};\n\n/**\n * Checks if a protocol implements the ThickV2 interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements ThickV2, false otherwise\n */\nexport const isThickV2Protocol = (protocol: SupportedProtocol) => {\n return THICK_PROTOCOLS.includes(protocol);\n};\n\n/**\n * Checks if a protocol implements the Algebra Direction interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Algebra Direction, false otherwise\n */\nexport const isAlgebraDirectionProtocol = (protocol: SupportedProtocol) => {\n return DIRECTIONAL_ALGEBRA_PROTOCOLS.includes(protocol);\n};\n\n/**\n * Checks if a protocol implements the Algebra Integral interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Algebra Integral, false otherwise\n */\nexport const isAlgebraIntegralProtocol = (protocol: SupportedProtocol) => {\n return ALGEBRA_INTEGRAL_PROTOCOLS.includes(protocol);\n};\n\n\n/**\n * Checks if a protocol implements the PoolShark interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements PoolShark, false otherwise\n */\nexport const isPoolSharkProtocol = (protocol: SupportedProtocol) => {\n return POOLSHARK_PROTOCOLS.includes(protocol);\n};\n\n\nexport const isAerodromeVault = (protocol: SupportedProtocol): boolean => {\n return AERODROME_PROTOCOLS.includes(protocol);\n}\n\nexport const isAlgebraIntegralV2Protocol = (protocol: SupportedProtocol): boolean => {\n return ALGEBRA_INTEGRAL_V_2_0_PROTOCOLS.includes(protocol);\n}\n\nexport const getProtcolTypeByAmmType = (ammType: AMMType): Protocol => {\n\n if (ammType === AMMType.Algebra) {\n return Protocol.QuickSwap\n }\n\n if (ammType === AMMType.AlgebraDirectional) {\n return Protocol.Camelot\n }\n\n if (ammType === AMMType.AlgebraIntegral) {\n return Protocol.QuickSwapIntegral\n }\n\n if (ammType === AMMType.UniswapV3) {\n return Protocol.Uniswap\n }\n\n if (ammType === AMMType.Aerodrome) {\n return Protocol.Aerodrome\n }\n\n throw Error('Protocol type not found')\n} \n","import { SteerSupportedChains } from \"../types.js\";\nimport { Chain, ChainId } from \"./chain.js\";\n\n\n\n/**\n * Interface representing network-specific data and configuration\n */\nexport interface NetworkData {\n /** Chain ID of the network */\n chainId: number;\n /** Symbol of the wrapped native token */\n wrappedNativeToken: string;\n /** Address of the network's native token wrapper contract */\n address: string;\n /** Optional network name */\n name?: string;\n}\n\n\n/**\n * URL for accessing deprecated bundle information\n */\nexport const deprecatedBundlesURL = \"https://api.steer.finance/deprecated-bundles\"\n\n \n/**\n * Configuration mapping of supported chains to their respective subgraph endpoints.\n * Each chain has a dedicated subgraph URL for querying protocol data.\n * Updated each chains for ormi and thegraph\n*/\nexport const steerSubgraphConfig: {\n [protocol in SteerSupportedChains]: string\n} = {\n [Chain.Polygon]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-polygon/prod/gn\",\n [Chain.BSC]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GLDP56fPGDz3MtmhtfTkz5CxWiqiNLACVrsJ9RqQeL4U\",\n [Chain.Optimism]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GgW1EwNARL3dyo3acQ3VhraQQ66MHT7QnYuGcQc5geDG\",\n [Chain.Arbitrum]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-arbitrum/prod/gn\",\n [Chain.Evmos]:\n \"https://subgraph.satsuma-prod.com/769a117cc018/steer/steer-protocol-evmos/api\",\n [Chain.Thundercore]:\n \"https://subgraph.steer.finance/thundercore/subgraphs/name/steerprotocol/steer-thundercore\",\n [Chain.Metis]:\n \"https://api.metis.0xgraph.xyz/api/public/b88b5696-b69d-46be-b212-5c55a9b1492f/subgraphs/steer-protocol-metis/prod/gn\",\n [Chain.Base]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-base/prod/gn\",\n [Chain.Avalanche]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GZotTj3rQJ8ZqVyodtK8TcnKcUxMgeF7mCJHGPYbu8dA\",\n [Chain.PolygonzkEVM]:\n \"https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-polygon-zkevm/prod/gn\",\n [Chain.Celo]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/BPaFHyfVrhv3pdjGodpQcWggAg1Bcrvc9SFc2t2BXeho\",\n [Chain.Kava]:\n \"https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-kava/prod/gn\",\n [Chain.Linea]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-linea/prod/gn\",\n [Chain.Scroll]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/822PfgbgBzC98Huwf37uxvF9YGZMA5nDeETpstkR55Sn\",\n [Chain.Manta]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-manta/prod/gn\",\n [Chain.Astar]:\n \"https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-astar/prod/gn\",\n [Chain.Fantom]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/9uyX2WDuaxmcYh11ehUhU68M9uSCp5FXVQV2w4LqbpbV\",\n [Chain.OkxTestnet]:\n \"https://subgraph.steer.finance/steer-x1-testnet/subgraphs/name/steerprotocol/steer-okxtestnet\",\n [Chain.Mantle]:\n \"https://subgraph-api.mantle.xyz/subgraphs/name/steerprotocol/steer-protocol-mantle\",\n [Chain.AstarZkevm]:\n \"https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-astar-zkevm/1.1.1/gn\",\n [Chain.Blast]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-blast/prod/gn\",\n [Chain.Mode]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-mode/prod/gn\",\n [Chain.Telos]:\n \"https://telos.api.ormilabs.com/api/public/39892398-bfdd-48ac-b776-77ad8a5b4b9e/subgraphs/steer-protocol-telos/prod/gn\",\n [Chain.XLayer]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/8gCrUHrVS9rHwvDPLTn4Wz6od68ULb7azYuQz25JjRK3\",\n [Chain.Taiko]:\n \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-taiko/prod/gn\",\n [Chain.Rootstock]:\n \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/H3pANqbMVTiFCUXHjXYr2mHbXvn5my5o66Gxbwcg7Aqm\",\n [Chain.ZklinkNova]:\n \"https://api.goldsky.com/api/public/project_cmmz9rcn2gc0j01w36xbo3wcn/subgraphs/steer-protocol-zklink-nova/prod/gn\",\n [Chain.Flare]:\n \"https://api.goldsky.com/api/public/project_cm2k9xbkz4qg901vs51bm5uau/subgraphs/steer-protocol-flare/prod/gn\",\n [Chain.BeraChainBartio]:\n 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-berachain-bartio/prod/gn',\n [Chain.Filecoin]:\n 'https://api.goldsky.com/api/public/project_cmmz8w4e274al01vsa0wa7cj3/subgraphs/steer-protocol-filecoin/prod/gn',\n [Chain.Apechain]:\n 'https://apeapi.0xgraph.xyz/api/public/4ea21b03-9850-4796-8068-ec71bbe022db/subgraphs/steer-protocol-apechain/prod/gn',\n [Chain.Zircuit]:\n 'https://app.sentio.xyz/api/v1/graphql/rakesh/steer-protocol-zircuit?version=3',\n [Chain.Moonbeam]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/4D2pLLQuGsAkdZAUgqxxnk4Mcu3aMjEV1HJ2F63kC7w6',\n [Chain.Sei]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/6uQm26z2NM2eV56sjZmVezUjBAC8jMx683B1cUencDwt',\n [Chain.Sonic]:\n 'https://api.0xgraph.xyz/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-sonic/prod/gn',\n [Chain.Zeta]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/HFH41DyzAXxYmT5eszVWn2T7UxViMroPJ4XJV8vhDGNN',\n [Chain.Mainnet]:\n 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-mainnet/prod/gn',\n [Chain.Soneium]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/8gCrUHrVS9rHwvDPLTn4Wz6od68ULb7azYuQz25JjRK3',\n [Chain.Bera]:\n 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-bera/prod/gn',\n [Chain.Unichain]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/EoLK36f26Dr7maXyNKxJmEBJkoYVCMh1d4ENtT5hJgyB',\n [Chain.Hemi]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/2eACJtEGuELqN5roUiHG1jqmCpXt5aimcc8xZdvtMv4z',\n [Chain.TataraTestnet]:\n 'https://api.studio.thegraph.com/query/78728/steer-protocol-tatara-testnet/version/latest',\n [Chain.Core]:\n 'https://thegraph.coredao.org/subgraphs/name/steer-protocol-core',\n [Chain.Peaq]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/45pjWAnAXULpS6UDajzCtLcZYuohwuMm4UuSDjegMKAT',\n [Chain.Katana]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/D6CST1Az8c8KvMf8ktcEcWds89YVQxbKG6v8yo7FAzzM',\n [Chain.Ronin]:\n 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/793Lz5oiK51wdm9kCLtHqunkAPk2qjg7denpCrHqrLcA',\n [Chain.Saga]:\n 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-saga-evm/prod/gn',\n [Chain.Nibiru]:\n 'https://app.sentio.xyz//api/v1/graphql/rakesh/steer-protocol-nibiru',\n [Chain.Hyperevm]:\n 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-hyperevm/prod/gn'\n}\n\n/**\n * Retrieves the subgraph URL for a given chain ID.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @returns The subgraph URL for the given chain ID, or undefined if not found\n * @example\n * ```typescript\n * const subgraphUrl = getSubgraphUrlByChainId(1);\n * // Returns the Ethereum mainnet subgraph URL\n * ```\n */\nexport function getSubgraphUrlByChainId(chainId: number): string | undefined {\n // Convert chainId to Chain enum value using ChainId enum\n const [chainName] = Object.entries(ChainId).find(([, id]) => Number(id) === chainId) || [];\n if (!chainName) return undefined;\n \n // Get the Chain enum value\n const chain = Chain[chainName as keyof typeof Chain];\n if (!chain) return undefined;\n\n // Return the subgraph URL from steerSubgraphConfig\n return steerSubgraphConfig[chain];\n}","export const getTheGraphResolverUrl = (subgraphId: string, isDeploymentId: boolean, apiKey: string) => {\n return `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/${isDeploymentId ? 'deployments' : 'subgraphs'}/id/${subgraphId}`;\n };","/**\n * API URLs for different environments and versions\n */\nexport const API_URLS = {\n v1: {\n production: 'https://s55qpiwei1.execute-api.us-east-1.amazonaws.com',\n development: 'https://s55qpiwei1.execute-api.us-east-1.amazonaws.com', // Currently same as production\n },\n // Add future versions here\n // v2: {\n // production: 'https://v2-prod.api.steer.finance',\n // development: 'https://v2-dev.api.steer.finance',\n // },\n} as const;\n\n/**\n * Get the API URL for a specific environment and version\n * @param environment - The environment to get the URL for\n * @param version - The API version to use (defaults to v1)\n * @returns The API URL for the specified environment and version\n */\nexport function getApiUrl(\n environment: 'production' | 'development', \n version: keyof typeof API_URLS = 'v1'\n): string {\n return API_URLS[version][environment];\n} ","export const erc20Abi = [\n {\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n];\n","export const erc721Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'approved',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'ApprovalForAll',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: 'balance',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'getApproved',\n outputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'ownerOf',\n outputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: '_approved',\n type: 'bool',\n },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'interfaceId',\n type: 'bytes4',\n },\n ],\n name: 'supportsInterface',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'tokenURI',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","export const erc1155Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'ApprovalForAll',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n ],\n name: 'TransferBatch',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'TransferSingle',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'string',\n name: 'value',\n type: 'string',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'URI',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'accounts',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n ],\n name: 'balanceOfBatch',\n outputs: [\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amounts',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeBatchTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'interfaceId',\n type: 'bytes4',\n },\n ],\n name: 'supportsInterface',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'uri',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","export const singleTokenDepositAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"BASIS_POINTS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"HUNDRED\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"MAXIMUM_SLIPPAGE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"MAXIMUM_SWAP_SLIPPAGE_BP\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"MAXIMUM_TICK_DEVIATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"MAXIMUM_TWAP_INTERVAL\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"MINIMUM_TWAP_INTERVAL\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"OPERATOR_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"PRECISION_18\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"PRECISION_36\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"Q192\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"Q96\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"algebraSwapCallback\",\n \"inputs\": [\n {\n \"name\": \"amount0Wanted\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n }, {\n \"name\": \"amount1Wanted\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n }, {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"calculateSwapAmount\",\n \"inputs\": [\n {\n \"name\": \"depositAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"isToken0\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }, {\n \"name\": \"ammType\",\n \"type\": \"uint8\",\n \"internalType\": \"enum AMMType\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"assets\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"receiver\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"isToken0\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }, {\n \"name\": \"depositSlippagePercent\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"swapSlippageBP\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }, {\n \"name\": \"ammType\",\n \"type\": \"uint8\",\n \"internalType\": \"enum AMMType\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"emergencyWithdrawalEnabled\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"getCurrentVaultRatio\",\n \"inputs\": [\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }, {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"maxTickDeviation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"recoverToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }, {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"setMaxTickDeviation\",\n \"inputs\": [\n {\n \"name\": \"newMaxTickDeviation\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"setMaximumSlippageProtection\",\n \"inputs\": [\n {\n \"name\": \"newSlippageProtection\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"setTwapInterval\",\n \"inputs\": [\n {\n \"name\": \"newTwapInterval\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"swapCallBackProtection\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"twapInterval\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n }, {\n \"type\": \"function\",\n \"name\": \"uniswapV3SwapCallback\",\n \"inputs\": [\n {\n \"name\": \"amount0Wanted\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n }, {\n \"name\": \"amount1Wanted\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n }, {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n }, {\n \"type\": \"event\",\n \"name\": \"AssetsSwapped\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"amountIn\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"amountOut\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"MaxTickDeviationUpdated\",\n \"inputs\": [\n {\n \"name\": \"oldMaxTickDeviation\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }, {\n \"name\": \"newMaxTickDeviation\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"MaximumSlippageProtectionUpdated\",\n \"inputs\": [\n {\n \"name\": \"oldSlippageProtection\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n }, {\n \"name\": \"newSlippageProtection\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }, {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"SteerDeposit\",\n \"inputs\": [\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"shares\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"currentRatio\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"SteerPeripheryUpdated\",\n \"inputs\": [\n {\n \"name\": \"oldPeriphery\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"newPeriphery\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"SteerVaultUpdated\",\n \"inputs\": [\n {\n \"name\": \"oldVault\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"newVault\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"SteerWithdraw\",\n \"inputs\": [\n {\n \"name\": \"shares\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }, {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"TokenRecovered\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }, {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"TwapIntervalUpdated\",\n \"inputs\": [\n {\n \"name\": \"oldTwapInterval\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n }, {\n \"name\": \"newTwapInterval\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }, {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }, {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }, {\n \"type\": \"error\",\n \"name\": \"AdjustedQuoteCalculationFailed\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"DeviationMustBePositive\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"DeviationTooHigh\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"IntervalTooLong\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"IntervalTooShort\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"PriceVolatilityTooHigh\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }, {\n \"type\": \"error\",\n \"name\": \"SlippageProtectionTooHigh\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"SlippageTooHigh\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"SwapFailed\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"SwapSlippageTooHigh\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"UnauthorizedSwapCallback\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"VaultIsEmpty\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"VaultIsInOneToken\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }, {\n \"type\": \"error\",\n \"name\": \"ZeroAmount\",\n \"inputs\": []\n }\n]\n","export const UniswapV3PoolABI = [{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]","export const UniswapV3QuoterABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"uniswapV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n] as const;\n\nexport const QuickSwapQuoterV2 = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_WNativeToken\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_poolDeployer\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WNativeToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"algebraSwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [],\n \"name\": \"poolDeployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"limitSqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"limitSqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n\nexport const QuoterV2Thick = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickSpacing\",\n \"type\": \"int24\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"uniswapV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n\nexport const QuoterV2AlgebgraIntegral = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_WNativeToken\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_poolDeployer\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WNativeToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"algebraSwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [],\n \"name\": \"poolDeployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountInRequired\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16[]\",\n \"name\": \"feeList\",\n \"type\": \"uint16[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"limitSqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16\",\n \"name\": \"fee\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutRequired\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16[]\",\n \"name\": \"feeList\",\n \"type\": \"uint16[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"limitSqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16\",\n \"name\": \"fee\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n\nexport const QuoterV2AlgebgraIntegral21 = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_WNativeToken\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_poolDeployer\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WNativeToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"algebraSwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [],\n \"name\": \"poolDeployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountInRequired\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amountOutList\",\n \"type\": \"uint256[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amountInList\",\n \"type\": \"uint256[]\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16[]\",\n \"name\": \"feeList\",\n \"type\": \"uint16[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"deployer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"limitSqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16\",\n \"name\": \"fee\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutRequired\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amountOutList\",\n \"type\": \"uint256[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amountInList\",\n \"type\": \"uint256[]\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16[]\",\n \"name\": \"feeList\",\n \"type\": \"uint16[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"deployer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"limitSqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint16\",\n \"name\": \"fee\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\nexport const QuoterV2Shadow = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_deployer\",\n \"type\": \"address\"\n }, {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"OutOfBounds\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"Overflow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [],\n \"name\": \"deployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickSpacing\",\n \"type\": \"int24\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n }, {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickSpacing\",\n \"type\": \"int24\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }, {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n }, {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n }, {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }, {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n }, {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"uniswapV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n\n","export const FEE_MANAGER_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n inputs: [],\n name: 'admin',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'changeAdmin',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'implementation',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n ],\n name: 'upgradeTo',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'string[]',\n name: 'feeIdentifier',\n type: 'string[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'feeValue',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'address[]',\n name: 'withdrawer',\n type: 'address[]',\n },\n ],\n name: 'FeeUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'caller',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount0',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount1',\n type: 'uint256',\n },\n ],\n name: 'FeeWithdrawn',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'caller',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'string[]',\n name: 'feeIdentifier',\n type: 'string[]',\n },\n {\n indexed: false,\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'amount0',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'amount1',\n type: 'uint256[]',\n },\n ],\n name: 'FeesWithdrawn',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'caller',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address[]',\n name: 'vaults',\n type: 'address[]',\n },\n {\n indexed: false,\n internalType: 'string[][]',\n name: 'feeIdentifiers',\n type: 'string[][]',\n },\n {\n indexed: false,\n internalType: 'address[][]',\n name: 'to',\n type: 'address[][]',\n },\n {\n indexed: false,\n internalType: 'uint256[][]',\n name: 'amount0',\n type: 'uint256[][]',\n },\n {\n indexed: false,\n internalType: 'uint256[][]',\n name: 'amount1',\n type: 'uint256[][]',\n },\n ],\n name: 'FeesWithdrawnFromMultipleVaults',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'string[]',\n name: 'stringArray',\n type: 'string[]',\n },\n ],\n name: 'areAllUnique',\n outputs: [],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n {\n internalType: 'address',\n name: 'newWithdrawer',\n type: 'address',\n },\n ],\n name: 'changeFeeWithdrawer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n ],\n name: 'getFees',\n outputs: [\n {\n components: [\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n {\n internalType: 'uint256',\n name: 'feeValue',\n type: 'uint256',\n },\n ],\n internalType: 'struct FeeManager.Fee[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '_vaultRegistry',\n type: 'address',\n },\n ],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'totalVaultFees',\n type: 'uint256',\n },\n {\n internalType: 'string[]',\n name: 'feeIdentifier',\n type: 'string[]',\n },\n {\n internalType: 'uint256[]',\n name: 'feeValue',\n type: 'uint256[]',\n },\n {\n internalType: 'address[]',\n name: 'withdrawer',\n type: 'address[]',\n },\n ],\n name: 'setDefaultFeeAndWithdrawalPermission',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'string[]',\n name: 'feeIdentifier',\n type: 'string[]',\n },\n {\n internalType: 'uint256[]',\n name: 'feeValue',\n type: 'uint256[]',\n },\n {\n internalType: 'address[]',\n name: 'withdrawer',\n type: 'address[]',\n },\n ],\n name: 'setFeeAndWithdrawalPermission',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'setMigratedVaultFeeAndWithdrawalPermission',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'newTotalFees',\n type: 'uint256',\n },\n ],\n name: 'setTotalFees',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'vaultFees',\n outputs: [\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n {\n internalType: 'uint256',\n name: 'feeValue',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'vaultRegistry',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n ],\n name: 'vaultTotalFees',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n {\n internalType: 'uint256',\n name: 'amount0',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount1',\n type: 'uint256',\n },\n ],\n name: 'withdrawFee',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'vaults',\n type: 'address[]',\n },\n {\n internalType: 'string[][]',\n name: 'feeIdentifiers',\n type: 'string[][]',\n },\n {\n internalType: 'uint256[][]',\n name: 'amount0',\n type: 'uint256[][]',\n },\n {\n internalType: 'uint256[][]',\n name: 'amount1',\n type: 'uint256[][]',\n },\n ],\n name: 'withdrawFeesFromMultipleVaults',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'string[]',\n name: 'feeIdentifiers',\n type: 'string[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amount0',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amount1',\n type: 'uint256[]',\n },\n ],\n name: 'withdrawMultipleFees',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'vault',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n ],\n name: 'withdrawalPermissions',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n","export const VAULT_FEES_ABI = [\n {\n inputs: [\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n ],\n name: 'accruedFees0',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'feeIdentifier',\n type: 'string',\n },\n ],\n name: 'accruedFees1',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const arthswapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionArthSwap,\n subgraph: {\n [Chain.Astar]:\n \"https://squid.subsquid.io/arthswap-v3-astar-squid/v/v1/graphql\",\n [Chain.AstarZkevm]:\n \"https://squid.subsquid.io/arthswap-v3-zkevm-squid/v/v1/graphql\",\n },\n factoryAddress: {\n [Chain.Astar]: \"0x69E92b56e4BF4C0FFa2cFB087c7EA47E846a7244\",\n [Chain.AstarZkevm]: \"0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720\",\n },\n TickLensAddress: {\n [Chain.Astar]: \"0xf369b9904050CD906CFB088A36b5FBA59CA1F698\",\n [Chain.AstarZkevm]: \"0x28674A44198BCd674E21D76C16a948B97B0482a2\",\n },\n}); ","import { ProtocolInfo } from '../../../../types.js';\nimport { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\n\nexport const baseSwapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionBaseSwap,\n subgraph: {\n [Chain.Base]:\n 'https://api.goldsky.com/api/public/project_cltceeuudv1ij01x7ekxhfl46/subgraphs/v3-base/prod/gn',\n },\n factoryAddress: {\n [Chain.Base]: '0x38015D05f4fEC8AFe15D7cc0386a126574e8077B',\n },\n TickLensAddress: {\n [Chain.Base]: '0x49a3A5cf91DE1b78c43Dc1adD03E8A71f1Ea2e30',\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const basexConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionBaseX,\n subgraph: {\n [Chain.Base]:\n \"https://api.studio.thegraph.com/query/54040/basex/v0.0.39\",\n },\n factoryAddress: {\n [Chain.Base]: \"0xdC323d16C451819890805737997F4Ede96b95e3e\",\n },\n swapRouterAddress: {\n [Chain.Base]: \"0x30FF944EaEc54a433B7283dA42C6A9c65e20038F\",\n },\n TickLensAddress: {\n [Chain.Base]: \"0x6f07aF1F970789B5CF29134B6f4506D9774ce935\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const camelotConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionCamelot,\n subgraph: {\n [Chain.Arbitrum]: \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/3utanEBA9nqMjPnuQP1vMCCys6enSM3EawBpKTVwnUw2\",\n [Chain.Apechain]: \"https://apeapi.0xgraph.xyz/api/public/4ea21b03-9850-4796-8068-ec71bbe022db/subgraphs/camelot-apechain/prod/gn\"\n },\n factoryAddress: {\n [Chain.Arbitrum]: \"0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B\",\n [Chain.Apechain]: '0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B'\n },\n NFTManagerAddress: {\n [Chain.Arbitrum]: \"0x00c7f3082833e796A5b3e4Bd59f6642FF44DCD15\",\n [Chain.Apechain]: \"0x00c7f3082833e796A5b3e4Bd59f6642FF44DCD15\"\n },\n TickLensAddress: {\n [Chain.Arbitrum]: \"0xe489df86999C0138A55Cecc096930f580d192Ab8\",\n [Chain.Apechain]: \"0xe489df86999C0138A55Cecc096930f580d192Ab8\",\n },\n QuoterV2Address: {\n [Chain.Arbitrum]: '0x2Ca933639900b88346EdB1D1dDF58A752314D566'\n }\n }); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const crustConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionCrust,\n subgraph: {\n [Chain.Mantle]: 'https://subgraph-api.mantle.xyz/subgraphs/name/crust-v3-subgraph',\n },\n factoryAddress: {\n [Chain.Mantle]: '0xe67a97d7e55256F33fA0B1465d31E6CED36065d0',\n },\n TickLensAddress: {\n [Chain.Mantle]: '0x05AD0a29c1CbDaA7416c1e46b45520e2748E9c3C',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const equilibreConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionEquilibre,\n subgraph: {\n [Chain.Scroll]:\n \"https://api.studio.thegraph.com/query/21023/keller-cl-scroll/version/latest\",\n },\n factoryAddress: {\n [Chain.Scroll]: \"0x952aC46B2586737df679e836d9B980E43E12B2d8\",\n },\n TickLensAddress: {\n [Chain.Scroll]: \"0x9D8e06feae228E4F8D94522B4f09dDCaD1823A07\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const fenixConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionFenix,\n subgraph: {\n [Chain.Blast]:\n \"https://api.goldsky.com/api/public/project_clxadvm41bujy01ui2qalezdn/subgraphs/fenix-v3-dex/latest/gn\",\n },\n factoryAddress: {\n [Chain.Blast]: \"0x7a44CD060afC1B6F4c80A2B9b37f4473E74E25Df\",\n },\n TickLensAddress: {\n [Chain.Blast]: \"0x098cB852107a0b4508664C09917c00dcb0745aa9\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const forgeConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionForge,\n subgraph: {\n [Chain.Evmos]: \"https://subgraph.evmos.org/subgraphs/name/forge-subgraph\",\n },\n factoryAddress: {\n [Chain.Evmos]: \"0xf544365e7065966f190155F629cE0182fC68Eaa2\",\n },\n swapRouterAddress: {\n [Chain.Evmos]: \"0x5b5e44da9718288244110e66a7cA6C537f36f948\",\n },\n NFTManagerAddress: {\n [Chain.Evmos]: \"0x5fE5dAAa011673289847dA4f76d63246DDB2965d\",\n },\n TickLensAddress: {\n [Chain.Evmos]: \"0x8Ae03dB96E16C5cEec346Aae78A8103365F5232B\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const fusionxConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionFusionX,\n subgraph: {\n [Chain.Mantle]:\n \"https://subgraph-api.mantle.xyz/subgraphs/name/fusionx/exchange-v3\",\n },\n factoryAddress: {\n [Chain.Mantle]: \"0x530d2766D1988CC1c000C8b7d00334c14B69AD71\",\n },\n TickLensAddress: {\n [Chain.Mantle]: \"0xE80EE7e19Dd06365111471E1478bA671CAd024C0\",\n },\n initCodeHash: {\n [Chain.Mantle]:\n \"0x1bce652aaa6528355d7a339037433a20cd28410e3967635ba8d2ddb037440dbf\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\nexport const henjinConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionHenjin,\n beaconAlgebraHook: MultiPositionManagers.MultiPositionHenjinAlgebraHook,\n algebraHookSupportedChains: [Chain.Taiko],\n subgraph: {\n [Chain.Taiko]:\n 'https://api.goldsky.com/api/public/project_clvwe2yydw1n701uh6yple20i/subgraphs/henjin-info/1.0.5/gn',\n },\n factoryAddress: {\n [Chain.Taiko]: '0x42B08e7a9211482d3643a126a7dF1895448d3509',\n },\n TickLensAddress: {\n [Chain.Taiko]: '0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3',\n },\n EntryPointAddress: {\n [Chain.Taiko]: '0x441013A52DDedc8D02eB9B90F7A555F6848188b5'\n }\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const herculesConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionHercules,\n subgraph: {\n [Chain.Metis]: \"https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics\",\n },\n factoryAddress: {\n [Chain.Metis]: \"0xC5BfA92f27dF36d268422EE314a1387bB5ffB06A\",\n },\n TickLensAddress: {\n [Chain.Metis]: \"0x3Ea6Eaa18C79a0c575596D44bfaBeE8F88781020\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const horizaConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionHoriza,\n subgraph: {\n [Chain.Arbitrum]:\n 'https://subgraph-prod.goerli.horiza.io/subgraphs/name/retro-arbitrum-one-uniswap-v3',\n },\n factoryAddress: {\n [Chain.Arbitrum]: '0x5b1C257B88537d1Ce2AF55a1760336288CcD28B6',\n },\n swapRouterAddress: {\n [Chain.Arbitrum]: '0xd73C4F7fa43A0aFd85a25Aa3aC79FCB6905Ef24',\n },\n NFTManagerAddress: {\n [Chain.Arbitrum]: '0x39f16045432dc7cb6160269724821459b35938f9',\n },\n TickLensAddress: {\n [Chain.Arbitrum]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const kimConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionKim,\n subgraph: {\n [Chain.Mode]:\n 'https://api.goldsky.com/api/public/project_clmqdcfcs3f6d2ptj3yp05ndz/subgraphs/Algebra-Kim/0.0.4/gn',\n [Chain.Base]:\n 'https://api.goldsky.com/api/public/project_clwz69zvvp7ix01w76khbha61/subgraphs/analytics/1.0.0/gn',\n },\n factoryAddress: {\n [Chain.Mode]: '0xB5F00c2C5f8821155D8ed27E31932CFD9DB3C5D5',\n [Chain.Base]: '0x2F0d41f94d5D1550b79A83D2fe85C82d68c5a3ca',\n },\n TickLensAddress: {\n [Chain.Mode]: '0x086FaBA1D7e487B6D15568fF7E00Ae101334a7BD',\n [Chain.Base]: '0x44a6d9741cDF9C955eE89C14C739FB1aeaD82d6B',\n },\n initCodeHash: {\n [Chain.Mode]: '0xf96d2474815c32e070cd63233f06af5413efc5dcb430aee4ff18cc29007c562d',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const linehubConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionLineHub,\n subgraph: {\n [Chain.Linea]:\n \"https://api.studio.thegraph.com/query/55804/linehub-v3/version/latest\",\n },\n factoryAddress: {\n [Chain.Linea]: \"0x6c379d538F2F7cb642851e154A8E572D63238DF4\",\n },\n TickLensAddress: {\n [Chain.Linea]: \"0x47E34401D5A741a1d601e312486963f4B9b98176\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const lynexConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionLynex,\n subgraph: {\n [Chain.Linea]:\n \"https://api.goldsky.com/api/public/project_cltyhthusbmxp01s95k9l8a1u/subgraphs/lynex-cl/v1.0.2/gn\",\n },\n factoryAddress: {\n [Chain.Linea]: \"0x622b2c98123D303ae067DB4925CD6282B3A08D0F\",\n },\n NFTManagerAddress: {\n [Chain.Linea]: \"0x5D3D9E20ad27dd61182505230D1bD075bd249E4B\",\n },\n TickLensAddress: {\n [Chain.Linea]: \"0xDA6BA21f39d33e922ecC43d41E7068988dc36C6A\",\n },\n swapRouterAddress: {\n [Chain.Linea]: \"0x3921e8cb45B17fC029A0a6dE958330ca4e583390\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const maiaConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionMAIA,\n subgraph: {\n [Chain.Metis]: \"https://subgraph.steer.finance/maia-dao/subgraphs/name/maia-dao/uniswap-v3\",\n },\n factoryAddress: {\n [Chain.Metis]: \"0xf5fd18Cd5325904cC7141cB9Daca1F2F964B9927\",\n },\n swapRouterAddress: {\n [Chain.Metis]: \"0x2db8b665CE6928F9D1a7f83F4C6aCEA64Af6a6f6\",\n },\n NFTManagerAddress: {\n [Chain.Metis]: \"0x1fc37a909cB3997f96cE395B3Ee9ac268C9bCcdb\",\n },\n TickLensAddress: {\n [Chain.Metis]: \"0x7ddEecA94ce57264410d51E9F73a0f8983b2eAA7\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const metaVaultConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionMetaVault,\n subgraph: {\n [Chain.Linea]: 'https://api.studio.thegraph.com/query/55804/linea-v3/version/latest',\n [Chain.Scroll]: 'https://api.studio.thegraph.com/query/55804/metavault-v3/version/latest',\n },\n factoryAddress: {\n [Chain.Linea]: '0x9367c561915f9D062aFE3b57B18e30dEC62b8488',\n [Chain.Scroll]: '0x9367c561915f9D062aFE3b57B18e30dEC62b8488',\n },\n NFTManagerAddress: {\n [Chain.Linea]: '0x5979C5315625276ff99a56f95eE5cC44293e7b36',\n [Chain.Scroll]: '0x5979C5315625276ff99a56f95eE5cC44293e7b36',\n },\n TickLensAddress: {\n [Chain.Linea]: '0x606E4922b259fe28c10e6731e8317705AA1e253B',\n [Chain.Scroll]: '0x606E4922b259fe28c10e6731e8317705AA1e253B',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const novaswapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionNovaSwap,\n subgraph: {\n [Chain.ZklinkNova]: 'https://graph.zklink.io/subgraphs/name/novaswap',\n },\n factoryAddress: {\n [Chain.ZklinkNova]: '0x9f94c91b178F5bc9fCcA3e5428b09A3d01CE5AC6',\n },\n TickLensAddress: {\n [Chain.ZklinkNova]: '0xC0cc61e2B02CAE026Ee413Fd999012Cd29f32Bc9',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const pancakeSwapConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionPancake,\n subgraph: {\n [Chain.BSC]: getTheGraphResolverUrl('Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ', false, theGraphApiKey),\n [Chain.Arbitrum]: getTheGraphResolverUrl('251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve', false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.BSC]: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',\n [Chain.Arbitrum]: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',\n },\n swapRouterAddress: {\n [Chain.BSC]: '0x13f4EA83D0bd40E75C8222255bc855a974568Dd4',\n },\n NFTManagerAddress: {\n [Chain.BSC]: '0x46A15B0b27311cedF172AB29E4f4766fbE7F4364',\n },\n TickLensAddress: {\n [Chain.BSC]: '0x9a489505a00cE272eAa5e07Dba6491314CaE3796',\n [Chain.Arbitrum]: '0x9a489505a00cE272eAa5e07Dba6491314CaE3796',\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const poolsharkConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionPoolShark,\n subgraph: {\n [Chain.Mode]:\n 'https://api.goldsky.com/api/public/project_clr6e38ix6mms01vddnnu2ydr/subgraphs/poolshark-limit-mode-season0-block2/0.3.0/gn',\n },\n factoryAddress: {\n [Chain.Mode]: '0x3fa761492f411ebc64a81fcf3292fdc0b677c00f',\n },\n TickLensAddress: {\n [Chain.Mode]: '0x414B73f989e7cA0653b5C98186749a348405E6D5',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionQuickSwap,\n subgraph: {\n [Chain.Polygon]: getTheGraphResolverUrl(`FqsRcH1XqSjqVx9GRTvEJe959aCbKrcyGgDWBrUkG24g`, false, theGraphApiKey),\n [Chain.PolygonzkEVM]:\n 'https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7?source=quickswap',\n },\n factoryAddress: {\n [Chain.Polygon]: '0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28',\n [Chain.PolygonzkEVM]: '0x4B9f4d2435Ef65559567e5DbFC1BbB37abC43B57',\n },\n NFTManagerAddress: {\n [Chain.Polygon]: '0x8eF88E4c7CfbbaC1C163f7eddd4B578792201de6',\n [Chain.PolygonzkEVM]: '0xd8E1E7009802c914b0d39B31Fc1759A865b727B1',\n },\n TickLensAddress: {\n [Chain.Polygon]: '0x25Ef108B328Cf752F0E0b0169D499Db164173763',\n [Chain.PolygonzkEVM]: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904',\n },\n QuoterV2Address: {\n [Chain.Polygon]: \"0xB10aB1a1C0E3E9697928F05dA842a292310b37f1\",\n \n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapAlgebraConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionQuickswap19,\n subgraph: {\n [Chain.XLayer]:\n \"https://api.studio.thegraph.com/query/44554/qs-xlayer-v3/version/latest\",\n },\n factoryAddress: {\n [Chain.XLayer]: \"0xd2480162Aa7F02Ead7BF4C127465446150D58452\",\n },\n TickLensAddress: {\n [Chain.XLayer]: \"0x6c28AeF8977c9B773996d0e8376d2EE379446F2f\",\n },\n QuoterV2Address: {\n [Chain.XLayer]: '0xd5532a58E4ABB6485FF4e7BCf5bED278e32A516e'\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapIntegralConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionQuickSwapIntegral,\n beaconAlgebraHook: MultiPositionManagers.AlgebraHook,\n algebraHookSupportedChains: [Chain.Base],\n subgraph: {\n [Chain.Soneium]: getTheGraphResolverUrl('3GsT6AiuDiSzh2fXbFxUKtBxT8rBEGVdQCgHSsKMPHiu', false, theGraphApiKey),\n [Chain.Base]: getTheGraphResolverUrl('U65NKb6BsDPGqugPAda58ebMLa1RqeMFT76fndB77oe', false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Soneium]: '0x8Ff309F68F6Caf77a78E9C20d2Af7Ed4bE2D7093',\n [Chain.Base]: '0xC5396866754799B9720125B104AE01d935Ab9C7b'\n },\n TickLensAddress: {\n [Chain.Soneium]: '0x9AfA76331a01b1b25289306fbD72A4e032FDFe06',\n [Chain.Base]: '0xC73e303fb323DDFB446E2Cc8c0f1B8199e7930f4'\n },\n QuoterV2Address: {\n [Chain.Base]: '0x23E0583a3a000d567bB3848115065c1890D87fb5',\n [Chain.Soneium]: '0x22e5195BcC9b0C87f330FbCE2755B263662578E2'\n },\n EntryPointAddress: {\n [Chain.Base]: '0xb9ce7698cE3dCf21cc88bf7dCc1fE20C85E4226E'\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapUniv3Config = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionQuickSwapUniv3,\n subgraph: {\n [Chain.Manta]: \"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn\",\n [Chain.OkxTestnet]: \"https://subgraph.steer.finance/quickswap-x1-testnet/subgraphs/name/quickswap-univ3\",\n [Chain.AstarZkevm]: \"https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest\",\n },\n factoryAddress: {\n [Chain.Manta]: \"0x56c2162254b0E4417288786eE402c2B41d4e181e\",\n [Chain.OkxTestnet]: \"0x56c2162254b0E4417288786eE402c2B41d4e181e\",\n [Chain.AstarZkevm]: \"0x56c2162254b0E4417288786eE402c2B41d4e181e\",\n },\n NFTManagerAddress: {\n [Chain.Manta]: \"0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff\",\n [Chain.AstarZkevm]: \"0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd\",\n },\n TickLensAddress: {\n [Chain.Manta]: \"0xd2480162Aa7F02Ead7BF4C127465446150D58452\",\n [Chain.OkxTestnet]: \"0xd2480162Aa7F02Ead7BF4C127465446150D58452\",\n [Chain.AstarZkevm]: \"0x6c28AeF8977c9B773996d0e8376d2EE379446F2f\",\n },\n QuoterV2Address: {\n [Chain.Manta]: '0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd',\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const retroConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionRetro,\n deprecated: true,\n subgraph: {\n [Chain.Polygon]: \"https://api.thegraph.com/subgraphs/name/ruvlol/univ3-test\",\n },\n factoryAddress: {\n [Chain.Polygon]: \"0x91e1B99072f238352f59e58de875691e20Dc19c1\",\n },\n TickLensAddress: {\n [Chain.Polygon]: \"0x9fdeA1412e50D78B25aCE4f96d35801647Fdf7dA\",\n },\n initCodeHash: {\n [Chain.Polygon]: \"0x817e07951f93017a93327ac8cc31e946540203a19e1ecc37bc1761965c2d1090\",\n },\n QuoterV2Address: {\n [Chain.Polygon]: '0xfe08BE075758935cb6cB9318d1fbb60920416d4e'\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const sparkConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSpark,\n subgraph: {\n [Chain.Flare]:\n 'https://api.goldsky.com/api/public/project_cly4708cqpcj601tt7gzf1jdj/subgraphs/sparkdex-v3/latest/gn',\n },\n factoryAddress: {\n [Chain.Flare]: '0xb3fB4f96175f6f9D716c17744e5A6d4BA9da8176',\n },\n TickLensAddress: {\n [Chain.Flare]: '0x80BE099457DF46e7EA0C38A7B4bB8DAF74079957',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const spark32Config = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSpark32,\n subgraph: {\n [Chain.Flare]:\n \"https://api.goldsky.com/api/public/project_cm1tgcbwdqg8b01un9jf4a64o/subgraphs/sparkdex-v3-2/latest/gn\",\n },\n factoryAddress: {\n [Chain.Flare]: \"0x8A2578d23d4C532cC9A98FaD91C0523f5efDE652\",\n },\n TickLensAddress: {\n [Chain.Flare]: \"0xdB5F2Ca65aAeB277E36be69553E0e7aA3585204d\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const supswapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSupSwap,\n subgraph: {\n [Chain.Mode]:\n \"https://api.goldsky.com/api/public/project_clrhmyxsvvuao01tu4aqj653e/subgraphs/supswap-exchange-v3/1.0.0/gn\",\n },\n factoryAddress: {\n [Chain.Mode]: \"0xa0b018Fe0d00ed075fb9b0eEe26d25cf72e1F693\",\n },\n TickLensAddress: {\n [Chain.Mode]: \"0x5E6AEbab1AD525f5336Bd12E6847b851531F72ba\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const swapmodeConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSwapMode,\n subgraph: {\n [Chain.Mode]:\n \"https://api.goldsky.com/api/public/project_cltceeuudv1ij01x7ekxhfl46/subgraphs/swapmode-v3/prod/gn\",\n },\n factoryAddress: {\n [Chain.Mode]: \"0x6E36FC34eA123044F278d3a9F3819027B21c9c32\",\n },\n TickLensAddress: {\n [Chain.Mode]: \"0x62e879c8979694DbC3A4EF1dd324b08Ee3Ac3688\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const swapsicleConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSwasicle,\n subgraph: {\n [Chain.Telos]:\n \"https://api.telos.0xgraph.xyz/api/public/f59149ee-c99a-41d0-afe4-1c86170a98b0/subgraphs/swapsicle/analytics/prod/gn\",\n },\n factoryAddress: {\n [Chain.Telos]: \"0xA09BAbf9A48003ae9b9333966a8Bda94d820D0d9\",\n },\n TickLensAddress: {\n [Chain.Telos]: \"0x9dE2dEA5c68898eb4cb2DeaFf357DFB26255a4aa\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\n\nexport const sushiConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSushi,\n beaconContractSushiManaged: MultiPositionManagers.MultiPositionSushiManaged,\n subgraph: {\n [Chain.Arbitrum]: getTheGraphResolverUrl('96EYD64NqmnFxMELu2QLWB95gqCmA9N96ssYsZfFiYHg', false, theGraphApiKey),\n [Chain.Avalanche]: getTheGraphResolverUrl('4BxsTB5ADnYdgJgdmzyddmnDGCauctDia28uxB1hgTBE', false, theGraphApiKey),\n [Chain.BSC]: getTheGraphResolverUrl('FiJDXMFCBv88GP17g2TtPh8BcA8jZozn5WRW7hCN7cUT', false, theGraphApiKey),\n [Chain.Base]: getTheGraphResolverUrl('Cz4Snpih41NNNPZcbj1gd3fYXPwFr5q92iWMoZjCarEb', false, theGraphApiKey),\n [Chain.Optimism]: getTheGraphResolverUrl('Dr3FkshPgTMMDwxckz3oZdwLxaPcbzZuAbE92i6arYtJ', false, theGraphApiKey),\n [Chain.Polygon]: getTheGraphResolverUrl('CqLnQY1d6DLcBYu7aZvGmt17LoNdTe4fDYnGbE2EgotR', false, theGraphApiKey),\n [Chain.Thundercore]: 'https://graph-node.thundercore.com/subgraphs/name/sushi-v3/v3-thundercore',\n [Chain.PolygonzkEVM]: getTheGraphResolverUrl('E2x2gmtYdm2HX3QXorUBY4KegfGu79Za6TEQYjVrx15c', false, theGraphApiKey),\n [Chain.Linea]: getTheGraphResolverUrl('QmNZ9ePvxGRDHAEhb7cLsb3AvtCCPJ3qAwh1CDvDn39RMa', true, theGraphApiKey),\n [Chain.Blast]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-blast/gn',\n [Chain.Rootstock]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-rootstock/gn',\n [Chain.Filecoin]: 'https://sushi.laconic.com/subgraphs/name/sushiswap/v3-filecoin',\n [Chain.Hemi]: 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GQU44ZBv8NpiBUxA6eLSDSdd7bs6TVop9dASKzrdirUv',\n [Chain.Katana]: getTheGraphResolverUrl('2YG7eSFHx1Wm9SHKdcrM8HR23JQpVe8fNNdmDHMXyVYR', false, theGraphApiKey),\n [Chain.Mainnet]: getTheGraphResolverUrl('5nnoU1nUFeWqtXgbpC54L9PWdpgo7Y9HYinR3uTMsfzs', false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Polygon]: '0x917933899c6a5F8E37F31E19f92CdBFF7e8FF0e2',\n [Chain.Arbitrum]: '0x1af415a1EbA07a4986a52B6f2e7dE7003D82231e',\n [Chain.Optimism]: '0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0',\n [Chain.BSC]: '0x126555dd55a39328F69400d6aE4F782Bd4C34ABb',\n [Chain.Avalanche]: '0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715',\n [Chain.Thundercore]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n [Chain.PolygonzkEVM]: '0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506',\n [Chain.Base]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n [Chain.Linea]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n [Chain.Blast]: '0x7680D4B43f3d1d54d6cfEeB2169463bFa7a6cf0d',\n [Chain.Rootstock]: '0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e',\n [Chain.Filecoin]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n [Chain.Hemi]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959',\n [Chain.Katana]: '0x203e8740894c8955cB8950759876d7E7E45E04c1',\n [Chain.Mainnet]: '0xbaceb8ec6b9355dfc0269c18bac9d6e2bdc29c4f',\n },\n TickLensAddress: {\n [Chain.Polygon]: '0x9fdeA1412e50D78B25aCE4f96d35801647Fdf7dA',\n [Chain.Arbitrum]: '0x8516944E89f296eb6473d79aED1Ba12088016c9e',\n [Chain.Optimism]: '0x0367a647A68f304f2A6e453c25033a4249d7F2C6',\n [Chain.BSC]: '0x10c19390E1Ac2Fd6D0c3643a2320b0abA38E5bAA',\n [Chain.Avalanche]: '0xDdC1b5920723F774d2Ec2C3c9355251A20819776',\n [Chain.Thundercore]: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904',\n [Chain.PolygonzkEVM]: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904',\n [Chain.Base]: '0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3',\n [Chain.Linea]: '0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3',\n [Chain.Blast]: '0x039e87AB90205F9d87c5b40d4B28e2Be45dA4a20',\n [Chain.Rootstock]: '0x33d91116e0370970444B0281AB117e161fEbFcdD',\n [Chain.Filecoin]: '0x1be211D8DA40BC0ae8719c6663307Bfc987b1d6c',\n [Chain.Hemi]: '0x1f2FCf1d036b375b384012e61D3AA33F8C256bbE',\n [Chain.Katana]: '0x35DC3E13469E980c37b6F288BBb9822B1f9bD435',\n [Chain.Mainnet]: '0xfb70ad5a200d784e7901230e6875d91d5fa6b68c',\n },\n swapRouterAddress: {\n [Chain.Thundercore]: '0xc14Ee6B248787847527e11b8d7Cf257b212f7a9F',\n [Chain.Base]: '0xFB7eF66a7e61224DD6FcD0D7d9C3be5C8B049b9f',\n [Chain.Linea]: '0xc14Ee6B248787847527e11b8d7Cf257b212f7a9F',\n },\n initCodeHash: {\n [Chain.Blast]: '0x8e13daee7f5a62e37e71bf852bcd44e7d16b90617ed2b17c24c2ee62411c5bae',\n },\n QuoterV2Address: {\n [Chain.Polygon]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n [Chain.Optimism]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n [Chain.Arbitrum]: '0x0524E833cCD057e4d7A296e3aaAb9f7675964Ce1',\n [Chain.BSC]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n [Chain.Avalanche]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n [Chain.PolygonzkEVM]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n [Chain.Base]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n [Chain.Linea]: '0xFB7eF66a7e61224DD6FcD0D7d9C3be5C8B049b9f',\n [Chain.Blast]: '0xD93a91442Afd80243cF12f7110f48aB276fFf33F',\n [Chain.Rootstock]: '0xe43ca1Dee3F0fc1e2df73A0745674545F11A59F5',\n [Chain.Filecoin]: '0x9B3fF703FA9C8B467F5886d7b61E61ba07a9b51c',\n [Chain.Hemi]: '0x779EA16ebe59bdFa7230aa4F40D876446e387856',\n [Chain.Katana]: '0x92dea23ED1C683940fF1a2f8fE23FE98C5d3041c',\n [Chain.Mainnet]: '0x64e8802FE490fa7cc61d3463958199161Bb608A7',\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thenaConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionThena,\n subgraph: {\n [Chain.BSC]: 'https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion',\n },\n factoryAddress: {\n [Chain.BSC]: '0x306F06C147f064A010530292A1EB6737c3e378e4',\n },\n NFTManagerAddress: {\n [Chain.BSC]: '0xa51ADb08Cbe6Ae398046A23bec013979816B77Ab',\n },\n TickLensAddress: {\n [Chain.BSC]: '0x1b75ee357fb44Fc246B50641A4f9e9A44D042F22',\n },\n swapRouterAddress: {\n [Chain.BSC]: '0x327Dd3208f0bCF590A66110aCB6e5e6941A4EfA0',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thickConfig = (\n theGraphApiKey: string\n): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionThick,\n subgraph: {\n [Chain.Fantom]: getTheGraphResolverUrl(\"AFoJe2UaxGRRMNbUFXbV9yqmqadduuN23iJh4XmbUn1S\", false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Fantom]: \"0xE6dA85feb3B4E0d6AEd95c41a125fba859bB9d24\",\n },\n TickLensAddress: {\n [Chain.Fantom]: \"0xb80a72281c76464CC0e1FbF2431A897393E0d757\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thrusterConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionThruster,\n subgraph: {\n [Chain.Blast]: 'https://graph.hyperlock.finance/subgraphs/name/hyperlock/v3-subgraph-mainnet',\n },\n factoryAddress: {\n [Chain.Blast]: '0x71b08f13B3c3aF35aAdEb3949AFEb1ded1016127',\n },\n TickLensAddress: {\n [Chain.Blast]: '0x796B39328b92472b2Bd950AEB20D950611e02EF6',\n },\n initCodeHash: {\n [Chain.Blast]: '0xd0c3a51b16dbc778f000c620eaabeecd33b33a80bd145e1f7cbc0d4de335193d',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\nexport const uniswapConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionUniswapV3,\n \n subgraph: {\n [Chain.Mainnet]: getTheGraphResolverUrl(`5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV`, false, theGraphApiKey),\n [Chain.Polygon]: getTheGraphResolverUrl(`EsLGwxyeMMeJuhqWvuLmJEiDKXJ4Z6YsoJreUnyeozco`, false, theGraphApiKey),\n [Chain.Optimism]: getTheGraphResolverUrl(`Cghf4LfVqPiFw6fp6Y5X5Ubc8UpmUhSfJL82zwiBFLaj`, false, theGraphApiKey),\n [Chain.Arbitrum]: getTheGraphResolverUrl(`FbCGRftH4a3yZugY7TnbYgPJVEv2LvMT6oF1fxPe9aJM`, false, theGraphApiKey),\n [Chain.BSC]: getTheGraphResolverUrl(`G5MUbSBM7Nsrm9tH2tGQUiAF4SZDGf2qeo1xPLYjKr7K`, false, theGraphApiKey),\n [Chain.Celo]: getTheGraphResolverUrl(`ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4`, false, theGraphApiKey),\n [Chain.Rootstock]:\n 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/oku-rootstock/1.1.1/gn',\n [Chain.Base]: getTheGraphResolverUrl(`43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG`, false, theGraphApiKey),\n [Chain.Filecoin]: 'https://subgraph.laconic.com/subgraphs/name/steer/sushi-v3',\n [Chain.Sonic]:\n 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/uniswap-v3-sonic-oku/prod/gn',\n [Chain.Unichain]: getTheGraphResolverUrl(`BCfy6Vw9No3weqVq9NhyGo4FkVCJep1ZN9RMJj5S32fX`, false, theGraphApiKey),\n [Chain.Telos]: 'https://telos.api.ormilabs.com/api/public/39892398-bfdd-48ac-b776-77ad8a5b4b9e/subgraphs/uniswap-v3-telos-oku/prod/gn',\n [Chain.Saga]: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/uniswap-v3-saga-evm-oku/prod/gn',\n [Chain.Nibiru]: 'https://app.sentio.xyz//api/v1/graphql/rakesh/steer-oku-nibiru'\n },\n factoryAddress: {\n [Chain.Mainnet]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n [Chain.Polygon]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n [Chain.Optimism]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n [Chain.Arbitrum]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n [Chain.BSC]: '0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7',\n [Chain.Celo]: '0xAfE208a311B21f13EF87E33A90049fC17A7acDEc',\n [Chain.Rootstock]: '0xaF37EC98A00FD63689CF3060BF3B6784E00caD82',\n [Chain.Base]: '0x33128a8fC17869897dcE68Ed026d694621f6FDfD',\n [Chain.Filecoin]: '0xB4C47eD546Fc31E26470a186eC2C5F19eF09BA41',\n [Chain.Sonic]: '0xcb2436774C3e191c85056d248EF4260ce5f27A9D',\n [Chain.Unichain]: '0x1f98400000000000000000000000000000000003',\n [Chain.Telos]: '0xcb2436774C3e191c85056d248EF4260ce5f27A9D',\n [Chain.Saga]: '0x454050C4c9190390981Ac4b8d5AFcd7aC65eEffa',\n [Chain.Nibiru]: '0x346239972d1fa486FC4a521031BC81bFB7D6e8a4'\n },\n NFTManagerAddress: {\n [Chain.Mainnet]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n [Chain.Polygon]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n [Chain.Optimism]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n [Chain.Arbitrum]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n [Chain.BSC]: '0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613',\n [Chain.Celo]: '0x3d79EdAaBC0EaB6F08ED885C05Fc0B014290D95A',\n [Chain.Base]: '0x4f225937EDc33EFD6109c4ceF7b560B2D6401009',\n [Chain.Filecoin]: '0x4cd986dD509fbB6A695aE971d5C56c8795f640ee',\n [Chain.Sonic]: '0x743E03cceB4af2efA3CC76838f6E8B50B63F184c',\n [Chain.Unichain]: '0x943e6e07a7e8e791dafc44083e54041d743c46e9',\n [Chain.Telos]: '0x743E03cceB4af2efA3CC76838f6E8B50B63F184c',\n [Chain.Saga]: '0xdD489C75be1039ec7d843A6aC2Fd658350B067Cf',\n [Chain.Nibiru]: '0xEFdE184f4b5d79f7c3b7Efc0388d829ff9af0050'\n },\n swapRouterAddress: {\n [Chain.Polygon]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',\n [Chain.Optimism]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',\n [Chain.Arbitrum]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',\n [Chain.Celo]: '0x5615CDAb10dc425a742d643d949a7F474C01abc4',\n [Chain.Filecoin]: '0xcAb04058e60020d65D18D4B3DFF2cA1445D7099f',\n [Chain.Telos]: '0xaa52bB8110fE38D0d2d2AF0B85C3A3eE622CA455',\n },\n TickLensAddress: {\n [Chain.Mainnet]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n [Chain.Polygon]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n [Chain.Optimism]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n [Chain.Arbitrum]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n [Chain.BSC]: '0xD9270014D396281579760619CCf4c3af0501A47C',\n [Chain.Celo]: '0x5f115D9113F88e0a0Db1b5033D90D4a9690AcD3D',\n [Chain.Rootstock]: '0x55B9dF5bF68ADe972191a91980459f48ecA16afC',\n [Chain.Base]: '0x0CdeE061c75D43c82520eD998C23ac2991c9ac6d',\n [Chain.Filecoin]: '0x76c001ad9E527FEfA8Fa822a987Ad44ce720BAeD',\n [Chain.Sonic]: '0xB3309C48F8407651D918ca3Da4C45DE40109E641',\n [Chain.Unichain]: '0xd5d76fa166ab8d8ad4c9f61aaa81457b66cbe443',\n [Chain.Telos]: '0xB3309C48F8407651D918ca3Da4C45DE40109E641',\n [Chain.Saga]: '0x6Aa54a43d7eEF5b239a18eed3Af4877f46522BCA',\n [Chain.Nibiru]: '0xA9d71E1dd7ca26F26e656E66d6AA81ed7f745bf0'\n },\n QuoterV2Address: {\n [Chain.Mainnet]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n [Chain.Polygon]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n [Chain.Optimism]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n [Chain.Arbitrum]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n [Chain.BSC]: '0x78D78E420Da98ad378D7799bE8f4AF69033EB077',\n [Chain.Rootstock]: '0xb51727c996C68E60F598A923a5006853cd2fEB31',\n [Chain.Base]: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',\n [Chain.Filecoin]: '0xE45C06922228A33fFf1ED54638A0db78f69F9780',\n [Chain.Sonic]: '0x5911cB3633e764939edc2d92b7e1ad375Bb57649',\n [Chain.Unichain]: '0x385a5cf5f83e99f7bb2852b6a19c3538b9fa7658',\n [Chain.Telos]: '0x5911cB3633e764939edc2d92b7e1ad375Bb57649',\n [Chain.Saga]: '0x9db70E29712Cc8Af10c2B597BaDA6784544FF407',\n [Chain.Nibiru]: '0x864DDc9B50B9A0dF676d826c9B9EDe9F8913a160'\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const kinetixConfig = (): ProtocolInfo => {\n return {\n beaconContract: MultiPositionManagers.MultiPositionKinetix,\n subgraph: {\n [Chain.Kava]:\n \"https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/v3-subgraph\",\n [Chain.Base]:\n \"https://api.studio.thegraph.com/query/55804/kinetixfi-base-v3/version/latest\",\n },\n factoryAddress: {\n [Chain.Kava]: \"0x2dBB6254231C5569B6A4313c6C1F5Fe1340b35C2\",\n [Chain.Base]: \"0xdDF5a3259a88Ab79D5530eB3eB14c1C92CD97FCf\",\n },\n TickLensAddress: {\n [Chain.Kava]: \"0xdc7A5276aB4C6cd25e16b6118B230109945D2426\",\n [Chain.Base]: \"0xCbd2f2407538d046b34F4226585C710aa0F50574\",\n },\n };\n};","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const glyphConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionGlyph,\n subgraph: {\n [Chain.Core]: \"https://thegraph.coredao.org/subgraphs/name/glyph/algebra\",\n },\n factoryAddress: {\n [Chain.Core]: \"0x74EfE55beA4988e7D92D03EFd8ddB8BF8b7bD597\",\n },\n NFTManagerAddress: {\n [Chain.Core]: \"0x7b3794f728780A61e0eB709b5bB849F50aad1E7f\",\n },\n TickLensAddress: {\n [Chain.Core]: \"0x433cef5888C701831360686e54668376330cED6D\",\n },\n swapRouterAddress: {\n [Chain.Core]: \"0x832933BA44658C50ae6152039Cd30A6f4C2432b1\",\n },\n}); ","import { Chain, MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const katanaConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionKatana,\n subgraph: {\n [Chain.TataraTestnet]: 'http://34.126.179.146/subgraphs/name/uniswap-v3-katana',\n },\n factoryAddress: {\n [Chain.TataraTestnet]: '0x9B3336186a38E1b6c21955d112dbb0343Ee061eE',\n },\n TickLensAddress: {\n [Chain.TataraTestnet]: '0xb46e319390De313B8cc95EA5aa30C7bBFD79Da94',\n },\n});\n","import { Chain, StrykePositionManagers } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const shadowConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionShadow,\n strykeBeaconContract: StrykePositionManagers.StrykeShadowManager,\n subgraph: {\n [Chain.Sonic]: getTheGraphResolverUrl(`HGyx7TCqgbWieay5enLiRjshWve9TjHwiug3m66pmLGR`, false, theGraphApiKey)\n },\n factoryAddress: {\n [Chain.Sonic]: \"0xcD2d0637c94fe77C2896BbCBB174cefFb08DE6d7\"\n },\n TickLensAddress: {\n [Chain.Sonic]: \"0x095bBC37f439EEf5dcF733205B51447d03202E14\"\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const nestVaultConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionNest,\n subgraph: {\n [Chain.Hyperevm]: 'https://api.goldsky.com/api/public/project_cmfl7yikdo9zw01x014ly6v6b/subgraphs/hypenet-algebra/1.0.0/gn',\n },\n factoryAddress: {\n [Chain.Hyperevm]: '0xF77Bd082c627aA54591cF2f2EaA811fd1AB3b1F3',\n },\n TickLensAddress: {\n [Chain.Hyperevm]: '0x606E4922b259fe28c10e6731e8317705AA1e253B',\n },\n QuoterV2Address: {\n [Chain.Hyperevm]: '0xBea20609A4772311c5b81F814Cd4f9ECaEF5DFAd',\n },\n});\n","import { ProtocolInfo } from '../../../../types.js';\nimport { Chain, MultiPositionManagers } from '../../../chain.js';\n\nexport const blackholeConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionBlackhole,\n subgraph: {\n [Chain.Avalanche]: 'https://api.goldsky.com/api/public/project_cm8gyxv0x02qv01uphvy69ey6/subgraphs/poap-subgraph-core/avax-main/gn',\n \n },\n factoryAddress: {\n [Chain.Avalanche]: '0x512eb749541B7cf294be882D636218c84a5e9E5F',\n },\n NFTManagerAddress: {\n [Chain.Avalanche]: '0x3fED017EC0f5517Cdf2E8a9a4156c64d74252146',\n },\n TickLensAddress: {\n [Chain.Avalanche]: '0xE66aAe9CB5aB27eC6662C0EC9B9b28764D4a822E',\n },\n QuoterV2Address: {\n [Chain.Avalanche]: \"0x3e182bcf14Be6142b9217847ec1112e3c39Eb689\",\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const beamConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionBeam,\n subgraph: {\n [Chain.Zeta]: 'https://subgraph.satsuma-prod.com/7d07f1edcbfd/codemelt/zeta-analytics/api',\n },\n factoryAddress: {\n [Chain.Zeta]: '0x28b5244B6CA7Cb07f2f7F40edE944c07C2395603',\n },\n TickLensAddress: {\n [Chain.Zeta]: '0x4c1e7E543879473969590Bca21cbe2e21f8BeB66',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const beamswapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionBeamSwap,\n subgraph: {\n [Chain.Moonbeam]:\n \"https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v3-temp\",\n },\n factoryAddress: {\n [Chain.Moonbeam]: \"0xD118fa707147c54387B738F54838Ea5dD4196E71\",\n },\n TickLensAddress: {\n [Chain.Moonbeam]: \"0x11EA6E92058c46B9248FEF73c8C9294e1cbf9Cc6\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const dodoConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionDodo,\n subgraph: {\n [Chain.Taiko]:\n 'https://api.dodoex.io/graph-node-taiko/subgraphs/name/amm-v3-taiko?apikey=graphqlunagi5gioYzjf',\n },\n factoryAddress: {\n [Chain.Taiko]: '0x78172691DD3B8ADa7aEbd9bFfB487FB11D735DB2',\n },\n TickLensAddress: {\n [Chain.Taiko]: '0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const dragonswapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionDragonSwap,\n subgraph: {\n [Chain.Sei]: \"https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-v3-prod/1.0.5/gn\"\n },\n factoryAddress: {\n [Chain.Sei]: \"0x179D9a5592Bc77050796F7be28058c51cA575df4\"\n },\n TickLensAddress: {\n [Chain.Sei]: \"0xD71AB34e3034Bb2A54243bb62Ab5986F6965aeB8\"\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const eddyConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionEddy,\n subgraph: {\n [Chain.Zeta]:\n 'https://api.goldsky.com/api/public/project_cm6rp87pnuwua01v4fpp6c300/subgraphs/UNIV3/v1/gn',\n },\n factoryAddress: {\n [Chain.Zeta]: '0x67AA6B2b715937Edc1Eb4D3b7B5d5dCD1fd93E8C',\n },\n TickLensAddress: {\n [Chain.Zeta]: '0x4c1e7E543879473969590Bca21cbe2e21f8BeB66',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const kodiakConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionKodiak,\n subgraph: {\n [Chain.BeraChainBartio]:\n 'https://api.goldsky.com/api/public/project_clpx84oel0al201r78jsl0r3i/subgraphs/kodiak-v3-berachain-bartio/latest/gn',\n [Chain.Bera]:\n 'https://api.goldsky.com/api/public/project_clpx84oel0al201r78jsl0r3i/subgraphs/kodiak-v3-berachain-mainnet/latest/gn',\n },\n factoryAddress: {\n [Chain.BeraChainBartio]: '0x217Cd80795EfCa5025d47023da5c03a24fA95356',\n [Chain.Bera]: '0xD84CBf0B02636E7f53dB9E5e45A616E05d710990',\n },\n TickLensAddress: {\n [Chain.BeraChainBartio]: '0x612df7be5da2bacfd6bd5d20dab99cd3d5378e32',\n [Chain.Bera]: '0xa73C6F1FeC76D5487dC30bdB8f11d1F390394b48',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const kyoConfig = (theGraphApiKey: string ): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionKyo,\n subgraph: {\n [Chain.Soneium]: getTheGraphResolverUrl('97pgogYWyJ1gFx4qYnANz7DMtPw4rU2WvhFRT3eZgC5M', false, theGraphApiKey),\n // [Chain.Hyperevm]: 'https://oi3v7a5o4f.execute-api.us-east-1.amazonaws.com/dev/query-kyo-subgraph',\n },\n factoryAddress: {\n [Chain.Soneium]: '0x137841043180BBA8EF52828F9030D1b7fE065F95',\n // [Chain.Hyperevm]: '0xD883a0B7889475d362CEA8fDf588266a3da554A1',\n },\n TickLensAddress: {\n [Chain.Soneium]: '0x27a7F9FD22035e9a63468A187dbbF9E4dD97F79A',\n // [Chain.Hyperevm]: '0xB2B02b6cBbb4ca19C43c78233161ff848760Dc86',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const ocelexConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionOcelex,\n subgraph: {\n [Chain.Zircuit]:\n 'https://api.goldsky.com/api/public/project_cltyhthusbmxp01s95k9l8a1u/subgraphs/ocelex-cl/1.0.0/gn',\n },\n factoryAddress: {\n [Chain.Zircuit]: '0x03057ae6294292b299a1863420edD65e0197AFEf',\n },\n TickLensAddress: {\n [Chain.Zircuit]: '0xB2bE7FF7e5f825B69Ce9829500398f14182dBc00',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const sailorConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSailor,\n subgraph: {\n [Chain.Sei]: 'https://subgraph.sailor.finance/subgraphs/name/sailor'\n },\n factoryAddress: {\n [Chain.Sei]: \"0x137841043180BBA8EF52828F9030D1b7fE065F95\"\n },\n TickLensAddress: {\n [Chain.Sei]: \"0xD71AB34e3034Bb2A54243bb62Ab5986F6965aeB8\"\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const silverswapConfig = (\n theGraphApiKey: string\n): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSilverSwap,\n subgraph: {\n [Chain.Sonic]: getTheGraphResolverUrl('CCzukThD1ovSzoGwYZg3ZQaXVqetRjec97aiLcjf48PK', false, theGraphApiKey),\n [Chain.Nibiru]: 'https://index-api.onfinality.io/sq/PolEpie/silverswap-liquidity-nibiru'\n },\n factoryAddress: {\n [Chain.Sonic]: \"0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76\",\n [Chain.Nibiru]: '0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76'\n },\n TickLensAddress: {\n [Chain.Sonic]: \"0xE96C8F64237F6b4aF428a474E2741d60e2404DAe\",\n [Chain.Nibiru]: '0xE96C8F64237F6b4aF428a474E2741d60e2404DAe'\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const spookyswapConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSpookySwap,\n subgraph: {\n [Chain.Sonic]: \"https://api.0xgraph.xyz/api/public/28820bd2-ad8b-4d40-a142-ce8d7c786f66/subgraphs/spookyswap/v3/v0.0.1/gn\"\n },\n factoryAddress: {\n [Chain.Sonic]: \"0x3D91B700252e0E3eE7805d12e048a988Ab69C8ad\"\n },\n TickLensAddress: {\n [Chain.Sonic]: \"0x7B97E8C53F1B4fE7F0C330583B89BD3038554449\"\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const stellaswapConfig = (\n theGraphApiKey: string\n): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionStellaSwap,\n subgraph: {\n [Chain.Moonbeam]:\n getTheGraphResolverUrl('9b4EniUevfNnq4hNkkpU11jAqgAC6k1mc5DpEiETXD27', false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Moonbeam]: \"0xabE1655110112D0E45EF91e94f8d757e4ddBA59C\",\n },\n TickLensAddress: {\n [Chain.Moonbeam]: \"0x0e56599F3164F3a7e5aF7a87c4350dC32CcBa1b8\",\n },\n NFTManagerAddress: {\n [Chain.Moonbeam]: \"0x1FF2ADAa387dD27c22b31086E658108588eDa03a\",\n },\n}); ","import { Chain, StrykePositionManagers } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thickv2Config = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionThickV2,\n strykeBeaconContract: StrykePositionManagers.StrykeEqualizerManager,\n subgraph: {\n [Chain.Sonic]: \"https://equalizer-backend.duckdns.org/graphql\"\n },\n factoryAddress: {\n [Chain.Sonic]: \"0x7Ca1dCCFB4f49564b8f13E18a67747fd428F1C40\"\n },\n TickLensAddress: {\n [Chain.Sonic]: \"0x547DB6759B0aF9e050855106993e3CEFC16E937E\"\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const wasabeeConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionWasabee,\n subgraph: {\n [Chain.Bera]: 'https://api.goldsky.com/api/public/project_cm78242tjtmme01uvcbkaay27/subgraphs/hpot-algebra-core/2.4.0/gn'\n },\n factoryAddress: {\n [Chain.Bera]: \"0x7d53327D78EFD0b463bd8d7dc938C52402323b95\"\n },\n TickLensAddress: {\n [Chain.Bera]: \"0x6fB8eCB54B9b3e3e1668d12d3287439E37BBfD38\"\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const machinexConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionMachineX,\n subgraph: {\n [Chain.Peaq]: getTheGraphResolverUrl('EAVSLJ9r1mc18RmDXFHUxzH1QiQ83hDx1MY8LcPQ3nBB', false, theGraphApiKey)\n },\n factoryAddress: {\n [Chain.Peaq]: \"0x2646DCbE025D21A2925fdaCeB639e998E17d6060\"\n },\n TickLensAddress: {\n [Chain.Peaq]: \"0x918256d1f4521cBEE9312025D6e9549F0BdC3e51\"\n },\n QuoterV2Address: {\n [Chain.Peaq]: \"0xA675327f7A18bA35860617b2dBD5a6feC786CdBa\"\n }\n}); \n\n// https://thegraph.com/explorer/subgraphs/EAVSLJ9r1mc18RmDXFHUxzH1QiQ83hDx1MY8LcPQ3nBB?view=Query&chain=arbitrum-one","import { Chain, MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const katanaIntegralConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionKatanaIntegral,\n subgraph: {\n [Chain.Ronin]: 'https://api.studio.thegraph.com/query/78728/katana-v-4-analytics/version/latest',\n },\n factoryAddress: {\n [Chain.Ronin]: '0x7ecaf729C6FFb04448aA89A722cA370724BF70De',\n },\n TickLensAddress: {\n [Chain.Ronin]: '0xd727633B8434FACab9325aD611Ad9a3F4ac9cFfD',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const aerodromeConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionAerodrome,\n subgraph: {\n [Chain.Base]:\n getTheGraphResolverUrl(\"GENunSHWLBXm59mBSgPzQ8metBEp9YDfdqwFr91Av1UM\", false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Base]: \"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A\",\n },\n TickLensAddress: {\n [Chain.Base]: \"0x49a3A5cf91DE1b78c43Dc1adD03E8A71f1Ea2e30\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const aerodromeV2Config = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionAerodromeV2,\n subgraph: {\n [Chain.Base]:\n getTheGraphResolverUrl(\"GENunSHWLBXm59mBSgPzQ8metBEp9YDfdqwFr91Av1UM\", false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Base]: \"0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a\",\n },\n TickLensAddress: {\n [Chain.Base]: \"0x3d4C22254F86f64B7eC90ab8F7aeC1FBFD271c6C\",\n },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const cypherConfig = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionCypher,\n subgraph: {\n [Chain.Mainnet]: getTheGraphResolverUrl('8knsFRJjoEtsRECVSdxhfbvidipCMdBjXx1hQmMRujHx', false, theGraphApiKey),\n },\n factoryAddress: {\n [Chain.Mainnet]: '0xfb8Ed3485EfA29a0e4bed93351dD51B59fC4b0f0',\n },\n TickLensAddress: {\n [Chain.Mainnet]: '0x4DA465E96E586B127ac0c8d02871Aa73F226cCC4',\n },\n Quoter: {\n [Chain.Mainnet]: '0xeae871C4a8dD267146558C362c86805FB7e3Fd2F',\n },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const sparkIntegralConfig = (): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionSparkIntegral,\n subgraph: {\n [Chain.Flare]: 'https://api.goldsky.com/api/public/project_cm1tgcbwdqg8b01un9jf4a64o/subgraphs/sparkdex-v4/latest/gn',\n },\n factoryAddress: {\n [Chain.Flare]: '0x805488DaA81c1b9e7C5cE3f1DCeA28F21448EC6A',\n },\n TickLensAddress: {\n [Chain.Flare]: '0x04ACde7811F23B69fB1759A3F2fc98bD18D60894',\n },\n QuoterV2Address: {\n [Chain.Flare]: '0x6AD6A4f233F1E33613e996CCc17409B93fF8bf5f',\n }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\nexport const uniswapV4Config = (theGraphApiKey: string): ProtocolInfo => ({\n beaconContract: MultiPositionManagers.MultiPositionUniswapV4ALM,\n \n subgraph: {\n [Chain.Unichain]: getTheGraphResolverUrl(`EoCvJ5tyMLMJcTnLQwWpjAtPdn74PcrZgzfcT5bYxNBH`, false, theGraphApiKey),\n },\n PoolManager: {\n [Chain.Unichain]: '0x1f98400000000000000000000000000000000004',\n },\n PositionDescriptor: {\n [Chain.Unichain]: '0x9fb28449a191cd8c03a1b7abfb0f5996ecf7f722'\n },\n Quoter: {\n [Chain.Unichain]: '0x333e3c607b141b18ff6de9f258db6e77fe7491e0'\n },\n StateView: {\n [Chain.Unichain]: '0x86e8631a016f9068c3f085faf484ee3f5fdee8f2'\n },\n UniversalRouter: {\n [Chain.Unichain]: '0xef740bf23acae26f6492b10de645d6b98dc8eaf3'\n },\n Permit2: {\n [Chain.Unichain]: '0x000000000022D473030F116dDEE9F6B43aC78BA3'\n }\n}); \n","import { AMMConfigType } from '../../../types.js';\nimport {\n arthswapConfig,\n baseSwapConfig,\n basexConfig,\n crustConfig,\n equilibreConfig,\n fenixConfig,\n fusionxConfig,\n glyphConfig,\n henjinConfig,\n herculesConfig,\n horizaConfig,\n kinetixConfig,\n kimConfig,\n linehubConfig,\n lynexConfig,\n maiaConfig,\n metaVaultConfig,\n novaswapConfig,\n poolsharkConfig,\n quickSwapAlgebraConfig,\n quickSwapIntegralConfig,\n quickSwapUniv3Config,\n retroConfig,\n spark32Config,\n sparkConfig,\n supswapConfig,\n swapmodeConfig,\n swapsicleConfig,\n thrusterConfig,\n shadowConfig,\n} from './protocols/index.js';\nimport { blackholeConfig } from './protocols/blackhole.js';\nimport { beamConfig } from './protocols/beam.js';\nimport { beamswapConfig } from './protocols/beamswap.js';\nimport { camelotConfig } from './protocols/camelot.js';\nimport { dodoConfig } from './protocols/dodo.js';\nimport { dragonswapConfig } from './protocols/dragonswap.js';\nimport { eddyConfig } from './protocols/eddy.js';\nimport { forgeConfig } from './protocols/forge.js';\nimport { katanaConfig } from './protocols/katana.js';\nimport { kodiakConfig } from './protocols/kodiak.js';\nimport { kyoConfig } from './protocols/kyo.js';\nimport { ocelexConfig } from './protocols/ocelex.js';\nimport { pancakeSwapConfig } from './protocols/pancakeswap.js';\nimport { quickSwapConfig } from './protocols/quickswap.js';\nimport { sailorConfig } from './protocols/sailor.js';\nimport { silverswapConfig } from './protocols/silverswap.js';\nimport { spookyswapConfig } from './protocols/spookyswap.js';\nimport { stellaswapConfig } from './protocols/stellaswap.js';\nimport { sushiConfig } from './protocols/sushi.js';\nimport { thenaConfig } from './protocols/thena.js';\nimport { thickConfig } from './protocols/thick.js';\nimport { thickv2Config } from './protocols/thickv2.js';\nimport { uniswapConfig } from './protocols/uniswap.js';\nimport { wasabeeConfig } from './protocols/wasabee.js';\nimport { machinexConfig } from './protocols/machinex.js';\nimport { katanaIntegralConfig } from './protocols/katanaIntegral.js';\n// import { blackholeConfig } from './protocols/blackhole.js';\nimport { aerodromeConfig } from './protocols/aerodrome.js';\nimport { aerodromeV2Config } from './protocols/aerodrome-v2.js';\nimport { nestVaultConfig } from './protocols/nest.js';\nimport { cypherConfig } from './protocols/cypher.js';\nimport { sparkIntegralConfig } from './protocols/spark-integral.js';\nimport { uniswapV4Config } from './protocols/uniswapv4.js';\n\nexport const getAmmConfig = (theGraphApiKey: string): AMMConfigType => {\n return {\n QuickSwap: quickSwapConfig(theGraphApiKey),\n Uniswap: uniswapConfig(theGraphApiKey),\n Sushi: sushiConfig(theGraphApiKey),\n PancakeSwap: pancakeSwapConfig(theGraphApiKey),\n QuickSwapIntegral: quickSwapIntegralConfig(theGraphApiKey),\n Forge: forgeConfig(),\n BaseSwap: baseSwapConfig(),\n QuickSwapUniv3: quickSwapUniv3Config(),\n BaseX: basexConfig(),\n Thick: thickConfig(theGraphApiKey),\n ThickV2: thickv2Config(),\n Crust: crustConfig(),\n Thruster: thrusterConfig(),\n FusionX: fusionxConfig(),\n Kim: kimConfig(),\n SupSwap: supswapConfig(),\n SwapMode: swapmodeConfig(),\n QuickSwapAlgebra: quickSwapAlgebraConfig(),\n PoolShark: poolsharkConfig(),\n Swapsicle: swapsicleConfig(),\n Equilibre: equilibreConfig(),\n Fenix: fenixConfig(),\n LineHub: linehubConfig(),\n Henjin: henjinConfig(),\n NovaSwap: novaswapConfig(),\n Spark32: spark32Config(),\n Spark: sparkConfig(),\n Thena: thenaConfig(),\n Lynex: lynexConfig(),\n Maia: maiaConfig(),\n Retro: retroConfig(),\n Horiza: horizaConfig(),\n Kodiak: kodiakConfig(),\n Ocelex: ocelexConfig(),\n StellaSwap: stellaswapConfig(theGraphApiKey),\n BeamSwap: beamswapConfig(),\n DragonSwap: dragonswapConfig(),\n SpookySwap: spookyswapConfig(),\n SilverSwap: silverswapConfig(theGraphApiKey),\n Beam: beamConfig(),\n Kyo: kyoConfig(theGraphApiKey),\n Sailor: sailorConfig(),\n Wasabee: wasabeeConfig(),\n Eddy: eddyConfig(),\n Dodo: dodoConfig(),\n Hercules: herculesConfig(),\n Kinetix: kinetixConfig(),\n MetaVault: metaVaultConfig(),\n Camelot: camelotConfig(),\n ArthSwap: arthswapConfig(),\n Glyph: glyphConfig(),\n Katana: katanaConfig(),\n Shadow: shadowConfig(theGraphApiKey),\n MachineX: machinexConfig(theGraphApiKey),\n KatanaIntegral: katanaIntegralConfig(),\n Blackhole: blackholeConfig(),\n Aerodrome: aerodromeConfig(theGraphApiKey),\n AerodromeV2: aerodromeV2Config(theGraphApiKey),\n Nest: nestVaultConfig(),\n Cypher: cypherConfig(theGraphApiKey),\n SparkIntegral: sparkIntegralConfig(),\n UniswapV4: uniswapV4Config(theGraphApiKey),\n };\n}; ","import { SupportedProtocol } from '../../../types.js';\nimport { MultiPositionManagers, Protocol, StrykePositionManagers } from '../../chain.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\nconst BEACON_TO_SUPPORTED_PROTOCOL_MAP: Record<string, SupportedProtocol> = {\n retro: 'Retro' as SupportedProtocol,\n forge: 'Forge' as SupportedProtocol,\n maia: 'Maia' as SupportedProtocol,\n sushi: 'Sushi' as SupportedProtocol,\n uniswapv4: 'UniswapV4' as SupportedProtocol,\n uniswap: 'Uniswap' as SupportedProtocol,\n pancake: 'PancakeSwap' as SupportedProtocol,\n quickswapuniv3: 'QuickSwapUniv3' as SupportedProtocol,\n quickswap19: 'QuickSwapAlgebra' as SupportedProtocol,\n quickswapintegral: 'QuickSwapIntegral' as SupportedProtocol,\n quickswap: 'QuickSwap' as SupportedProtocol,\n kinetix: 'Kinetix' as SupportedProtocol,\n metavault: 'MetaVault' as SupportedProtocol,\n camelot: 'Camelot' as SupportedProtocol,\n lynex: 'Lynex' as SupportedProtocol,\n thena: 'Thena' as SupportedProtocol,\n horiza: 'Horiza' as SupportedProtocol,\n basex: 'BaseX' as SupportedProtocol,\n arthswap: 'ArthSwap' as SupportedProtocol,\n hercules: 'Hercules' as SupportedProtocol,\n thick: 'Thick' as SupportedProtocol,\n crust: 'Crust' as SupportedProtocol,\n thruster: 'Thruster' as SupportedProtocol,\n fusionx: 'FusionX' as SupportedProtocol,\n supswap: 'SupSwap' as SupportedProtocol,\n swapmode: 'SwapMode' as SupportedProtocol,\n baseswap: 'BaseSwap' as SupportedProtocol,\n poolshark: 'PoolShark' as SupportedProtocol,\n kim: 'Kim' as SupportedProtocol,\n swapsicle: 'Swapsicle' as SupportedProtocol,\n equilibre: 'Equilibre' as SupportedProtocol,\n fenix: 'Fenix' as SupportedProtocol,\n linehub: 'LineHub' as SupportedProtocol,\n henjin: 'Henjin' as SupportedProtocol,\n novaswap: 'NovaSwap' as SupportedProtocol,\n spark32: 'Spark32' as SupportedProtocol,\n spark: 'Spark' as SupportedProtocol,\n kodiak: 'Kodiak' as SupportedProtocol,\n ocelex: 'Ocelex' as SupportedProtocol,\n stellaswap: 'StellaSwap' as SupportedProtocol,\n beamswap: 'BeamSwap' as SupportedProtocol,\n dragonswap: 'DragonSwap' as SupportedProtocol,\n spookyswap: 'SpookySwap' as SupportedProtocol,\n silver: 'SilverSwap' as SupportedProtocol,\n thickv2: 'ThickV2' as SupportedProtocol,\n beam: 'Beam' as SupportedProtocol,\n kyo: 'Kyo' as SupportedProtocol,\n sailor: 'Sailor' as SupportedProtocol,\n wasabee: 'Wasabee' as SupportedProtocol,\n eddy: 'Eddy' as SupportedProtocol,\n dodo: 'Dodo' as SupportedProtocol,\n glyph: 'Glyph' as SupportedProtocol,\n shadow: 'Shadow' as SupportedProtocol,\n machinex: 'MachineX' as SupportedProtocol,\n katanaintegral: 'KatanaIntegral' as SupportedProtocol,\n blackhole: 'Blackhole' as SupportedProtocol,\n multiPositionAerodrome: 'Aerodrome' as SupportedProtocol,\n aerodromeStakedPositionManager: 'AerodromeV2' as SupportedProtocol,\n nest: 'Nest' as SupportedProtocol,\n cypher: 'Cypher' as SupportedProtocol,\n};\n\n\n\nconst BEACON_TO_PROTOCOL_MAP: Record<string, Protocol> = {\n retro: Protocol.Retro,\n forge: Protocol.Forge,\n maia: Protocol.Maia,\n sushi: Protocol.Sushi,\n uniswap: Protocol.Uniswap,\n pancake: Protocol.PancakeSwap,\n quickswapuniv3: Protocol.QuickSwapUniv3,\n quickswap19: Protocol.QuickSwapAlgebra,\n quickswapintegral: Protocol.QuickSwapIntegral,\n quickswap: Protocol.QuickSwap,\n kinetix: Protocol.Kinetix,\n metavault: Protocol.MetaVault,\n camelot: Protocol.Camelot,\n lynex: Protocol.Lynex,\n horiza: Protocol.Horiza,\n basex: Protocol.BaseX,\n arthswap: Protocol.ArthSwap,\n hercules: Protocol.Hercules,\n crust: Protocol.Crust,\n thruster: Protocol.Thruster,\n fusionx: Protocol.FusionX,\n poolshark: Protocol.PoolShark,\n kim: Protocol.Kim,\n swapsicle: Protocol.Swapsicle,\n equilibre: Protocol.Equilibre,\n fenix: Protocol.Fenix,\n linehub: Protocol.LineHub,\n henjin: Protocol.Henjin,\n novaswap: Protocol.NovaSwap,\n spark32: Protocol.Spark32,\n spark: Protocol.Spark,\n kodiak: Protocol.Kodiak,\n ocelex: Protocol.Ocelex,\n stellaswap: Protocol.StellaSwap,\n beamswap: Protocol.BeamSwap,\n dragonswap: Protocol.DragonSwap,\n spookyswap: Protocol.SpookySwap,\n silver: Protocol.SilverSwap,\n thickv2: Protocol.ThickV2,\n thick: Protocol.Thick,\n beam: Protocol.Beam,\n kyo: Protocol.Kyo,\n sailor: Protocol.Sailor,\n wasabee: Protocol.Wasabee,\n eddy: Protocol.Eddy,\n dodo: Protocol.Dodo,\n glyph: Protocol.Glyph,\n shadow: Protocol.Shadow,\n machinex: Protocol.MachineX,\n katanaintegral: Protocol.KatanaIntegral,\n blackhole: Protocol.Blackhole,\n multiPositionAerodrome: Protocol.Aerodrome,\n aerodromeStakedPositionManager: Protocol.AerodromeV2,\n nest: Protocol.Nest,\n cypher: Protocol.Cypher,\n sparkintegral: Protocol.SparkIntegral,\n};\n\n\n\n\n// Create reverse mapping from the existing BEACON_TO_SUPPORTED_PROTOCOL_MAP\nconst PROTOCOL_TO_BEACON_MAP = Object.fromEntries(\n Object.entries(BEACON_TO_SUPPORTED_PROTOCOL_MAP).map(([beacon, protocol]) => [protocol, beacon])\n);\n\n// Custom/special-case beacon to protocol mapping\nconst CUSTOM_BEACON_TO_PROTOCOL_MAP: Record<string, SupportedProtocol> = {\n [StrykePositionManagers.StrykeEqualizerManager]: Protocol.ThickV2,\n [StrykePositionManagers.StrykeShadowManager]: Protocol.Shadow,\n [MultiPositionManagers.MultiPositionUniswapV4ALM]: Protocol.UniswapV4,\n [MultiPositionManagers.MultiPositionUniswapV4HookOld]: Protocol.UniswapV4,\n [MultiPositionManagers.MultiPositionBlackholeOld]: Protocol.Blackhole,\n [MultiPositionManagers.MultiPositionUniswapV4Hook]: Protocol.UniswapV4,\n [MultiPositionManagers.AlgebraHook]: Protocol.QuickSwapIntegral,\n [MultiPositionManagers.MultiPositionAerodromeV2]: Protocol.AerodromeV2,\n [MultiPositionManagers.MultiPositionNest]: Protocol.Nest,\n [MultiPositionManagers.MultiPositionCypher]: Protocol.Cypher,\n [MultiPositionManagers.MultiPositionSushiManaged]: Protocol.Sushi,\n [MultiPositionManagers.MultiPositionSparkIntegral]: Protocol.SparkIntegral,\n};\n\n/**`\n * Retrieves the beacon name associated with a given protocol.\n *\n * @param protocol - The supported protocol to get the beacon name for\n * @returns The beacon name string for the protocol, or empty string if not found\n * @example\n * ```typescript\n * const beaconName = getBeaconNameByProtocol('Uniswap');\n * // Returns: 'uniswap'\n * ```\n */\nexport function getBeaconNameByProtocol(protocol: SupportedProtocol): string {\n return PROTOCOL_TO_BEACON_MAP[protocol] || '';\n}\n\n/**\n * Gets the protocol configuration for a given beacon identifier.\n *\n * @param beacon - The beacon identifier string\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The protocol configuration object or null if not found\n * @example\n * ```typescript\n * const config = getProtocolConfigByBeacon('uniswap', 'api-key');\n * ```\n */\nexport const getProtocolConfigByBeacon = (beacon: string, theGraphApiKey: string) => {\n if (!beacon) return null;\n\n const beaconLower = beacon.toLowerCase();\n const matchedProtocol = Object.entries(BEACON_TO_PROTOCOL_MAP).find(([key]) =>\n beaconLower.includes(key)\n );\n\n if (!matchedProtocol) return null;\n\n const protocolConfig = getAmmConfig(theGraphApiKey);\n return protocolConfig[matchedProtocol[1]];\n};\n\n/**\n * Determines the protocol type from a given beacon identifier.\n *\n * @param beacon - The beacon identifier string\n * @returns The supported protocol type or null if not found\n * @example\n * ```typescript\n * const protocolType = getProtocolTypeByBeacon('uniswap');\n * // Returns: 'Uniswap' as SupportedProtocol\n * ```\n */\nexport function getProtocolTypeByBeacon(beacon: string): SupportedProtocol | null {\n if (!beacon) return null;\n\n // Check custom/special-case mappings first\n if (CUSTOM_BEACON_TO_PROTOCOL_MAP[beacon]) {\n return CUSTOM_BEACON_TO_PROTOCOL_MAP[beacon];\n }\n\n const beaconLower = beacon.toLowerCase();\n\n // Sort keys by length descending to prioritize more specific matches\n const sortedEntries = Object.entries(BEACON_TO_SUPPORTED_PROTOCOL_MAP).sort(\n ([a], [b]) => b.length - a.length\n );\n\n const matchedProtocol = sortedEntries.find(([key]) => beaconLower.includes(key));\n\n return matchedProtocol ? matchedProtocol[1] : null;\n}\n","import { SupportedProtocol } from '../../../types.js';\nimport { Chain } from '../../chain.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\n/**\n * Retrieves the swap router contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the router address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The swap router contract address or undefined if not found\n */\nexport function getSwapRouterAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.swapRouterAddress?.[chain];\n}\n\n/**\n * Gets the init code hash for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the init code hash for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The init code hash or undefined if not found\n */\nexport function getQuoterV2Address(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.QuoterV2Address?.[chain];\n}\n\n\n\nexport function getInitCodeHash(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.initCodeHash?.[chain];\n}\n\n\n/**\n * Retrieves the factory contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the factory address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The factory contract address or undefined if not found\n */\nexport function getFactoryAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.factoryAddress?.[chain];\n}\n\n/**\n * Gets the tick lens contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the tick lens address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The tick lens contract address or undefined if not found\n */\nexport function getTickLensAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.TickLensAddress?.[chain];\n}\n\n/**\n * Retrieves the NFT manager contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the NFT manager address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The NFT manager contract address or undefined if not found\n */\nexport function getNFTManagerAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.NFTManagerAddress?.[chain];\n}\n\n/**\n * Gets the subgraph URL for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the subgraph URL for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The subgraph URL string\n * @throws Error if subgraph URL is not found\n */\nexport function getProtocolSubgraphURL(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string {\n const url = getAmmConfig(theGraphApiKey)[protocol]?.subgraph?.[chain];\n if (url) {\n return url;\n }\n\n throw new Error(`Subgraph URL not found for ${protocol} on ${chain}`);\n}\n\n/**\n * Interface representing all contract addresses for a protocol\n */\nexport type ProtocolContractAddresses = {\n swapRouterAddress: string | undefined;\n NFTManagerAddress: string | undefined;\n UniswapV3Factory: string | undefined;\n TickLensAddress: string | undefined;\n initCodeHash: string | undefined;\n quoterV2Address: string | undefined\n}\n\n/**\n * Retrieves all relevant contract addresses for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the contract addresses for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns An object containing all contract addresses\n * @example\n * ```typescript\n * const addresses = getProtocolContractAddresses('Uniswap', Chain.MAINNET, 'api-key');\n * ```\n */\nexport function getProtocolContractAddresses(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): ProtocolContractAddresses {\n const swapRouterAddress = getSwapRouterAddress(protocol, chain, theGraphApiKey);\n const NFTManagerAddress = getNFTManagerAddress(protocol, chain, theGraphApiKey);\n const UniswapV3Factory = getFactoryAddress(protocol, chain, theGraphApiKey);\n const TickLensAddress = getTickLensAddress(protocol, chain, theGraphApiKey);\n const initCodeHash = getInitCodeHash(protocol, chain, theGraphApiKey);\n const quoterV2Address = getQuoterV2Address(protocol, chain, theGraphApiKey);\n\n return {\n swapRouterAddress,\n NFTManagerAddress,\n UniswapV3Factory,\n TickLensAddress,\n initCodeHash,\n quoterV2Address\n };\n} ","import { ProtocolInfo, SupportedProtocol } from '../../../types.js';\nimport { Chain, Protocol } from '../../chain.js';\nimport { chainIdToName } from '../../network.js';\nimport { ALGEBRA_PROTOCOLS } from '../../protocol.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\n/**\n` * Interface representing detailed protocol information including name and associated data\n */\nexport type ProtocolDetails = {\n /** The protocol identifier */\n name: SupportedProtocol;\n /** Protocol-specific configuration and information */\n data: ProtocolInfo;\n}\n\n/**\n * Retrieves detailed protocol information for a specific blockchain network.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns Array of protocol details supported on the specified chain\n * @example\n * ```typescript\n * const protocols = getProtocolInfoByChainId(1, 'api-key');\n * // Returns array of protocol details for Ethereum mainnet\n * ```\n */\nexport const getProtocolInfoByChainId = (\n chainId: number,\n theGraphApiKey: string\n): ProtocolDetails[] => {\n try {\n const protocolConfig = getAmmConfig(theGraphApiKey);\n const supportedProtocols: SupportedProtocol[] = Object.keys(\n protocolConfig\n ) as SupportedProtocol[];\n\n const protocolsForChain: ProtocolDetails[] = [];\n supportedProtocols.forEach((protocolName) => {\n const protocolData = protocolConfig[protocolName];\n const chainName = chainIdToName(chainId);\n\n if (chainName && protocolData && protocolData.subgraph[chainName as Chain]) {\n protocolsForChain.push({\n name: protocolName,\n data: protocolData,\n });\n }\n });\n\n return protocolsForChain;\n } catch (error) {\n console.error(\"Error fetching protocol info:\", error);\n return [];\n }\n}\n\n/**\n * Gets a list of supported protocols for a specific blockchain network.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns Array of protocol names supported on the specified chain\n * @example\n * ```typescript\n * const protocols = getProtocolsForChainId(1, 'api-key');\n * // Returns ['Uniswap', 'Sushi', ...] for Ethereum mainnet\n * ```\n */\nexport const getProtocolsForChainId = (\n chainId: number,\n theGraphApiKey: string\n): SupportedProtocol[] => {\n try {\n const protocolConfig = getAmmConfig(theGraphApiKey);\n const supportedProtocols: SupportedProtocol[] = Object.keys(\n protocolConfig\n ) as SupportedProtocol[];\n\n const protocolsForChain: ProtocolDetails[] = [];\n supportedProtocols.forEach((protocolName) => {\n const protocolData = protocolConfig[protocolName];\n const chainName = chainIdToName(chainId);\n\n if (chainName && protocolData && protocolData.subgraph[chainName as Chain]) {\n protocolsForChain.push({\n name: protocolName,\n data: protocolData,\n });\n }\n });\n\n return protocolsForChain.map(({ name }) => name);\n } catch (error) {\n console.error(\"Error fetching protocol info:\", error);\n return [];\n }\n}\n\n/**\n * Retrieves protocol information for a specific protocol by its name.\n * \n * @param protocolName - The name of the protocol to get information for\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns Protocol configuration and information\n * @example\n * ```typescript\n * const info = getProtocolInfoByName('Uniswap', 'api-key');\n * ```\n */\nexport const getProtocolInfoByName = (\n protocolName: Protocol,\n theGraphApiKey: string\n): ProtocolInfo | undefined => {\n return getAmmConfig(theGraphApiKey)[protocolName];\n}\n\n/**\n * Finds a protocol by its subgraph URL.\n * \n * @param subgraphUrl - The subgraph URL to search for\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The protocol name if found, undefined otherwise\n * @example\n * ```typescript\n * const protocol = getProtocolBySubgraph('https://api.thegraph.com/...', 'api-key');\n * ```\n */\nexport const getProtocolBySubgraph = (\n subgraphUrl: string,\n theGraphApiKey: string\n): SupportedProtocol | undefined => {\n try {\n const protocolConfig = getAmmConfig(theGraphApiKey);\n const supportedProtocols: SupportedProtocol[] = Object.keys(\n protocolConfig\n ) as SupportedProtocol[];\n\n const protocol = supportedProtocols.find((protocolName) => {\n const protocolData = protocolConfig[protocolName];\n if (!protocolData) return false;\n const subgraphs = Object.values(protocolData.subgraph);\n return subgraphs.includes(subgraphUrl);\n });\n\n return protocol;\n } catch (error) {\n console.error(\"Error fetching protocol info:\", error);\n return undefined;\n }\n}\n\n/**\n * Checks if a protocol is an Algebra protocol based on its subgraph URL.\n * \n * @param subgraphUrl - The subgraph URL to check\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns True if the protocol is an Algebra protocol, false otherwise\n * @example\n * ```typescript\n * const isAlgebra = isAlgebraProtocolBySubgraph('https://api.thegraph.com/...', 'api-key');\n * ```\n */\nexport function isAlgebraProtocolBySubgraph(subgraphUrl: string, theGraphApiKey: string): boolean {\n const protocolConfig = getAmmConfig(theGraphApiKey);\n const algebraSubgraphUrls = ALGEBRA_PROTOCOLS.flatMap((protocol: SupportedProtocol) =>\n Object.values(protocolConfig[protocol]?.subgraph || {})\n );\n return algebraSubgraphUrls.includes(subgraphUrl);\n} \n","import { AMMConfigType, ProtocolInfo, SupportedProtocol } from '../../../types.js';\nimport { Chain } from '../../chain.js';\nimport { chainIdToName } from '../../network.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\nexport const getAmmConfigByChainId = (chainId: number, theGraphApiKey: string): AMMConfigType => {\n const chainName = chainIdToName(chainId);\n const config = getAmmConfig(theGraphApiKey);\n\n if (!chainName) {\n throw new Error(`Chain ${chainId} not supported`);\n }\n\n const chainEnum = Chain[chainName as keyof typeof Chain];\n\n // Filter protocols that support the specified chain\n const filteredConfig: Partial<AMMConfigType> = {};\n\n for (const protocol in config) {\n const protocolConfig = config[protocol as SupportedProtocol];\n if (!protocolConfig) continue;\n\n // Check if this protocol supports the specified chain in any of its configurations\n const hasChainSupport = Object.values(protocolConfig).some((configSection) => {\n if (typeof configSection === 'object' && configSection !== null) {\n return chainEnum in configSection;\n }\n return false;\n });\n\n // If the protocol supports this chain, include it in the filtered config but only with the specified chain\n if (hasChainSupport) {\n // Create a new protocol config with only the specified chain\n const filteredProtocolConfig: ProtocolInfo = {\n subgraph: {},\n factoryAddress: {},\n };\n\n // For each section in the protocol config (subgraph, factoryAddress, etc.)\n for (const sectionKey in protocolConfig) {\n const section = protocolConfig[sectionKey as keyof typeof protocolConfig];\n\n // If this section is an object with chain mappings\n if (typeof section === 'object' && section !== null) {\n // Create a new section with only the specified chain\n const filteredSection: Record<Chain, string> = {} as Record<Chain, string>;\n\n // If this chain exists in this section, include only that chain\n if (chainEnum in section) {\n filteredSection[chainEnum] = section[chainEnum as keyof typeof section] as string;\n\n // Add this filtered section to the filtered protocol config\n (filteredProtocolConfig[sectionKey as keyof ProtocolInfo] as Record<Chain, string>) =\n filteredSection;\n }\n } else if (section !== undefined) {\n // For non-object sections (like beaconContract), include as is\n (filteredProtocolConfig as Record<keyof ProtocolInfo, unknown>)[sectionKey as keyof ProtocolInfo] = section;\n }\n }\n\n filteredConfig[protocol as SupportedProtocol] = filteredProtocolConfig;\n }\n }\n\n return filteredConfig as AMMConfigType;\n};\n\n\nexport function getFactoryAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.factoryAddress?.[chain];\n}\n\nexport function getTickLensAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.TickLensAddress?.[chain];\n}\n\nexport function getNFTManagerAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.NFTManagerAddress?.[chain];\n}\n\nexport function getProtocolSubgraphURL(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string {\n const url = getAmmConfig(theGraphApiKey)[protocol]?.subgraph?.[chain];\n if (url) {\n return url;\n }\n\n throw new Error(`Subgraph URL not found for ${protocol} on ${chain}`);\n}\n\nexport function getSwapRouterAddress(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.swapRouterAddress?.[chain];\n}\n\nexport function getInitCodeHash(\n protocol: SupportedProtocol,\n chain: Chain,\n theGraphApiKey: string\n): string | undefined {\n return getAmmConfig(theGraphApiKey)[protocol]?.initCodeHash?.[chain];\n}\n\n\nexport * from './beacon.js';\nexport * from './contracts.js';\nexport * from './protocol.js';\n\n","import { Chain, ChainId } from './chain.js';\nimport { getSubgraphUrlByChainId, steerSubgraphConfig } from './subgraph.js';\nimport { isSingleAssetDepositSupported, networks, type NetworkConfig } from './network.js';\nimport { getProtocolInfoByChainId, type ProtocolDetails } from './amm/utils/protocol.js';\n\nexport type SupportedChainsFeature =\n | 'subgraph'\n | 'deployments'\n | 'protocols'\n | 'singleAssetDeposit';\n\nexport type SupportedChainsInclude = {\n subgraph?: boolean;\n deployments?: boolean;\n protocols?: boolean;\n singleAssetDeposit?: boolean;\n};\n\nexport type GetSupportedChainsOptions = {\n theGraphApiKey?: string;\n include?: SupportedChainsInclude;\n filter?: {\n feature?: SupportedChainsFeature;\n };\n};\n\nexport type SupportedChainFeatures = {\n subgraph: boolean;\n deployments: boolean;\n protocols: boolean;\n singleAssetDeposit: boolean;\n};\n\nexport type SupportedChain = {\n schemaVersion: 1;\n chain: Chain;\n chainId: number;\n features: SupportedChainFeatures;\n subgraphUrl?: string;\n deployments?: NetworkConfig;\n protocols?: ProtocolDetails[];\n};\n\nfunction getChainId(chain: Chain): number {\n return ChainId[chain];\n}\n\nfunction defaultInclude(include?: SupportedChainsInclude): Required<SupportedChainsInclude> {\n return {\n subgraph: include?.subgraph ?? true,\n deployments: include?.deployments ?? false,\n protocols: include?.protocols ?? false,\n singleAssetDeposit: include?.singleAssetDeposit ?? false,\n };\n}\n\nexport function getSupportedChains(options: GetSupportedChainsOptions = {}): SupportedChain[] {\n const include = defaultInclude(options.include);\n\n const chains: SupportedChain[] = Object.values(Chain)\n .filter((chain) => Boolean(steerSubgraphConfig[chain]))\n .map((chain) => {\n const chainId = getChainId(chain);\n\n const subgraphUrl = include.subgraph ? getSubgraphUrlByChainId(chainId) : undefined;\n const deployments = include.deployments ? networks[chain] : undefined;\n\n const protocols = include.protocols\n ? getProtocolInfoByChainId(chainId, options.theGraphApiKey ?? '')\n : undefined;\n\n const singleAssetDeposit = include.singleAssetDeposit\n ? isSingleAssetDepositSupported(chainId)\n : false;\n\n const features: SupportedChainFeatures = {\n subgraph: Boolean(subgraphUrl),\n deployments: Boolean(deployments),\n protocols: Boolean(protocols && protocols.length > 0),\n singleAssetDeposit,\n };\n\n const supportedChain: SupportedChain = {\n schemaVersion: 1 as const,\n chain,\n chainId,\n features,\n };\n\n if (include.subgraph) supportedChain.subgraphUrl = subgraphUrl;\n if (include.deployments) supportedChain.deployments = deployments;\n if (include.protocols) supportedChain.protocols = protocols;\n\n return supportedChain;\n });\n\n const featureFilter = options.filter?.feature;\n if (!featureFilter) return chains;\n\n return chains.filter((c) => c.features[featureFilter]);\n}\n\nexport function getSupportedChainIds(options: GetSupportedChainsOptions = {}): number[] {\n return getSupportedChains(options).map((c) => c.chainId);\n}\n\nexport function getSupportedChainByChainId(\n chainId: number,\n options: Omit<GetSupportedChainsOptions, 'filter'> = {}\n): SupportedChain | undefined {\n const chainName = Object.values(Chain).find((chain) => getChainId(chain) === chainId);\n if (!chainName) return undefined;\n\n return getSupportedChains({ ...options }).find((c) => c.chainId === chainId);\n}\n","import type { Address, PublicClient } from 'viem';\nimport { getContract } from 'viem';\nimport { Protocol } from \"./chain.js\";\nimport { getProtocolTypeByBeacon } from \"./amm/utils/beacon.js\";\nimport { isAlgebraProtocol, isAlgebraIntegralProtocol, isThickV2Protocol, isShadowProtocol } from \"./protocol.js\";\nimport { \n UniswapV3QuoterABI, \n QuickSwapQuoterV2, \n QuoterV2Thick, \n QuoterV2AlgebgraIntegral, \n QuoterV2AlgebgraIntegral21, \n QuoterV2Shadow \n} from \"./abis/quoter.js\";\nimport { NetworkConfig } from './network.js';\nimport { getProtocolContractAddresses } from './amm/index.js';\n\n/**\n * Base interface for quote parameters\n */\nexport interface BaseQuoteParams {\n tokenIn: Address;\n tokenOut: Address;\n amountIn: bigint;\n}\n\n/**\n * Quote parameters for Uniswap V3 style quoters (fee-based)\n */\nexport interface UniswapQuoteParams extends BaseQuoteParams {\n fee: number; // uint24\n sqrtPriceLimitX96?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Algebra style quoters (limit price)\n */\nexport interface AlgebraQuoteParams extends BaseQuoteParams {\n limitSqrtPrice?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Thick V2 quoters (tick spacing)\n */\nexport interface ThickQuoteParams extends BaseQuoteParams {\n tickSpacing: number; // int24\n sqrtPriceLimitX96?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Algebra Integral v2.1 quoters (with deployer)\n */\nexport interface AlgebraIntegral21QuoteParams extends BaseQuoteParams {\n deployer: Address;\n limitSqrtPrice?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Shadow quoters (tick spacing)\n */\nexport interface ShadowQuoteParams extends BaseQuoteParams {\n tickSpacing: number; // int24\n sqrtPriceLimitX96?: bigint; // uint160\n}\n\n/**\n * Union type for all possible quote parameters\n */\nexport type QuoteParams = \n | UniswapQuoteParams \n | AlgebraQuoteParams \n | ThickQuoteParams \n | AlgebraIntegral21QuoteParams \n | ShadowQuoteParams;\n\n/**\n * Union type for all possible QuoterV2 ABIs\n */\nexport type QuoterV2ABI = \n | typeof UniswapV3QuoterABI\n | typeof QuickSwapQuoterV2\n | typeof QuoterV2Thick\n | typeof QuoterV2AlgebgraIntegral\n | typeof QuoterV2AlgebgraIntegral21\n | typeof QuoterV2Shadow;\n\n/**\n * Union type for all possible quoter function arguments\n */\nexport type QuoterFunctionArgs = \n | {\n tokenIn: Address;\n tokenOut: Address;\n amountIn: bigint;\n fee: number;\n sqrtPriceLimitX96: bigint;\n }\n | {\n tokenIn: Address;\n tokenOut: Address;\n amountIn: bigint;\n limitSqrtPrice: bigint;\n }\n | {\n tokenIn: Address;\n tokenOut: Address;\n amountIn: bigint;\n tickSpacing: number;\n sqrtPriceLimitX96: bigint;\n }\n | {\n tokenIn: Address;\n tokenOut: Address;\n deployer: Address;\n amountIn: bigint;\n limitSqrtPrice: bigint;\n };\n/**\n * Factory class for creating QuoterV2 contract instances with the appropriate ABI\n * based on the protocol type detected from beacon names.\n * \n * @example\n * ```typescript\n * import { createPublicClient, http, parseEther } from 'viem';\n * import { polygon } from 'viem/chains';\n * import { QuoterV2Factory } from './quoter.js';\n * \n * // Create a viem client\n * const client = createPublicClient({\n * chain: polygon,\n * transport: http()\n * });\n * \n * // Configure network with quoter addresses\n * const networkConfig = {\n * quoterV2: {\n * 'QuickSwap': '0x...',\n * 'Uniswap': '0x...',\n * 'ThickV2': '0x...',\n * 'Shadow': '0x...',\n * 'KatanaIntegral': '0x...'\n * }\n * };\n * \n * const factory = new QuoterV2Factory(networkConfig);\n * \n * // Example 1: Uniswap V3 style (fee-based)\n * const { quoter: uniQuoter, params: uniParams } = factory.createQuoterWithParams('uniswap', client, {\n * tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n * tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n * amountIn: parseEther('1'),\n * fee: 3000,\n * sqrtPriceLimitX96: 0n\n * });\n * \n * // Example 2: QuickSwap (Algebra style)\n * const { quoter: quickQuoter, params: quickParams } = factory.createQuoterWithParams('quickswap', client, {\n * tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n * tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n * amountIn: parseEther('1'),\n * limitSqrtPrice: 0n\n * });\n * \n * // Example 3: Thick V2 (tick spacing)\n * const { quoter: thickQuoter, params: thickParams } = factory.createQuoterWithParams('thickv2', client, {\n * tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n * tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n * amountIn: parseEther('1'),\n * tickSpacing: 60,\n * sqrtPriceLimitX96: 0n\n * });\n * \n * // Example 4: Katana Integral (with deployer)\n * const { quoter: katanaQuoter, params: katanaParams } = factory.createQuoterWithParams('katanaintegral', client, {\n * tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n * tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n * amountIn: parseEther('1'),\n * deployer: '0x...',\n * limitSqrtPrice: 0n\n * });\n * \n * // Use the quoter contracts\n * const uniResult = await uniQuoter.read.quoteExactInputSingle([uniParams]);\n * const quickResult = await quickQuoter.read.quoteExactInputSingle([quickParams]);\n * const thickResult = await thickQuoter.read.quoteExactInputSingle([thickParams]);\n * const katanaResult = await katanaQuoter.read.quoteExactInputSingle([katanaParams]);\n * ```\n */\nexport class QuoterV2Factory {\n private networkConfig: NetworkConfig;\n\n constructor(networkConfig: NetworkConfig) {\n this.networkConfig = networkConfig;\n }\n\n /**\n * Creates quote parameters for the quoteExactInputSingle function based on the protocol type.\n * \n * @param beaconName - The beacon identifier to determine the protocol type\n * @param params - The input parameters for the quote\n * @returns Formatted parameters object for the specific protocol's quoteExactInputSingle function\n * @throws Error if protocol type is not supported\n * \n * @example\n * ```typescript\n * const factory = new QuoterV2Factory(networkConfig);\n * \n * // For Uniswap V3\n * const uniParams = factory.getQuoteParams('uniswap', {\n * tokenIn: '0x...',\n * tokenOut: '0x...',\n * amountIn: parseEther('1'),\n * fee: 3000,\n * sqrtPriceLimitX96: 0n\n * });\n * \n * // For QuickSwap (Algebra)\n * const quickParams = factory.getQuoteParams('quickswap', {\n * tokenIn: '0x...',\n * tokenOut: '0x...',\n * amountIn: parseEther('1'),\n * limitSqrtPrice: 0n\n * });\n * ```\n */\n getQuoteParams(protocol: Protocol, params: QuoteParams) {\n // Validate parameters first\n validateQuoteParams(protocol, params);\n \n if (!protocol) {\n throw Error('Protocol not found');\n }\n // Check for Algebra Integral v2.1 vaults (newer version with deployer)\n if (this.isAlgebraIntegral21Vault(protocol)) {\n const p = params as AlgebraIntegral21QuoteParams;\n return {\n tokenIn: p.tokenIn,\n tokenOut: p.tokenOut,\n deployer: p.deployer,\n amountIn: p.amountIn,\n limitSqrtPrice: p.limitSqrtPrice || 0n\n };\n }\n\n // Check for Shadow protocol vaults\n if (isShadowProtocol(protocol)) {\n const p = params as ShadowQuoteParams;\n return {\n tokenIn: p.tokenIn,\n tokenOut: p.tokenOut,\n amountIn: p.amountIn,\n tickSpacing: p.tickSpacing,\n sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n };\n }\n\n // Check for Algebra Integral vaults (older version)\n if (isAlgebraIntegralProtocol(protocol)) {\n const p = params as AlgebraQuoteParams;\n return {\n tokenIn: p.tokenIn,\n tokenOut: p.tokenOut,\n amountIn: p.amountIn,\n limitSqrtPrice: p.limitSqrtPrice || 0n\n };\n }\n\n // Check for Algebra-based protocols (QuickSwap, etc.)\n if (protocol && isAlgebraProtocol(protocol)) {\n const p = params as AlgebraQuoteParams;\n return {\n tokenIn: p.tokenIn,\n tokenOut: p.tokenOut,\n amountIn: p.amountIn,\n limitSqrtPrice: p.limitSqrtPrice || 0n\n };\n }\n\n // Check for Thick V2 protocols\n if (isThickV2Protocol(protocol)) {\n const p = params as ThickQuoteParams;\n return {\n tokenIn: p.tokenIn,\n tokenOut: p.tokenOut,\n amountIn: p.amountIn,\n tickSpacing: p.tickSpacing,\n sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n };\n }\n\n // Default to Uniswap V3 style (fee-based)\n const p = params as UniswapQuoteParams;\n return {\n tokenIn: p.tokenIn,\n tokenOut: p.tokenOut,\n amountIn: p.amountIn,\n fee: p.fee,\n sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n };\n }\n\n /**\n * Creates a QuoterV2 contract instance with the appropriate ABI for the given beacon.\n * \n * @param beaconName - The beacon identifier to determine the protocol type\n * @param client - The viem client for contract interactions\n * @returns A viem contract instance with the appropriate ABI\n * @throws Error if quoter address is not found for the protocol\n */\n createQuoterV2(protocol: Protocol, client: PublicClient) {\n const quoterV2Address = this.getQuoterV2Address(protocol);\n\n if (!quoterV2Address) {\n throw new Error(`QuoterV2 address not found for protocol: ${protocol}`);\n }\n\n const abi = this.getQuoterAbi(protocol);\n \n return getContract({\n address: quoterV2Address as Address,\n abi,\n client\n });\n }\n\n /**\n * Convenience function that creates both the quoter contract and properly formatted quote parameters.\n * \n * @param beaconName - The beacon identifier to determine the protocol type\n * @param client - The viem client for contract interactions\n * @param params - The input parameters for the quote\n * @returns Object containing the quoter contract and formatted parameters\n * @throws Error if quoter address is not found for the protocol\n * \n * @example\n * ```typescript\n * const factory = new QuoterV2Factory(networkConfig);\n * \n * const { quoter, params } = factory.createQuoterWithParams('quickswap', client, {\n * tokenIn: '0x...',\n * tokenOut: '0x...',\n * amountIn: parseEther('1'),\n * limitSqrtPrice: 0n\n * });\n * \n * // Use directly\n * const result = await quoter.read.quoteExactInputSingle([params]);\n * ```\n */\n createQuoterWithParams(protocol: Protocol, client: PublicClient, params: QuoteParams) {\n const quoter = this.createQuoterV2(protocol, client);\n const formattedParams = this.getQuoteParams(protocol, params);\n \n return {\n quoter,\n params: formattedParams\n };\n }\n\n /**\n * Gets the appropriate QuoterV2 ABI based on the beacon name and protocol.\n * \n * @param protocol - The detected protocol type\n * @returns The appropriate ABI array\n */\n public getQuoterAbi(protocol: Protocol | null): QuoterV2ABI {\n\n if (!protocol) {\n throw Error('Protocol not avaiable')\n }\n // Check for Algebra Integral v2.1 vaults (newer version)\n if (this.isAlgebraIntegral21Vault(protocol)) {\n return QuoterV2AlgebgraIntegral21;\n }\n\n // Check for Shadow protocol vaults\n if (isShadowProtocol(protocol)) {\n return QuoterV2Shadow;\n }\n\n // Check for Algebra Integral vaults (older version)\n if (isAlgebraIntegralProtocol(protocol)) {\n return QuoterV2AlgebgraIntegral;\n }\n\n // Check for Lynex protocol (special case)\n if (protocol === Protocol.Lynex) {\n // Note: Lynex currently uses the same ABI as QuickSwap in this implementation\n // If Lynex has a different ABI, add it to the ABIs in quoter.ts as QuoterV2Lynex\n // and import it at the top of this file\n return QuickSwapQuoterV2;\n }\n\n // Check for Algebra-based protocols\n if (protocol && isAlgebraProtocol(protocol)) {\n return QuickSwapQuoterV2;\n }\n\n // Check for Thick V2 protocols\n if (isThickV2Protocol(protocol)) {\n return QuoterV2Thick;\n }\n\n // Default to standard Uniswap V3 QuoterV2 ABI\n return UniswapV3QuoterABI;\n }\n\n /**\n * Gets the QuoterV2 address for the given protocol from the network configuration.\n * \n * @param protocol - The protocol type\n * @returns The quoter address or undefined if not found\n */\n public getQuoterV2Address(protocol: Protocol | null): string | undefined {\n\n if (!protocol) {\n return undefined;\n }\n const contractAddresses = getProtocolContractAddresses(protocol, this.networkConfig.name, 'QuoterV2')\n\n if (!protocol || !contractAddresses) {\n return undefined;\n }\n return contractAddresses.quoterV2Address;\n }\n\n /**\n * Checks if the beacon represents an Algebra Integral v2.1 vault.\n * \n * @param beaconName - The beacon identifier\n * @returns True if it's an Algebra Integral v2.1 vault\n */\n private isAlgebraIntegral21Vault(protocol: Protocol): boolean {\n return protocol === Protocol.KatanaIntegral;\n }\n\n \n}\n\n/**\n * Helper function to get QuoterV2 address for a protocol from network config.\n * \n * @param protocol - The protocol to get the quoter address for\n * @param networkConfig - The network configuration object\n * @returns The quoter address or undefined if not found\n * \n * @example\n * ```typescript\n * const quoterAddress = getQuoterV2Address(Protocol.QuickSwap, networkConfig);\n * if (quoterAddress) {\n * // Use the quoter address\n * }\n * ```\n */\n\n/**\n * Type guard to check if parameters are for Uniswap V3 style quoter\n */\nexport function isUniswapQuoteParams(params: QuoteParams): params is UniswapQuoteParams {\n return 'fee' in params;\n}\n\n/**\n * Type guard to check if parameters are for Algebra style quoter\n */\nexport function isAlgebraQuoteParams(params: QuoteParams): params is AlgebraQuoteParams {\n return 'limitSqrtPrice' in params ;\n}\n\n/**\n * Type guard to check if parameters are for Thick V2 style quoter\n */\nexport function isThickQuoteParams(params: QuoteParams): params is ThickQuoteParams {\n return 'tickSpacing' in params && 'sqrtPriceLimitX96' in params;\n}\n\n/**\n * Type guard to check if parameters are for Algebra Integral v2.1 style quoter\n */\nexport function isAlgebraIntegral21QuoteParams(params: QuoteParams): params is AlgebraIntegral21QuoteParams {\n return 'deployer' in params;\n}\n\n/**\n * Type guard to check if parameters are for Shadow style quoter\n */\nexport function isShadowQuoteParams(params: QuoteParams): params is ShadowQuoteParams {\n return 'tickSpacing' in params && 'sqrtPriceLimitX96' in params;\n}\n\n/**\n * Validates quote parameters based on the protocol type detected from beacon name\n * \n * @param beaconName - The beacon identifier to determine the protocol type\n * @param params - The parameters to validate\n * @throws Error if parameters don't match the expected protocol type\n */\nexport function validateQuoteParams(protocol: Protocol, params: QuoteParams): void {\n if (!protocol) {\n throw Error('Protocol not found');\n }\n \n // Validate required fields\n if (!params.tokenIn || !params.tokenOut || !params.amountIn) {\n throw new Error('Missing required parameters: tokenIn, tokenOut, and amountIn are required');\n }\n\n // Check for Algebra Integral v2.1 vaults (newer version with deployer)\n if (protocol === Protocol.KatanaIntegral) {\n if (!isAlgebraIntegral21QuoteParams(params)) {\n throw new Error('AlgebraIntegral21QuoteParams required: must include deployer field');\n }\n return;\n }\n\n // Check for Shadow protocol vaults\n if (protocol && isShadowProtocol(protocol)) {\n if (!isShadowQuoteParams(params) && !isThickQuoteParams(params)) {\n throw new Error('ShadowQuoteParams required: must include tickSpacing field');\n }\n return;\n }\n\n // Check for Thick V2 protocols\n if (protocol && isThickV2Protocol(protocol)) {\n if (!isThickQuoteParams(params)) {\n throw new Error('ThickQuoteParams required: must include tickSpacing field');\n }\n return;\n }\n\n // Check for Algebra-based protocols\n if (protocol && isAlgebraProtocol(protocol)) {\n if (!isAlgebraQuoteParams(params)) {\n throw new Error('AlgebraQuoteParams required: limitSqrtPrice field expected');\n }\n return;\n }\n\n // Default to Uniswap V3 style validation\n if (!isUniswapQuoteParams(params)) {\n throw new Error('UniswapQuoteParams required: must include fee field');\n }\n}\n\n/**\n * Gets the expected parameter type for a given beacon name\n * \n * @param beaconName - The beacon identifier\n * @returns String describing the expected parameter type\n */\nexport function getExpectedParamType(beaconName: string): string {\n const protocol = getProtocolTypeByBeacon(beaconName);\n \n if (beaconName.toLowerCase().includes('katanaintegral') || protocol === Protocol.KatanaIntegral) {\n return 'AlgebraIntegral21QuoteParams (requires: tokenIn, tokenOut, amountIn, deployer, limitSqrtPrice?)';\n }\n \n if (protocol && isShadowProtocol(protocol)) {\n return 'ShadowQuoteParams (requires: tokenIn, tokenOut, amountIn, tickSpacing, sqrtPriceLimitX96?)';\n }\n \n if (protocol && isThickV2Protocol(protocol)) {\n return 'ThickQuoteParams (requires: tokenIn, tokenOut, amountIn, tickSpacing, sqrtPriceLimitX96?)';\n }\n \n if (protocol && isAlgebraProtocol(protocol)) {\n return 'AlgebraQuoteParams (requires: tokenIn, tokenOut, amountIn, limitSqrtPrice?)';\n }\n \n return 'UniswapQuoteParams (requires: tokenIn, tokenOut, amountIn, fee, sqrtPriceLimitX96?)';\n} ","import { Chain } from '../chain.js';\n\nexport interface StabilityVaultInfo {\n beaconContract: string;\n peripheryAddress: Partial<{ [chain in Chain]: string }>;\n subgraphUrl: Partial<{ [chain in Chain]: string }>;\n beaconContractSaga?: string;\n}\n\n\nexport const stabilityVaultsConfig: StabilityVaultInfo = {\n beaconContract: 'TestStabilityVault',\n beaconContractSaga: 'StabilityTest',\n peripheryAddress: {\n [Chain.Arbitrum]: '0xAc9d57AdaDC3593A8BB66729C7d2436dA8A13E7d',\n [Chain.Saga]: '0x2292d6ad79e932ae80ee6e03607341301705742d',\n },\n subgraphUrl: {\n [Chain.Arbitrum]: 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-arbitrum/preprod/gn',\n [Chain.Saga]: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-saga-evm-stability/prod/gn',\n },\n};\n\n/**\n * Get the periphery address for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The periphery address for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsPeripheryAddress(chain: Chain): string | undefined {\n return stabilityVaultsConfig.peripheryAddress[chain];\n}\n\n/**\n * Get the subgraph URL for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The subgraph URL for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsSubgraphUrl(chain: Chain): string | undefined {\n return stabilityVaultsConfig.subgraphUrl[chain];\n}\n\n","import { Address } from 'viem';\nimport { VaultEdge, VaultNode, VaultsConnection } from '../base/VaultClient.js';\nimport { getProtocolTypeByBeacon } from '../const/index.js';\nimport { Protocol } from '../const/chain.js';\nimport {\n LpPriceResponse,\n SubgraphResponse,\n SubgraphVaultDetails,\n SubgraphVaultDetailsWithLpData,\n SubgraphVaultPosition,\n VaultFetchOptions,\n} from './subgraph-types.js';\n\n/**\n * GraphQL queries for fetching vault data from Steer subgraphs\n */\nconst FIND_ALL_VAULTS = (batchSize: number = 1000, timestamp?: string) => {\n if (timestamp) {\n return `query {\n vaults(first: ${batchSize}, where: { createdAt_lte: \"${timestamp}\" }, orderBy: createdAt, orderDirection: desc) {\n id\n name\n token0\n token1\n pool\n weeklyFeeAPR\n token0Symbol\n token0Decimals\n token1Symbol\n token1Decimals\n totalValueLockedToken0\n totalValueLockedToken1\n token0Balance\n token1Balance\n totalLPTokensIssued\n createdAt\n feeTier\n strategyToken {\n id\n name\n creator {\n id\n }\n admin\n executionBundle\n }\n positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n id\n upperTick\n lowerTick\n relativeWeight\n }\n fees0\n fees1\n beaconName\n payloadIpfs\n deployer\n }\n }`;\n }\n\n return `query {\n vaults(first: ${batchSize}, orderBy: createdAt, orderDirection: desc) {\n id\n name\n token0\n token1\n pool\n weeklyFeeAPR\n token0Symbol\n token0Decimals\n token1Symbol\n token1Decimals\n totalValueLockedToken0\n totalValueLockedToken1\n token0Balance\n token1Balance\n totalLPTokensIssued\n createdAt\n feeTier\n strategyToken {\n id\n name\n creator {\n id\n }\n admin\n executionBundle\n }\n positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n id\n upperTick\n lowerTick\n relativeWeight\n }\n fees0\n fees1\n beaconName\n payloadIpfs\n deployer\n }\n }`;\n};\n\nconst FIND_ALL_VAULTS_BY_PROTOCOL = (\n batchSize: number = 1000,\n timestamp?: string,\n beaconNames?: string[]\n) => {\n if (!beaconNames || beaconNames.length === 0) {\n throw new Error('At least one beacon name is required');\n }\n\n // Format beaconNames for GraphQL _in filter\n const beaconNamesList = beaconNames.map((b) => `\"${b}\"`).join(', ');\n const beaconNameFilter = `beaconName_in: [${beaconNamesList}]`;\n\n if (timestamp) {\n return `query {\n vaults(first: ${batchSize}, where: { createdAt_lte: \"${timestamp}\", ${beaconNameFilter} }, orderBy: createdAt, orderDirection: desc) {\n id\n name\n token0\n token1\n pool\n weeklyFeeAPR\n token0Symbol\n token0Decimals\n token1Symbol\n token1Decimals\n totalValueLockedToken0\n totalValueLockedToken1\n token0Balance\n token1Balance\n totalLPTokensIssued\n createdAt\n feeTier\n positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n id\n upperTick\n lowerTick\n relativeWeight\n }\n fees0\n fees1\n strategyToken {\n id\n name\n creator {\n id\n }\n admin\n executionBundle\n }\n beaconName\n payloadIpfs\n deployer\n }\n }`;\n }\n\n return `query {\n vaults(first: ${batchSize}, where: { ${beaconNameFilter} }, orderBy: createdAt, orderDirection: desc) {\n id\n name\n token0\n token1\n pool\n weeklyFeeAPR\n token0Symbol\n token0Decimals\n token1Symbol\n token1Decimals\n totalValueLockedToken0\n totalValueLockedToken1\n token0Balance\n token1Balance\n totalLPTokensIssued\n createdAt\n feeTier\n strategyToken {\n id\n name\n creator {\n id\n }\n admin\n executionBundle\n }\n positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n id\n upperTick\n lowerTick\n relativeWeight\n }\n fees0\n fees1\n beaconName\n payloadIpfs\n deployer\n }\n }`;\n};\n\n/**\n * Utility class for fetching vault data from Steer subgraphs\n */\nexport class SubgraphVaultClient {\n private readonly SENTIO_API_KEY =\n typeof process !== 'undefined' ? process.env?.SENTIO_API_KEY : undefined;\n\n /**\n * Transform subgraph vault data to match VaultClient interface\n */\n private transformSubgraphVaultToVaultNode(\n vault: SubgraphVaultDetailsWithLpData,\n chainId: number,\n aprMap: Map<string, number>\n ): VaultNode {\n const feeApr = aprMap.get(vault.id) ? aprMap.get(vault.id) : undefined;\n\n const tickRange = this.computeTickRange(vault.positions ?? []);\n\n return {\n id: vault.id,\n chainId,\n vaultAddress: vault.id,\n protocol: getProtocolTypeByBeacon(vault.beaconName) || Protocol.Uniswap,\n beaconName: vault.beaconName,\n protocolBaseType: this.getProtocolBaseType(vault.beaconName),\n name: vault.name || '',\n feeApr: feeApr ? parseFloat(feeApr.toString()) : undefined,\n stakingApr: undefined,\n merklApr: undefined,\n positions: (vault.positions ?? []).map((p) => ({\n id: p.id,\n upperTick: parseInt(p.upperTick, 10),\n lowerTick: parseInt(p.lowerTick, 10),\n relativeWeight: p.relativeWeight,\n })),\n tickRange,\n fees:\n vault.fees0 !== undefined && vault.fees1 !== undefined\n ? { fees0: vault.fees0, fees1: vault.fees1 }\n : undefined,\n pool: {\n id: vault.pool,\n poolAddress: vault.pool,\n feeTier: vault.feeTier,\n tick: undefined,\n liquidity: undefined,\n volumeUSD: undefined,\n totalValueLockedUSD: vault.lpPriceData?.vault.usd.totalValue?.toString(),\n },\n token0: {\n id: vault.token0,\n symbol: vault.token0Symbol,\n name: vault.token0Symbol,\n decimals: parseInt(vault.token0Decimals),\n address: vault.token0,\n chainId,\n },\n token1: {\n id: vault.token1,\n symbol: vault.token1Symbol,\n name: vault.token1Symbol,\n decimals: parseInt(vault.token1Decimals),\n address: vault.token1,\n chainId,\n },\n };\n }\n\n /**\n * Compute the tick range across all vault positions.\n * Returns the minimum lowerTick and maximum upperTick, giving the full\n * span of liquidity currently deployed by the vault strategy.\n */\n private computeTickRange(\n positions: SubgraphVaultPosition[]\n ): VaultNode['tickRange'] {\n if (!positions.length) return undefined;\n\n let minLowerTick = Infinity;\n let maxUpperTick = -Infinity;\n\n for (const pos of positions) {\n const lower = parseInt(pos.lowerTick, 10);\n const upper = parseInt(pos.upperTick, 10);\n if (!isNaN(lower) && lower < minLowerTick) minLowerTick = lower;\n if (!isNaN(upper) && upper > maxUpperTick) maxUpperTick = upper;\n }\n\n if (minLowerTick === Infinity || maxUpperTick === -Infinity) return undefined;\n\n return { minLowerTick, maxUpperTick };\n }\n\n /**\n * Get protocol base type from beacon name\n */\n private getProtocolBaseType(beaconName: string): string {\n if (beaconName.includes('uniswap')) {\n return 'UniswapV3';\n }\n const protocol = getProtocolTypeByBeacon(beaconName);\n if (protocol) {\n return protocol === Protocol.Blackhole ? 'Algebra Integral' : protocol;\n }\n if (beaconName.includes('Stryke')) {\n return 'Stryke';\n }\n return 'UniswapV3'; // Default\n }\n\n /**\n * Create a mock LP price response for vaults without LP data\n */\n private createMockLpPriceData(vault: SubgraphVaultDetails): LpPriceResponse {\n return {\n vault: {\n address: vault.id as Address,\n token0: vault.token0 as Address,\n token1: vault.token1 as Address,\n balances: {\n token0: vault.token0Balance,\n token1: vault.token1Balance,\n totalSupply: vault.totalLPTokensIssued,\n token0Formatted: vault.token0Balance,\n token1Formatted: vault.token1Balance,\n totalSupplyFormatted: vault.totalLPTokensIssued,\n },\n usd: {\n lpValue: 0,\n totalValue: 0,\n token0Price: 0,\n token0Value: 0,\n token1Price: 0,\n token1Value: 0,\n },\n token0Symbol: vault.token0Symbol,\n token1Symbol: vault.token1Symbol,\n token0Decimals: vault.token0Decimals,\n token1Decimals: vault.token1Decimals,\n },\n routes: {\n token0ToUsd: [],\n token1ToUsd: [],\n },\n };\n }\n\n /**\n * Fetch vault data from subgraph\n */\n public async getAllVaultsFromSubgraph(\n options: VaultFetchOptions\n ): Promise<SubgraphVaultDetailsWithLpData[]> {\n const { subgraphUrl, showCurrentProtocol = false, beaconNames, batchSize = 1000 } = options;\n\n const allVaults: SubgraphVaultDetailsWithLpData[] = [];\n\n try {\n // First get the latest vault to get the most recent timestamp\n const latestVaultResponse = await fetch(subgraphUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(subgraphUrl.includes('sentio') && this.SENTIO_API_KEY\n ? { 'api-key': this.SENTIO_API_KEY }\n : {}),\n },\n body: JSON.stringify({\n query: !showCurrentProtocol\n ? FIND_ALL_VAULTS(1)\n : FIND_ALL_VAULTS_BY_PROTOCOL(1, undefined, beaconNames),\n variables: {},\n }),\n });\n\n const latestVaultData: SubgraphResponse<SubgraphVaultDetails> =\n await latestVaultResponse.json();\n let lastTimestamp = latestVaultData?.data?.vaults?.[0]?.createdAt;\n\n if (!lastTimestamp) {\n return [];\n }\n\n let hasMoreData = true;\n while (hasMoreData) {\n const response = await fetch(subgraphUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(subgraphUrl.includes('sentio') && this.SENTIO_API_KEY\n ? { 'api-key': this.SENTIO_API_KEY }\n : {}),\n },\n body: JSON.stringify({\n query: !showCurrentProtocol\n ? FIND_ALL_VAULTS(batchSize, lastTimestamp)\n : FIND_ALL_VAULTS_BY_PROTOCOL(batchSize, lastTimestamp, beaconNames),\n variables: {},\n }),\n });\n\n const responseData: SubgraphResponse<SubgraphVaultDetails> = await response.json();\n const vaults = responseData?.data?.vaults || [];\n\n if (!vaults.length) {\n hasMoreData = false;\n continue;\n }\n\n // Filter out duplicates based on vault ID\n const newVaults = vaults.filter(\n (vault: SubgraphVaultDetails) => !allVaults.some((existing) => existing.id === vault.id)\n );\n\n if (!newVaults.length) {\n hasMoreData = false;\n continue;\n }\n\n // For now, attach mock LP data to each vault\n // In a real implementation, you would fetch LP price data here\n const vaultsWithLpData: SubgraphVaultDetailsWithLpData[] = newVaults.map((vault) => ({\n ...vault,\n lpPriceData: this.createMockLpPriceData(vault),\n }));\n\n allVaults.push(...vaultsWithLpData);\n const lastVaultTimestamp = vaults[vaults.length - 1]?.createdAt;\n if (!lastVaultTimestamp) {\n hasMoreData = false;\n continue;\n }\n lastTimestamp = lastVaultTimestamp;\n }\n\n // Filter deprecated vaults if needed\n // Note: In a real implementation, you would fetch deprecation data\n // For now, we return all vaults\n return allVaults;\n } catch (error) {\n console.error('Error fetching vaults from subgraph:', error);\n throw error;\n }\n }\n\n /**\n * Transform subgraph vault data to VaultsConnection format\n */\n public transformToVaultsConnection(\n vaults: SubgraphVaultDetailsWithLpData[],\n chainId: number,\n first: number = 50,\n aprMap: Map<string, number>,\n after?: string | null\n ): VaultsConnection {\n // Sort vaults by creation time (newest first)\n const sortedVaults = vaults.sort((a, b) => parseInt(b.createdAt) - parseInt(a.createdAt));\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = sortedVaults.findIndex((vault) => vault.id === after);\n startIndex = afterIndex + 1;\n }\n\n const paginatedVaults = sortedVaults.slice(startIndex, startIndex + first);\n const hasNextPage = startIndex + first < sortedVaults.length;\n const endCursor =\n paginatedVaults.length > 0 ? paginatedVaults[paginatedVaults.length - 1].id : null;\n\n const edges: VaultEdge[] = paginatedVaults.map((vault) => ({\n cursor: vault.id,\n node: this.transformSubgraphVaultToVaultNode(vault, chainId, aprMap),\n }));\n\n return {\n edges,\n pageInfo: {\n hasNextPage,\n endCursor,\n },\n totalCount: sortedVaults.length,\n };\n }\n}\n","import { Campaign, createClient } from '@steerprotocol/api-sdk';\nimport type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { formatUnits } from 'viem';\nimport { SteerResponse } from '../types.js';\nimport { getSubgraphUrlByChainId } from '../const/subgraph.js';\n\n/**\n * Represents a node in the claim proof data structure\n * @property chainId - The ID of the chain where the claim exists\n * @property lastBlockUpdatedTo - The last block number this claim was updated to\n * @property user - The address of the user who can claim\n * @property campaignId - The ID of the campaign this claim belongs to\n * @property amount - The claimable amount as a string (may include decimals)\n * @property proof - The merkle proof array required for claiming\n */\nexport interface ClaimProofNode {\n chainId: number;\n lastBlockUpdatedTo: number;\n user: string;\n campaignId: number;\n amount: string;\n proof: readonly string[];\n}\n\nexport interface ClaimProofEdge {\n node: ClaimProofNode;\n cursor: string;\n}\n\n/**\n * Represents a historical claim reward record\n * @property id - Unique identifier for the claim\n * @property user - Address of the user who claimed\n * @property amount - Amount that was claimed (may include decimals)\n * @property campaign - Campaign identifier\n * @property chainId - Chain ID where the claim occurred\n * @property timestamp - Unix timestamp of when the claim occurred\n */\nexport interface ClaimRewardNode {\n id: string;\n user: string;\n amount: string;\n campaign: string;\n chainId: number;\n timestamp: number;\n}\n\nexport interface ClaimRewardEdge {\n cursor: string;\n node: ClaimRewardNode;\n}\n\n/**\n * Pagination information for paginated queries\n * @property hasNextPage - Whether there are more results available\n * @property endCursor - Cursor to use for fetching next page, if available\n */\nexport interface PageInfo {\n hasNextPage: boolean;\n endCursor: string | null | undefined;\n}\n\n/**\n * Connection type for claim rewards, following the Relay specification\n * @property edges - Array of claim reward records with cursors\n * @property pageInfo - Pagination information\n * @property totalCount - Total number of records available\n */\nexport interface ClaimRewardsConnection {\n edges: readonly ClaimRewardEdge[];\n pageInfo: PageInfo;\n totalCount: number;\n}\n\nexport interface ClaimProofsPageInfo {\n hasNextPage: boolean;\n endCursor?: string;\n}\n\nexport interface ClaimProofsResponse {\n totalCount: number;\n edges: readonly ClaimProofEdge[];\n pageInfo: ClaimProofsPageInfo;\n}\n\nexport interface SmartRewarderContract {\n chainId: number;\n address: string;\n}\n\n/**\n * Parameters required for claiming rewards\n * @property users - Array of user addresses who are claiming\n * @property campaignIds - Array of campaign IDs corresponding to each claim\n * @property amounts - Array of amounts to claim\n * @property proofs - Array of merkle proofs for verification\n * @property rewarderAddress - Address of the smart rewarder contract\n */\nexport interface ClaimRewardParams {\n users: readonly Address[];\n campaignIds: readonly bigint[];\n amounts: readonly bigint[];\n proofs: readonly (readonly `0x${string}`[])[];\n rewarderAddress: Address;\n}\n\n/**\n * Represents a reward balance with both native and formatted values\n * @property formatted - Human-readable string format with proper decimals\n * @property native - Raw bigint value\n */\nexport interface RewardBalance {\n formatted: string;\n native: bigint;\n}\n\n/**\n * Comprehensive summary of a user's reward status\n * @property totalEarned - Total rewards earned (claimed + claimable)\n * @property totalClaimed - Total rewards already claimed\n * @property claimable - Rewards available to claim\n */\nexport interface RewardSummary {\n totalEarned: RewardBalance;\n totalClaimed: RewardBalance;\n claimable: RewardBalance;\n}\n\nexport abstract class SmartRewards {\n protected readonly client: ReturnType<typeof createClient>;\n protected readonly publicClient: PublicClient;\n protected readonly walletClient: WalletClient;\n\n constructor(\n client: ReturnType<typeof createClient>,\n publicClient: PublicClient,\n walletClient: WalletClient\n ) {\n this.client = client;\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n }\n\n public async getCampaigns(chainId: number): Promise<SteerResponse<Campaign[]>> {\n const campaigns = await this.client.campaigns({\n filter: {\n chainId,\n },\n });\n\n return {\n data: (campaigns.data?.campaigns.edges.map((edge) => ({\n ...edge.node,\n vaults: edge.node.vaults?.map(vault => ({\n ...vault,\n beaconName: vault.beaconName || '',\n name: vault.name || '',\n protocol: vault.protocol || '',\n protocolBaseType: vault.protocolBaseType || '',\n targetProtocol: vault.targetProtocol || ''\n })) || []\n })) || []) as Campaign[],\n status: campaigns.status,\n success: true,\n };\n }\n\n /**\n * Retrieves campaigns associated with a specific pool address\n * @param poolAddress - The address of the pool to get campaigns for\n * @param chainId - Chain ID where the pool exists\n * @returns Promise resolving to an array of campaigns associated with the pool\n * \n * @example\n * ```typescript\n * // Get campaigns for a pool on a specific chain\n * const campaigns = await smartRewards.campaignsByPool('0x...', 1);\n * ```\n */\n public async campaignsByPool(\n poolAddress: string,\n chainId: number\n ): Promise<SteerResponse<Campaign[]>> {\n try {\n const campaigns = await this.client.campaignsByPool({\n pool: poolAddress,\n chainId\n });\n\n return {\n data: (campaigns.data?.campaignsByPool?.map(campaign => campaign ? {\n ...campaign,\n vaults: campaign.vaults?.map(vault => vault ? {\n ...vault,\n beaconName: vault.beaconName || '',\n name: vault.name || '',\n protocol: vault.protocol || '',\n protocolBaseType: vault.protocolBaseType || '',\n targetProtocol: vault.targetProtocol || ''\n } : null).filter((v): v is NonNullable<typeof v> => v !== null) || []\n } : null).filter((c): c is NonNullable<typeof c> => c !== null) || []) as Campaign[],\n status: campaigns.status,\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 * Retrieves claim proofs for a user that can be used to claim rewards\n * @param user - Address of the user to get proofs for\n * @param chainId - Chain ID where the claims exist\n * @param campaignId - Optional campaign ID to filter claims\n * @returns Promise resolving to claim proof data with pagination support\n */\n public async getClaimProofs(\n user: Address,\n chainId: number,\n campaignId?: number\n ): Promise<SteerResponse<ClaimProofsResponse>> {\n try {\n const normalizedUser = user.toLowerCase() as Address;\n const response = await this.client.claimProofs({\n user: normalizedUser,\n filter: {\n chainId,\n campaignId\n }\n });\n\n if (!response.data?.claimProofs) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n const transformedResponse: ClaimProofsResponse = {\n totalCount: response.data.claimProofs.totalCount,\n pageInfo: {\n hasNextPage: response.data.claimProofs.pageInfo.hasNextPage,\n endCursor: response.data.claimProofs.pageInfo.endCursor || undefined\n },\n edges: response.data.claimProofs.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n ...edge.node,\n proof: edge.node.proof?.filter((p): p is string => p !== null) || []\n }\n }))\n };\n\n return {\n data: transformedResponse,\n status: response.status,\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 * Retrieves historical claim data for a specific pool\n * @param chainId - Chain ID where the pool exists\n * @param pool - Address or identifier of the pool\n * @param user - Optional user address to filter claims\n * @returns Promise resolving to paginated claim history data\n * \n * @example\n * ```typescript\n * // Get all claims for a pool\n * const allClaims = await smartRewards.getClaimRewardsByPool(1, poolAddress);\n * \n * // Get claims for a specific user in a pool\n * const userClaims = await smartRewards.getClaimRewardsByPool(1, poolAddress, userAddress);\n * ```\n */\n public async getClaimedRewardsByPool(\n chainId: number,\n pool: string,\n user?: Address\n ): Promise<SteerResponse<ClaimRewardsConnection>> {\n try {\n const normalizedPool = pool.toLowerCase();\n const normalizedUser = user ? user.toLowerCase() as Address : undefined;\n \n const response = await this.client.claimRewards({\n poolId: normalizedPool,\n chainId,\n filter: normalizedUser ? { user: normalizedUser } : undefined\n });\n\n if (!response.data?.claimRewards) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n const transformedResponse: ClaimRewardsConnection = {\n totalCount: response.data.claimRewards.totalCount,\n pageInfo: {\n hasNextPage: response.data.claimRewards.pageInfo.hasNextPage,\n endCursor: response.data.claimRewards.pageInfo.endCursor\n },\n edges: response.data.claimRewards.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n ...edge.node,\n timestamp: Number(edge.node.timestamp)\n }\n }))\n };\n\n return {\n data: transformedResponse,\n status: response.status,\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\n /**\n * Gets a comprehensive summary of a user's reward status\n * @param user - Address of the user\n * @param chainId - Chain ID to check rewards on\n * @param campaignId - Optional campaign ID to filter rewards\n * @param decimals - Number of decimals for formatting (default: 18)\n * @returns Promise resolving to reward summary with both native and formatted values\n * \n * @example\n * ```typescript\n * const summary = await smartRewards.getRewardSummary(userAddress, chainId);\n * console.log('Total earned:', summary.data.totalEarned.formatted);\n * console.log('Available to claim:', summary.data.claimable.formatted);\n * ```\n */\n public async getRewardSummary(\n user: Address,\n poolAddress: string,\n chainId: number,\n campaignId: number,\n decimals: number = 18\n ): Promise<SteerResponse<RewardSummary>> {\n try {\n // Lowercase addresses\n const normalizedUser = user.toLowerCase() as Address;\n const normalizedPoolAddress = poolAddress.toLowerCase();\n\n // Get claimable rewards\n const claimProofs = await this.getClaimProofs(normalizedUser, chainId, campaignId);\n\n // Filter claim proofs by campaignId for additional safety\n const filteredClaimProofs = claimProofs.data?.edges.filter(\n edge => edge.node.campaignId === campaignId\n ) || [];\n\n const totalAmount = filteredClaimProofs.reduce(\n (sum, edge) => sum + BigInt(edge.node.amount.split('.')[0]),\n 0n\n ) || 0n;\n\n // Get claimed rewards\n const claimedRewards = await this.getClaimedRewardsByPool(chainId, normalizedPoolAddress, normalizedUser);\n\n // Filter claimed rewards by campaign ID\n const filteredClaimedRewards = claimedRewards.data?.edges.filter(\n edge => Number(edge.node.campaign) === campaignId\n ) || [];\n\n const claimedAmount = filteredClaimedRewards.reduce(\n (sum, edge) => sum + BigInt(edge.node.amount.split('.')[0]),\n 0n\n ) || 0n;\n\n // Calculate totals\n const claimableAmount = totalAmount - claimedAmount;\n\n const summary: RewardSummary = {\n totalEarned: {\n native: totalAmount,\n formatted: formatUnits(totalAmount, decimals)\n },\n totalClaimed: {\n native: claimedAmount,\n formatted: formatUnits(claimedAmount, decimals)\n },\n claimable: {\n native: claimableAmount,\n formatted: formatUnits(claimableAmount, decimals)\n }\n };\n\n return {\n data: summary,\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 public async getSmartRewarderContracts(): Promise<SteerResponse<readonly SmartRewarderContract[]>> {\n try {\n const response = await this.client.smartRewarderContracts();\n\n return {\n data: response.data?.smartRewarderContracts || [],\n status: response.status,\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 * Claims rewards from the smart rewarder contract\n * @param params - Parameters required for claiming rewards\n * @returns Promise resolving to transaction hash if successful\n * \n * @remarks\n * This method handles the low-level interaction with the smart contract.\n * For a higher-level interface, consider using {@link claimCampaignRewards} instead.\n * \n * @example\n * ```typescript\n * // Get claim proofs\n * const claimProofs = await smartRewards.getClaimProofs(userAddress, chainId, campaignId);\n * \n * // Get smart rewarder contract\n * const rewarders = await smartRewards.getSmartRewarderContracts();\n * const rewarder = rewarders.data?.find(r => r.chainId === chainId);\n * \n * if (claimProofs.data && rewarder) {\n * // Prepare claim data\n * const claimData = smartRewards.prepareClaimData(claimProofs.data);\n * claimData.rewarderAddress = rewarder.address as Address;\n * \n * // Claim rewards\n * const tx = await smartRewards.claimReward(claimData);\n * }\n * ```\n * \n * @throws Will throw an error if no wallet account is found\n * @throws Will throw an error if contract simulation fails\n */\n public async claimReward(params: ClaimRewardParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n // Normalize addresses\n const normalizedParams = {\n ...params,\n users: params.users.map(user => user.toLowerCase() as Address),\n rewarderAddress: params.rewarderAddress.toLowerCase() as Address\n };\n\n const { request } = await this.publicClient.simulateContract({\n address: normalizedParams.rewarderAddress,\n abi: [{\n type: 'function',\n inputs: [\n { name: 'users', internalType: 'address[]', type: 'address[]' },\n { name: 'campaignIds', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'proofs', internalType: 'bytes32[][]', type: 'bytes32[][]' }\n ],\n name: 'claim',\n outputs: [],\n stateMutability: 'nonpayable'\n }],\n functionName: 'claim',\n args: [\n normalizedParams.users,\n normalizedParams.campaignIds,\n normalizedParams.amounts,\n normalizedParams.proofs\n ],\n account: account[0]\n });\n\n const hash = await this.walletClient.writeContract(request);\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 * Helper function to prepare claim data from claim proofs\n * @param proofs - The claim proofs response from getClaimProofs\n * @returns ClaimRewardParams object ready for use with claimReward\n * \n * @remarks\n * This helper function transforms the claim proofs into the format required by the smart contract.\n * Note that the returned object's rewarderAddress is empty and must be set before using with claimReward.\n * \n * @example\n * ```typescript\n * // Get claim proofs and rewarder contract\n * const proofs = await smartRewards.getClaimProofs(userAddress, chainId);\n * const rewarders = await smartRewards.getSmartRewarderContracts();\n * const rewarder = rewarders.data?.find(r => r.chainId === chainId);\n * \n * if (proofs.data && rewarder) {\n * // Prepare the claim data\n * const claimData = smartRewards.prepareClaimData(proofs.data);\n * \n * // Set the rewarder address (required)\n * claimData.rewarderAddress = rewarder.address as Address;\n * \n * // Now the data is ready for claiming\n * const tx = await smartRewards.claimReward(claimData);\n * }\n * ```\n */\n public prepareClaimData(proofs: ClaimProofsResponse): ClaimRewardParams {\n return {\n users: proofs.edges.map(edge => edge.node.user.toLowerCase() as Address),\n campaignIds: proofs.edges.map(edge => BigInt(edge.node.campaignId)),\n amounts: proofs.edges.map(edge => BigInt(edge.node.amount.split('.')[0])),\n proofs: proofs.edges.map(edge => edge.node.proof as readonly `0x${string}`[]),\n rewarderAddress: '' as Address\n };\n }\n\n /**\n * Convenience function to handle the entire claim process\n * @param userAddress The address of the user claiming rewards\n * @param chainId The chain ID where the campaign exists\n * @param campaignId Optional campaign ID to filter claims\n * @returns Transaction hash if successful, or error details if failed\n */\n public async claimCampaignRewards(\n userAddress: Address,\n chainId: number,\n campaignId?: number\n ): Promise<SteerResponse<Hash>> {\n try {\n const normalizedUser = userAddress.toLowerCase() as Address;\n \n // Get claim proofs\n const claimProofsResponse = await this.getClaimProofs(normalizedUser, chainId, campaignId);\n if (!claimProofsResponse.data || claimProofsResponse.data.edges.length === 0) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'No claim proofs found'\n };\n }\n\n // Filter claim proofs by campaignId if specified\n let filteredClaimProofs = claimProofsResponse.data;\n if (campaignId !== undefined) {\n filteredClaimProofs = {\n ...claimProofsResponse.data,\n edges: claimProofsResponse.data.edges.filter(edge => edge.node.campaignId === campaignId)\n };\n \n // If no matching campaign proofs found after filtering\n if (filteredClaimProofs.edges.length === 0) {\n return {\n data: null,\n status: 400,\n success: false,\n error: `No claim proofs found for campaign ID ${campaignId}`\n };\n }\n }\n\n // Get smart rewarder contract\n const rewarderResponse = await this.getSmartRewarderContracts();\n const rewarder = rewarderResponse.data?.find(r => r.chainId === chainId);\n if (!rewarder) {\n return {\n data: null,\n status: 400,\n success: false,\n error: `No smart rewarder contract found for chain ${chainId}`\n };\n }\n\n // Prepare claim data\n const claimData = this.prepareClaimData(filteredClaimProofs);\n claimData.rewarderAddress = rewarder.address as Address;\n\n // Execute claim\n return await this.claimReward(claimData);\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 claim rewards campaign object with all necessary data for contract interaction\n * @param userAddress The address of the user claiming rewards\n * @param chainId The chain ID where the campaign exists\n * @param campaignId Optional campaign ID to filter claims\n * @returns Promise resolving to an object containing all necessary data for claiming rewards\n * \n * @example\n * ```typescript\n * // Get the prepared claim data\n * const claimData = await smartRewards.prepareClaimRewardsCampaign(userAddress, chainId, campaignId);\n * \n * if (claimData.success) {\n * // Use the data with your own contract interaction methods\n * const { address, abi, functionName, args } = claimData.data;\n * // Execute the contract call using your preferred method\n * }\n * ```\n */\n public async prepareClaimRewardsCampaign(\n userAddress: Address,\n chainId: number,\n campaignId?: number\n ): Promise<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: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [\n readonly Address[],\n readonly bigint[],\n readonly bigint[],\n readonly (readonly `0x${string}`[])[]\n ];\n }>> {\n try {\n const normalizedUser = userAddress.toLowerCase() as Address;\n \n // Get claim proofs\n const claimProofsResponse = await this.getClaimProofs(normalizedUser, chainId, campaignId);\n if (!claimProofsResponse.data || claimProofsResponse.data.edges.length === 0) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'No claim proofs found'\n };\n }\n\n // Filter claim proofs by campaignId if specified\n let filteredClaimProofs = claimProofsResponse.data;\n if (campaignId !== undefined) {\n filteredClaimProofs = {\n ...claimProofsResponse.data,\n edges: claimProofsResponse.data.edges.filter(edge => edge.node.campaignId === campaignId)\n };\n \n // If no matching campaign proofs found after filtering\n if (filteredClaimProofs.edges.length === 0) {\n return {\n data: null,\n status: 400,\n success: false,\n error: `No claim proofs found for campaign ID ${campaignId}`\n };\n }\n }\n\n // Get smart rewarder contract\n const rewarderResponse = await this.getSmartRewarderContracts();\n const rewarder = rewarderResponse.data?.find(r => r.chainId === chainId);\n if (!rewarder) {\n return {\n data: null,\n status: 400,\n success: false,\n error: `No smart rewarder contract found for chain ${chainId}`\n };\n }\n\n // Prepare claim data\n const claimData = this.prepareClaimData(filteredClaimProofs);\n\n // Prepare the complete contract interaction data\n return {\n data: {\n address: rewarder.address as Address,\n abi: [{\n type: 'function',\n inputs: [\n { name: 'users', internalType: 'address[]', type: 'address[]' },\n { name: 'campaignIds', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'proofs', internalType: 'bytes32[][]', type: 'bytes32[][]' }\n ],\n name: 'claim',\n outputs: [],\n stateMutability: 'nonpayable'\n }],\n functionName: 'claim',\n args: [\n claimData.users,\n claimData.campaignIds,\n claimData.amounts,\n claimData.proofs\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 * Checks if a chain is supported by checking if it has a subgraph URL\n * @param chainId The chain ID to check\n * @returns boolean indicating if the chain is supported\n */\n public supportsChain(chainId: number): boolean {\n return getSubgraphUrlByChainId(chainId) !== undefined;\n }\n} ","import type { Client } from 'viem';\nimport { SteerResponse } from '../types.js';\nimport { getSubgraphUrlByChainId } from '../const/index.js';\n\nexport abstract class SubgraphClient {\n protected readonly client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Executes a GraphQL query against the subgraph\n * @param query The GraphQL query string\n * @param variables Optional variables for the query\n * @returns Promise with the query result\n */\n protected async executeSubgraphQuery<T>(\n query: string,\n variables?: Record<string, unknown>\n ): Promise<SteerResponse<T>> {\n const chainId = await this.client.chain?.id;\n \n if (!chainId) {\n throw new Error('No active chain found');\n }\n\n const subgraphUrl = this.getSubgraphUrl(chainId);\n if (!subgraphUrl) {\n throw new Error(`No subgraph URL found for chain ID ${chainId}`);\n }\n\n try {\n const response = await fetch(subgraphUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result = await response.json();\n\n if (result.errors) {\n throw new Error(result.errors[0].message);\n }\n\n return {\n data: result.data as T,\n status: response.status,\n success: true,\n };\n } catch (error) {\n return {\n data: null as T,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the subgraph URL for a given chain ID\n * @param chainId The chain ID to get the subgraph URL for\n * @returns The subgraph URL or undefined if not found\n */\n protected getSubgraphUrl(chainId: number): string | undefined {\n\n const subgraphUrl = getSubgraphUrlByChainId(chainId);\n if (!subgraphUrl) {\n throw new Error(`No subgraph URL found for chain ID ${chainId}`);\n }\n\n return subgraphUrl;\n }\n\n /**\n * Checks if a chain is supported by checking if it has a subgraph URL\n * @param chainId The chain ID to check\n * @returns boolean indicating if the chain is supported\n */\n public supportsChain(chainId: number): boolean {\n return getSubgraphUrlByChainId(chainId) !== undefined;\n }\n} ","import { Address, PublicClient } from 'viem';\nimport { PoolSharkGlobalState, Slot0, SteerResponse } from '../../types.js';\n\n/**\n * Parameters for getting pool state across different AMM types\n */\nexport interface PoolStateParams {\n /** The pool address */\n poolAddress: Address;\n /** Whether the pool is an Algebra pool */\n isAlgebraPool?: boolean;\n /** Whether the pool is an Algebra directional pool */\n isAlgebraDirectionPool?: boolean;\n /** Whether the pool is a PoolShark pool */\n isPoolSharkPool?: boolean;\n /** Whether the pool is an Algebra Integral pool */\n isAlgebraIntegralPool?: boolean;\n}\n\n// const SLOT0_ABI: any = [\n// {\n// inputs: [],\n// name: 'slot0',\n// outputs: [\n// { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n// { internalType: 'int24', name: 'tick', type: 'int24' },\n// { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },\n// { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },\n// { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },\n// { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },\n// { internalType: 'bool', name: 'unlocked', type: 'bool' },\n// ],\n// stateMutability: 'view',\n// type: 'function',\n// },\n// ] as const;\n\nconst GLOBAL_STATE_ABI = [\n {\n inputs: [],\n name: 'globalState',\n outputs: [\n { internalType: 'uint160', name: 'price', type: 'uint160' },\n { internalType: 'int24', name: 'tick', type: 'int24' },\n { internalType: 'int24', name: 'prevInitializedTick', type: 'int24' },\n { internalType: 'uint16', name: 'fee', type: 'uint16' },\n { internalType: 'uint16', name: 'timepointIndex', type: 'uint16' },\n { internalType: 'uint8', name: 'communityFee', type: 'uint8' },\n { internalType: 'bool', name: 'unlocked', type: 'bool' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nconst GLOBAL_STATE_ABI_INTEGRAL_V_1 = [\n {\n inputs: [],\n name: 'globalState',\n outputs: [\n {\n internalType: 'uint160',\n name: 'price',\n type: 'uint160',\n },\n {\n internalType: 'int24',\n name: 'tick',\n type: 'int24',\n },\n {\n internalType: 'uint16',\n name: 'lastFee',\n type: 'uint16',\n },\n {\n internalType: 'uint8',\n name: 'pluginConfig',\n type: 'uint8',\n },\n {\n internalType: 'uint16',\n name: 'communityFee',\n type: 'uint16',\n },\n {\n internalType: 'bool',\n name: 'unlocked',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nconst GLOBAL_STATE_DIRECTIONAL_ABI = [\n {\n inputs: [],\n name: 'globalState',\n outputs: [\n { internalType: 'uint160', name: 'price', type: 'uint160' },\n { internalType: 'int24', name: 'tick', type: 'int24' },\n { internalType: 'uint16', name: 'feeZto', type: 'uint16' },\n { internalType: 'uint16', name: 'feeOtz', type: 'uint16' },\n { internalType: 'uint16', name: 'timepointIndex', type: 'uint16' },\n { internalType: 'uint8', name: 'communityFeeToken0', type: 'uint8' },\n { internalType: 'uint8', name: 'communityFeeToken1', type: 'uint8' },\n { internalType: 'bool', name: 'unlocked', type: 'bool' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nconst POOLSHARK_GLOBAL_STATE_ABI = [\n {\n inputs: [],\n name: 'globalState',\n outputs: [\n {\n components: [\n {\n components: [\n { internalType: 'uint16', name: 'index', type: 'uint16' },\n { internalType: 'uint16', name: 'count', type: 'uint16' },\n { internalType: 'uint16', name: 'countMax', type: 'uint16' },\n ],\n internalType: 'struct PoolsharkStructs.SampleState',\n name: 'samples',\n type: 'tuple',\n },\n { internalType: 'uint200', name: 'feeGrowthGlobal0', type: 'uint200' },\n { internalType: 'uint200', name: 'feeGrowthGlobal1', type: 'uint200' },\n { internalType: 'uint160', name: 'secondsPerLiquidityAccum', type: 'uint160' },\n { internalType: 'uint160', name: 'price', type: 'uint160' },\n { internalType: 'uint128', name: 'liquidity', type: 'uint128' },\n { internalType: 'int56', name: 'tickSecondsAccum', type: 'int56' },\n { internalType: 'int24', name: 'tickAtPrice', type: 'int24' },\n { internalType: 'uint16', name: 'protocolSwapFee0', type: 'uint16' },\n { internalType: 'uint16', name: 'protocolSwapFee1', type: 'uint16' },\n ],\n internalType: 'struct PoolsharkStructs.RangePoolState',\n name: 'pool',\n type: 'tuple',\n },\n {\n components: [\n { internalType: 'uint160', name: 'price', type: 'uint160' },\n { internalType: 'uint128', name: 'liquidity', type: 'uint128' },\n { internalType: 'uint128', name: 'protocolFees', type: 'uint128' },\n { internalType: 'uint16', name: 'protocolFillFee', type: 'uint16' },\n { internalType: 'int24', name: 'tickAtPrice', type: 'int24' },\n ],\n internalType: 'struct PoolsharkStructs.LimitPoolState',\n name: 'pool0',\n type: 'tuple',\n },\n {\n components: [\n { internalType: 'uint160', name: 'price', type: 'uint160' },\n { internalType: 'uint128', name: 'liquidity', type: 'uint128' },\n { internalType: 'uint128', name: 'protocolFees', type: 'uint128' },\n { internalType: 'uint16', name: 'protocolFillFee', type: 'uint16' },\n { internalType: 'int24', name: 'tickAtPrice', type: 'int24' },\n ],\n internalType: 'struct PoolsharkStructs.LimitPoolState',\n name: 'pool1',\n type: 'tuple',\n },\n { internalType: 'uint128', name: 'liquidityGlobal', type: 'uint128' },\n { internalType: 'uint32', name: 'positionIdNext', type: 'uint32' },\n { internalType: 'uint32', name: 'epoch', type: 'uint32' },\n { internalType: 'uint8', name: 'unlocked', type: 'uint8' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\n/**\n * Gets slot0 data from a standard Uniswap V3 pool\n * @param poolAddress The pool address\n */\nexport async function getSlot0(\n publicClient: PublicClient,\n poolAddress: Address\n): Promise<SteerResponse<Slot0>> {\n try {\n const slot0 = await publicClient.readContract({\n address: poolAddress,\n abi: [\n {\n inputs: [],\n name: 'slot0',\n outputs: [\n { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n { internalType: 'int24', name: 'tick', type: 'int24' },\n { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },\n { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },\n { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },\n { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },\n { internalType: 'bool', name: 'unlocked', type: 'bool' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n ],\n functionName: 'slot0',\n });\n\n return {\n data: {\n sqrtPriceX96: slot0[0],\n tick: Number(slot0[1]),\n observationIndex: slot0[2],\n observationCardinality: slot0[3],\n observationCardinalityNext: slot0[4],\n feeProtocol: slot0[5],\n unlocked: slot0[6],\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 global state from an Algebra pool\n * @param poolAddress The pool address\n * @param isDirectional Whether the pool is directional\n */\nexport async function getGlobalState(\n publicClient: PublicClient,\n poolAddress: Address,\n isDirectional = false\n): Promise<SteerResponse<Slot0>> {\n try {\n try {\n const globalState = await publicClient.readContract({\n address: poolAddress,\n abi: isDirectional ? GLOBAL_STATE_DIRECTIONAL_ABI : GLOBAL_STATE_ABI,\n functionName: 'globalState',\n });\n\n return {\n data: {\n price: globalState[0],\n tick: Number(globalState[1]),\n observationIndex: globalState[4], // timepointIndex\n observationCardinality: 0, // Not available in Algebra\n observationCardinalityNext: 0, // Not available in Algebra\n feeProtocol: isDirectional ? Number(globalState[2]) : Number(globalState[3]), // fee or feeZto\n unlocked: Boolean(globalState[isDirectional ? 7 : 6]),\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n const globalState = await publicClient.readContract({\n address: poolAddress,\n abi: GLOBAL_STATE_ABI_INTEGRAL_V_1,\n functionName: 'globalState',\n });\n\n return {\n data: {\n price: globalState[0],\n tick: Number(globalState[1]),\n observationIndex: 0,\n observationCardinality: 0,\n observationCardinalityNext: 0,\n feeProtocol: 0,\n unlocked: false,\n },\n status: 200,\n success: true,\n };\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 global state from a PoolShark pool\n * @param poolAddress The pool address\n */\nexport async function getGlobalStatePoolShark(\n publicClient: PublicClient,\n poolAddress: Address\n): Promise<SteerResponse<PoolSharkGlobalState>> {\n try {\n const globalState = await publicClient.readContract({\n address: poolAddress,\n abi: POOLSHARK_GLOBAL_STATE_ABI,\n functionName: 'globalState',\n });\n\n return {\n data: {\n pool: {\n samples: {\n index: globalState[0].samples.index,\n count: globalState[0].samples.count,\n countMax: globalState[0].samples.countMax,\n },\n feeGrowthGlobal0: globalState[0].feeGrowthGlobal0,\n feeGrowthGlobal1: globalState[0].feeGrowthGlobal1,\n secondsPerLiquidityAccum: globalState[0].secondsPerLiquidityAccum,\n price: globalState[0].price,\n liquidity: globalState[0].liquidity,\n tickSecondsAccum: Number(globalState[0].tickSecondsAccum),\n tickAtPrice: globalState[0].tickAtPrice,\n protocolSwapFee0: globalState[0].protocolSwapFee0,\n protocolSwapFee1: globalState[0].protocolSwapFee1,\n },\n pool0: {\n price: globalState[1].price,\n liquidity: globalState[1].liquidity,\n protocolFees: globalState[1].protocolFees,\n protocolFillFee: globalState[1].protocolFillFee,\n tickAtPrice: globalState[1].tickAtPrice,\n },\n pool1: {\n price: globalState[2].price,\n liquidity: globalState[2].liquidity,\n protocolFees: globalState[2].protocolFees,\n protocolFillFee: globalState[2].protocolFillFee,\n tickAtPrice: globalState[2].tickAtPrice,\n },\n liquidityGlobal: globalState[3],\n positionIdNext: Number(globalState[4]),\n epoch: Number(globalState[5]),\n unlocked: Number(globalState[6]),\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 global state from an Algebra Integral pool\n * @param poolAddress The pool address\n * @param isDirectional Whether the pool is directional\n */\nexport async function getGlobalStateAlgebraIntegral(\n publicClient: PublicClient,\n poolAddress: Address,\n isDirectional = false\n): Promise<SteerResponse<Slot0>> {\n try {\n try {\n const globalState = await publicClient.readContract({\n address: poolAddress,\n abi: isDirectional ? GLOBAL_STATE_DIRECTIONAL_ABI : GLOBAL_STATE_ABI,\n functionName: 'globalState',\n });\n\n return {\n data: {\n price: globalState[0],\n tick: Number(globalState[1]),\n observationIndex: globalState[4], // timepointIndex\n observationCardinality: 0, // Not available in Algebra Integral\n observationCardinalityNext: 0, // Not available in Algebra Integral\n feeProtocol: isDirectional ? Number(globalState[2]) : Number(globalState[3]), // fee or feeZto\n unlocked: Boolean(globalState[isDirectional ? 7 : 6]),\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n const globalState = await publicClient.readContract({\n address: poolAddress,\n abi: GLOBAL_STATE_ABI_INTEGRAL_V_1,\n functionName: 'globalState',\n });\n\n return {\n data: {\n price: globalState[0],\n tick: Number(globalState[1]),\n observationIndex: 0,\n observationCardinality: 0,\n observationCardinalityNext: 0,\n feeProtocol: 0,\n unlocked: false,\n },\n status: 200,\n success: true,\n };\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 * Unified method to get pool state across different AMM types\n * Automatically calls the correct function based on pool type parameters\n *\n * @param publicClient - The public client for blockchain reads\n * @param params - Parameters specifying the pool and its type\n * @returns Promise resolving to standardized pool state data\n *\n * @example\n * ```typescript\n * // For Uniswap V3 pool\n * const uniV3State = await getPoolState(publicClient, {\n * poolAddress: '0x...',\n * });\n *\n * // For Algebra pool\n * const algebraState = await getPoolState(publicClient, {\n * poolAddress: '0x...',\n * isAlgebraPool: true,\n * isAlgebraDirectionPool: false\n * });\n *\n * // For PoolShark pool\n * const poolSharkState = await getPoolState(publicClient, {\n * poolAddress: '0x...',\n * isPoolSharkPool: true\n * });\n * ```\n */\nexport async function getPoolState(\n publicClient: PublicClient,\n params: PoolStateParams\n): Promise<SteerResponse<Slot0>> {\n try {\n let stateResponse: SteerResponse<Slot0 | PoolSharkGlobalState>;\n\n // Handle different protocol types following the same logic as getPoolInstance\n if (params.isAlgebraIntegralPool) {\n // For Algebra Integral pools\n stateResponse = await getGlobalStateAlgebraIntegral(\n publicClient,\n params.poolAddress,\n params.isAlgebraDirectionPool || false\n );\n } else if (params.isPoolSharkPool) {\n // For PoolShark pools - convert to standardized format\n const poolSharkResponse = await getGlobalStatePoolShark(publicClient, params.poolAddress);\n if (poolSharkResponse.success && poolSharkResponse.data) {\n stateResponse = {\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 stateResponse = {\n data: null,\n status: poolSharkResponse.status,\n success: false,\n error: poolSharkResponse.error,\n };\n }\n } else if (params.isAlgebraPool) {\n // For Algebra pools\n stateResponse = await getGlobalState(\n publicClient,\n params.poolAddress,\n params.isAlgebraDirectionPool || false\n );\n } else {\n // For standard Uniswap V3 pools\n\n stateResponse = await getSlot0(publicClient, params.poolAddress);\n }\n\n if (!stateResponse.success || !stateResponse.data) {\n throw new Error(stateResponse.error || 'Failed to read pool state');\n }\n\n return {\n data: stateResponse.data as Slot0,\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 state',\n };\n }\n}\n\n/**\n * Extracts the appropriate price value from pool state based on AMM type\n * Different AMM protocols store price information in different fields\n *\n * @param poolStateData - The pool state data returned from getPoolState\n * @param params - Pool type parameters to determine which price field to use\n * @returns The price as bigint, or null if price cannot be extracted\n *\n * @example\n * ```typescript\n * const stateResponse = await getPoolState(publicClient, {\n * poolAddress: '0x...',\n * isAlgebraPool: true\n * });\n *\n * if (stateResponse.success && stateResponse.data) {\n * const price = getPoolPrice(stateResponse.data, {\n * isAlgebraPool: true,\n * isAlgebraDirectionPool: false\n * });\n * console.log('Pool price:', price);\n * }\n * ```\n */\nexport function getPoolPrice(\n poolStateData: Slot0,\n params: Pick<PoolStateParams, 'isAlgebraPool' | 'isAlgebraIntegralPool' | 'isPoolSharkPool'>\n): bigint | null {\n try {\n let price: bigint | undefined;\n\n // Extract price based on AMM type - following the same logic as getPoolInstance\n if (params.isAlgebraPool && !params.isAlgebraIntegralPool) {\n // For Algebra pools (non-integral)\n price = poolStateData?.price;\n } else if (params.isAlgebraIntegralPool) {\n // For Algebra Integral pools\n price = poolStateData?.price;\n } else if (params.isPoolSharkPool) {\n // For PoolShark pools - price is stored in a nested structure\n price = (poolStateData.tick as unknown as { price: bigint })?.price;\n } else {\n // For standard Uniswap V3 pools\n price = poolStateData.sqrtPriceX96;\n }\n\n return price || null;\n } catch (error) {\n console.error('Error extracting pool price:', error);\n return null;\n }\n}\n\n/**\n * Combined method to get both pool state and extract price in one call\n * Convenience method that combines getPoolState and getPoolPrice\n *\n * @param publicClient - The public client for blockchain reads\n * @param params - Parameters specifying the pool and its type\n * @returns Promise resolving to object containing both state and price\n *\n * @example\n * ```typescript\n * const result = await getPoolStateWithPrice(publicClient, {\n * poolAddress: '0x...',\n * isAlgebraPool: true\n * });\n *\n * if (result.success && result.data) {\n * console.log('Pool state:', result.data.state);\n * console.log('Pool price:', result.data.price);\n * }\n * ```\n */\nexport async function getPoolStateWithPrice(\n publicClient: PublicClient,\n params: PoolStateParams\n): Promise<SteerResponse<{ state: Slot0; price: bigint | null }>> {\n try {\n const stateResponse = await getPoolState(publicClient, params);\n\n if (!stateResponse.success || !stateResponse.data) {\n return {\n data: null,\n status: stateResponse.status,\n success: false,\n error: stateResponse.error || 'Failed to get pool state',\n };\n }\n\n const price = getPoolPrice(stateResponse.data, params);\n\n return {\n data: {\n state: stateResponse.data,\n price,\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 : 'Failed to get pool state with price',\n };\n }\n}\n","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","import type { PublicClient } from 'viem';\nimport { singleTokenDepositAbi } from '../../../const/abis/singleTokenDeposit.js';\nimport { SteerResponse } from '../../../types.js';\nimport type { CalculateSwapAmountParams, SwapAmountResponse } from './types.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/index.js';\n\n/**\n * Calculates the amount that needs to be swapped for a single-asset deposit\n * This function calls the smart contract's calculateSwapAmount function\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for swap amount calculation\n * @returns Promise resolving to swap amount and current sqrt price\n * \n * @example\n * ```typescript\n * const result = await calculateSwapAmount(publicClient, {\n * depositAmount: parseEther('100'),\n * isToken0: true,\n * vault: '0x...',\n * pool: '0x...',\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: '0x...'\n * });\n * \n * if (result.success) {\n * console.log('Swap amount:', result.data.swapAmount);\n * console.log('Current sqrt price:', result.data.sqrtPrice);\n * }\n * ```\n */\nexport async function calculateSwapAmount(\n publicClient: PublicClient,\n params: CalculateSwapAmountParams\n): Promise<SteerResponse<SwapAmountResponse>> {\n try {\n // Call the smart contract's calculateSwapAmount function\n\n const chainId = await publicClient.getChainId();\n const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(chainId, 'SingleAssetDeposit')\n\n const result = await publicClient.readContract({\n address: singleAssentDeposit,\n abi: singleTokenDepositAbi,\n functionName: 'calculateSwapAmount',\n args: [\n params.depositAmount,\n params.isToken0,\n params.vault,\n params.pool,\n params.ammType\n ]\n });\n\n // The contract returns [swapAmount, sqrtPrice]\n const [swapAmount, sqrtPrice] = result as [bigint, bigint];\n\n return {\n data: {\n swapAmount,\n sqrtPrice\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 : 'Failed to calculate swap amount'\n };\n }\n} ","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} ","import { Decimal } from 'decimal.js';\nimport type { Address, PublicClient } from 'viem';\nimport { decodeFunctionResult, encodeFunctionData } from 'viem';\nimport { getNetworkByChainId, getProtcolTypeByAmmType, Protocol, isAlgebraIntegralProtocol } from '../../../const/index.js';\nimport { QuoterV2Factory } from '../../../const/quoter.js';\nimport { SteerResponse } from '../../../types.js';\nimport { getPoolPrice } from '../utils.js';\nimport { bigintToDecimal, decimalToBigint, getPoolSlot0, getQuoteFromSqrtRatioX96 } from './calculateLimitPrice.js';\nimport type { PoolSlot0, SimulateSwapParams, SwapSimulationResponse } from './types.js';\nimport { AMMType } from './types.js';\n\n/**\n * Simulates a swap to get the expected output amounts without executing the swap\n * Uses Uniswap V3 Quoter contract for accurate simulation\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for swap simulation\n * @param chainId - Chain ID to get the appropriate Quoter address\n * @returns Promise resolving to the simulated swap results\n * \n * @example\n * ```typescript\n * const result = await simulateSwap(publicClient, {\n * pool: '0x...',\n * recipient: '0x...',\n * zeroForOne: true,\n * amountSpecified: parseEther('10'),\n * sqrtPriceLimitX96: limitPrice,\n * ammType: AMMType.UniswapV3,\n * tokenIn: '0x...',\n * tokenOut: '0x...',\n * fee: 3000\n * }, 137); // Polygon chain ID\n * \n * if (result.success) {\n * console.log('Amount out:', result.data.amountOut);\n * }\n * ```\n */\nexport async function simulateSwap(\n publicClient: PublicClient,\n params: SimulateSwapParams,\n chainId: number\n): Promise<SteerResponse<SwapSimulationResponse>> {\n try {\n // For now, only handle UniswapV3 - other AMMs can be added later\n\n // Get the appropriate Quoter contract address\n\n const networkConfig = getNetworkByChainId(chainId);\n\n if (!networkConfig) {\n throw Error('Network config not found')\n }\n \n const protocol = params.protocol || getProtcolTypeByAmmType(params.ammType);\n\n const quoterFactory = new QuoterV2Factory(networkConfig);\n\n const quoterABI = quoterFactory.getQuoterAbi(protocol);\n\n const quoteParams = quoterFactory.getQuoteParams(protocol, {\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n fee: params.fee,\n tickSpacing: params.tickSpacing,\n amountIn: params.amountSpecified,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n limitSqrtPrice: params.sqrtPriceLimitX96,\n })\n\n const quoterAddress = quoterFactory.getQuoterV2Address(\n protocol\n )\n // Use Quoter's quoteExactInputSingle for simulation\n const result = await publicClient.call({\n to: quoterAddress as Address,\n data: encodeFunctionData({\n abi: quoterABI,\n functionName: 'quoteExactInputSingle',\n //@ts-expect-error Parameters are dynamic in nature and very based on abi types\n args: [{\n ...quoteParams\n }]\n })\n });\n\n if (!result.data) {\n throw new Error('No data returned from quoter simulation');\n }\n\n // Decode the result - Different quoters return different tuple structures:\n // - Standard Uniswap/QuickSwap: [amountOut, sqrtPriceX96After, initializedTicksCrossed, gasEstimate]\n // - AlgebraIntegral: [amountOut, amountIn, sqrtPriceX96After, initializedTicksCrossed, gasEstimate, fee]\n const decodedResult = decodeFunctionResult({\n abi: quoterABI,\n functionName: 'quoteExactInputSingle',\n data: result.data\n });\n\n // Extract values based on protocol type\n let amountOut: bigint;\n let sqrtPriceX96After: bigint;\n \n // Check if this is an AlgebraIntegral protocol (which has amountIn as second return value)\n if (protocol && isAlgebraIntegralProtocol(protocol)) {\n // AlgebraIntegral format: [amountOut, amountIn, sqrtPriceX96After, ...]\n const [out, , priceAfter] = decodedResult as readonly [bigint, bigint, bigint, number, bigint, number];\n amountOut = out;\n sqrtPriceX96After = priceAfter;\n } else {\n // Standard format: [amountOut, sqrtPriceX96After, ...]\n const [out, priceAfter] = decodedResult as readonly [bigint, bigint, number, bigint];\n amountOut = out;\n sqrtPriceX96After = priceAfter;\n }\n\n // Convert to the expected SwapSimulationResponse format\n // For exact input swaps, we know the input amount and get the output amount\n let amount0: bigint, amount1: bigint;\n \n if (params.zeroForOne) {\n // Swapping token0 for token1\n amount0 = -params.amountSpecified; // negative because we're giving token0\n amount1 = amountOut; // positive because we're receiving token1\n } else {\n // Swapping token1 for token0\n amount0 = amountOut; // positive because we're receiving token0\n amount1 = -params.amountSpecified; // negative because we're giving token1\n }\n\n return {\n data: {\n amount0,\n amount1,\n sqrtPriceX96After\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 : 'Failed to simulate swap'\n };\n }\n}\n\n/**\n * Determines the swap direction based on the token being deposited\n * \n * @param isToken0 - true if depositing token0, false if token1\n * @returns true if swapping token0 → token1, false otherwise\n */\nexport function determineSwapDirection(isToken0: boolean): boolean {\n // If depositing token0, we need to swap some token0 to token1\n // If depositing token1, we need to swap some token1 to token0\n return isToken0;\n}\n\n/**\n * Validates swap simulation parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\nexport function validateSwapParams(params: SimulateSwapParams): void {\n if (!params.pool || params.pool === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid pool address');\n }\n \n if (!params.recipient || params.recipient === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid recipient address');\n }\n \n if (params.amountSpecified <= 0n) {\n throw new Error('Amount specified must be greater than 0');\n }\n \n if (params.sqrtPriceLimitX96 <= 0n) {\n throw new Error('Sqrt price limit must be greater than 0');\n }\n\n if (!params.tokenIn || params.tokenIn === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid tokenIn address');\n }\n\n if (!params.tokenOut || params.tokenOut === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid tokenOut address');\n }\n\n if (params.fee <= 0) {\n throw new Error('Pool fee must be greater than 0');\n }\n} \n\n/**\n * Parameters for swap with slippage analysis\n */\nexport interface SwapWithSlippageParams {\n /** Address of the pool */\n poolAddress: string;\n /** Address that will receive the swap output (or address(this) for simulation) */\n recipient: string;\n /** true if swapping token0 → token1, else false */\n zeroForOne: boolean;\n /** Amount to swap */\n amountSpecified: bigint;\n /** Slippage-adjusted limit price */\n sqrtPriceLimitX96: bigint;\n /** AMM type */\n ammType: AMMType;\n /** Input token address (required for Quoter) */\n tokenIn: string;\n /** Output token address (required for Quoter) */\n tokenOut: string;\n /** Pool fee (required for Quoter) */\n fee: number;\n /** Quoter contract address (optional - will use default if not provided) */\n quoterAddress?: string;\n /** Protocol */\n protocol?: Protocol | null;\n}\n\n/**\n * Response from swap simulation with slippage analysis\n */\nexport interface SwapWithSlippageResponse {\n /** Current pool slot0 data */\n currentSlot0: PoolSlot0;\n /** Swap simulation results */\n swapSimulation: SwapSimulationResponse;\n /** Price slippage percentage (positive means price moved unfavorably) */\n priceSlippagePercent: string;\n /** Current price (derived from sqrtPriceX96) */\n currentPrice: bigint;\n /** Price after swap (derived from sqrtPriceX96After) */\n priceAfter: bigint;\n}\n\n/**\n * Simulates a swap with slippage analysis by first getting current pool state,\n * then simulating the swap and calculating price impact\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for swap simulation with slippage analysis\n * @param chainId - Chain ID to get the appropriate Quoter address\n * @returns Promise resolving to swap results with slippage analysis\n * \n * @example\n * ```typescript\n * const result = await simulateSwapWithSlippage(publicClient, {\n * poolAddress: '0x...',\n * recipient: '0x...',\n * zeroForOne: true,\n * amountSpecified: parseEther('10'),\n * sqrtPriceLimitX96: limitPrice,\n * ammType: AMMType.UniswapV3,\n * tokenIn: '0x...',\n * tokenOut: '0x...',\n * fee: 3000\n * }, 137); // Polygon chain ID\n * \n * if (result.success) {\n * console.log('Price slippage:', result.data.priceSlippagePercent, '%');\n * console.log('Current price:', result.data.currentPrice);\n * console.log('Price after swap:', result.data.priceAfter);\n * }\n * ```\n */\nexport async function simulateSwapWithSlippage(\n publicClient: PublicClient,\n params: SwapWithSlippageParams,\n chainId: number\n): Promise<SteerResponse<SwapWithSlippageResponse>> {\n try {\n // Validate params\n validateSwapWithSlippageParams(params);\n\n // Step 1: Get current pool state from slot0\n\n const slot0Result = await getPoolSlot0(\n publicClient,\n params.poolAddress as `0x${string}`,\n params.ammType\n )\n\n if (!slot0Result.data) {\n throw new Error('Failed to get pool slot0 data');\n }\n\n // Decode slot0 result\n const currentSlot0: PoolSlot0 = {\n sqrtPriceX96: getPoolPrice(slot0Result.data, {\n isAlgebraPool: params.ammType === AMMType.Algebra,\n isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n isPoolSharkPool: false // PoolShark not defined in AMMType enum\n }) || BigInt(0),\n tick: slot0Result.data.tick,\n observationIndex: slot0Result.data.observationIndex,\n observationCardinality: slot0Result.data.observationCardinality,\n observationCardinalityNext: slot0Result.data.observationCardinalityNext,\n feeProtocol: slot0Result.data.feeProtocol,\n unlocked: slot0Result.data.unlocked\n };\n\n const tickSpacing = await publicClient.readContract({\n abi: [ {\n \"inputs\": [],\n \"name\": \"tickSpacing\",\n \"outputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"\",\n \"type\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },],\n functionName: 'tickSpacing',\n address: params.poolAddress as `0x${string}`,\n })\n\n // Step 2: Simulate the swap using existing function\n const swapParams: SimulateSwapParams = {\n pool: params.poolAddress as `0x${string}`,\n recipient: params.recipient as `0x${string}`,\n zeroForOne: params.zeroForOne,\n amountSpecified: params.amountSpecified,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n ammType: params.ammType,\n tokenIn: params.tokenIn as `0x${string}`,\n tokenOut: params.tokenOut as `0x${string}`,\n fee: params.fee,\n tickSpacing: tickSpacing,\n quoterAddress: params.quoterAddress as `0x${string}` | undefined,\n protocol: params.protocol\n };\n\n const swapResult = await simulateSwap(publicClient, swapParams, chainId);\n\n if (!swapResult.success || !swapResult.data) {\n throw new Error(swapResult.error || 'Swap simulation failed');\n }\n\n // Step 3: Calculate price slippage\n const currentPrice = getQuoteFromSqrtRatioX96(\n bigintToDecimal(currentSlot0.sqrtPriceX96),\n bigintToDecimal(10n**18n),\n params.tokenIn as `0x${string}`,\n params.tokenOut as `0x${string}`\n );\n const priceAfter = getQuoteFromSqrtRatioX96(\n bigintToDecimal(swapResult.data.sqrtPriceX96After),\n bigintToDecimal(10n**18n),\n params.tokenIn as `0x${string}`,\n params.tokenOut as `0x${string}`\n );\n \n // Calculate slippage percentage\n // Positive slippage means unfavorable price movement\n const priceSlippagePercent = calculatePriceSlippage(\n currentPrice,\n priceAfter,\n params.zeroForOne\n );\n\n return {\n data: {\n currentSlot0,\n swapSimulation: swapResult.data,\n priceSlippagePercent: priceSlippagePercent.toFixed(5),\n currentPrice: decimalToBigint(currentPrice),\n priceAfter: decimalToBigint(priceAfter)\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 : 'Failed to simulate swap with slippage'\n };\n }\n}\n\n/**\n * Calculates price slippage percentage using Decimal.js\n * \n * @param priceBefore - Price before the swap (Decimal)\n * @param priceAfter - Price after the swap (Decimal)\n * @param zeroForOne - Swap direction (true if token0 → token1)\n * @returns Slippage percentage (positive means unfavorable movement)\n */\nfunction calculatePriceSlippage(\n priceBefore: Decimal,\n priceAfter: Decimal,\n zeroForOne: boolean\n): Decimal {\n if (priceBefore.isZero()) {\n throw new Error('Price before cannot be zero');\n }\n\n const priceChange = priceAfter.minus(priceBefore).dividedBy(priceBefore).times(100);\n \n // For zeroForOne swaps (selling token0), favorable movement is price going down\n // For oneForZero swaps (selling token1), favorable movement is price going up\n // We return positive values for unfavorable movement (slippage)\n return zeroForOne ? priceChange : priceChange.negated();\n}\n\n/**\n * Validates swap with slippage parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\nfunction validateSwapWithSlippageParams(params: SwapWithSlippageParams): void {\n if (!params.poolAddress || params.poolAddress === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid pool address');\n }\n \n if (!params.recipient || params.recipient === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid recipient address');\n }\n \n if (params.amountSpecified <= 0n) {\n throw new Error('Amount specified must be greater than 0');\n }\n \n if (params.sqrtPriceLimitX96 <= 0n) {\n throw new Error('Sqrt price limit must be greater than 0');\n }\n\n if (!params.tokenIn || params.tokenIn === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid tokenIn address');\n }\n\n if (!params.tokenOut || params.tokenOut === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid tokenOut address');\n }\n\n if (params.fee <= 0) {\n throw new Error('Pool fee must be greater than 0');\n }\n} ","import type { Address, PublicClient } from 'viem';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport { SteerResponse } from '../../../types.js';\nimport type { EstimateLpTokensParams, LpTokenEstimationResponse } from './types.js';\n\n// Use the vault ABI for reading vault state\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\n\n/**\n * Estimates the amount of LP tokens that will be received based on the final token amounts\n * This calculation follows the Solidity getShares implementation from the vault contract\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for LP token estimation\n * @returns Promise resolving to the estimated LP tokens and final amounts\n * \n * @example\n * ```typescript\n * const result = await estimateLpTokens(publicClient, {\n * vault: '0x...',\n * originalAssets: parseEther('100'),\n * swapAmount: parseEther('50'),\n * swapResult: { amount0: -parseEther('50'), amount1: parseEther('150') },\n * isToken0: true\n * });\n * \n * if (result.success) {\n * console.log('Estimated LP tokens:', result.data.lpTokens);\n * console.log('Final amount0:', result.data.finalAmount0);\n * console.log('Final amount1:', result.data.finalAmount1);\n * }\n * ```\n */\nexport async function estimateLpTokens(\n publicClient: PublicClient,\n params: EstimateLpTokensParams\n): Promise<SteerResponse<LpTokenEstimationResponse>> {\n try {\n // Calculate final amounts based on original deposit and swap results\n const finalAmount0 = params.isToken0 \n ? params.originalAssets - params.swapAmount + (params.swapResult.amount0 < 0n ? -params.swapResult.amount0 : params.swapResult.amount0)\n : (params.swapResult.amount0 < 0n ? -params.swapResult.amount0 : params.swapResult.amount0);\n \n const finalAmount1 = params.isToken0\n ? (params.swapResult.amount1 < 0n ? -params.swapResult.amount1 : params.swapResult.amount1)\n : params.originalAssets - params.swapAmount + (params.swapResult.amount1 < 0n ? -params.swapResult.amount1 : params.swapResult.amount1);\n\n // Get vault reserves and total supply\n const [totalSupply, tokenBalances] = await Promise.all([\n publicClient.readContract({\n address: params.vault,\n abi: [ {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },],\n functionName: 'totalSupply'\n }) as Promise<bigint>,\n \n // Get token0 address first, then balance\n publicClient.readContract({\n address: params.vault,\n abi: [ {\n \"inputs\": [],\n \"name\": \"getTotalAmounts\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },],\n functionName: 'getTotalAmounts'\n })\n ])\n\n const chainId = await publicClient.getChainId();\n const helper = getContractAddressByChainIdAndContractName(\n chainId,\n 'Helper'\n )\n\n const [shares, amount0Used, amount1Used] = await publicClient.readContract({\n address: helper as Address,\n abi: [{\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_totalSupply\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"total1\",\n \"type\": \"uint256\"\n },\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\": \"uint256\",\n \"name\": \"minShares\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getShares\",\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\": \"pure\",\n \"type\": \"function\"\n }],\n functionName: 'getShares',\n args: [\n totalSupply,\n tokenBalances[0],\n tokenBalances[1],\n finalAmount0,\n finalAmount1,\n 0n, // amount0Min = 0 as requested\n 0n, // amount1Min = 0 as requested\n 0n // minShares = 0\n ]\n })\n\n\n return {\n data: {\n lpTokens: shares,\n finalAmount0: amount0Used,\n finalAmount1: amount1Used\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 : 'Failed to estimate LP tokens'\n };\n }\n}\n\n/**\n * Calculates shares (LP tokens) based on deposit amounts and vault reserves\n * This is a TypeScript implementation of the Solidity getShares function\n * \n * @param totalSupply - Current total supply of LP tokens\n * @param total0 - Current balance of token0 in vault\n * @param total1 - Current balance of token1 in vault\n * @param amount0Desired - Desired amount of token0 to deposit\n * @param amount1Desired - Desired amount of token1 to deposit\n * @param amount0Min - Minimum amount of token0 (set to 0n)\n * @param amount1Min - Minimum amount of token1 (set to 0n)\n * @param minShares - Minimum shares required (set to 0n)\n * @returns Object with shares, amount0Used, and amount1Used\n */\nexport function getShares(\n totalSupply: bigint,\n total0: bigint,\n total1: bigint,\n amount0Desired: bigint,\n amount1Desired: bigint,\n amount0Min: bigint,\n amount1Min: bigint,\n minShares: bigint\n): { shares: bigint; amount0Used: bigint; amount1Used: bigint } {\n // If total supply > 0, vault can't be empty.\n if (!(totalSupply === 0n || total0 > 0n || total1 > 0n)) {\n throw new Error('Invalid vault state');\n }\n\n let shares: bigint;\n let amount0Used: bigint = 0n;\n let amount1Used: bigint = 0n;\n\n if (totalSupply === 0n) {\n // For first deposit, just use the amounts desired\n amount0Used = amount0Desired;\n amount1Used = amount1Desired;\n shares = amount0Used > amount1Used ? amount0Used : amount1Used;\n \n if (shares < minShares) {\n throw new Error('Insufficient shares for minimum requirement');\n }\n } else if (total0 === 0n) {\n // Vault only has token1\n shares = mulDiv(amount1Desired, totalSupply, total1);\n amount1Used = mulDivRoundingUp(shares, total1, totalSupply);\n amount0Used = 0n;\n } else if (total1 === 0n) {\n // Vault only has token0\n shares = mulDiv(amount0Desired, totalSupply, total0);\n amount0Used = mulDivRoundingUp(shares, total0, totalSupply);\n amount1Used = 0n;\n } else {\n // Both tokens present - calculate cross product\n const cross = min(amount0Desired * total1, amount1Desired * total0);\n\n if (cross === 0n) {\n throw new Error('Invalid deposit ratio - cross product is zero');\n }\n\n // Round up amounts\n amount0Used = ((cross - 1n) / total1) + 1n;\n amount1Used = ((cross - 1n) / total0) + 1n;\n\n shares = mulDiv(cross, totalSupply, total0) / total1;\n }\n\n // Validate requirements\n if (shares === 0n) {\n throw new Error('Zero shares calculated');\n }\n if (amount0Used < amount0Min) {\n throw new Error('Amount0 used less than minimum');\n }\n if (amount1Used < amount1Min) {\n throw new Error('Amount1 used less than minimum');\n }\n\n return { shares, amount0Used, amount1Used };\n}\n\n/**\n * Multiplies two BigInt values and divides by a third (a * b / c)\n * Equivalent to Solidity's FullMath.mulDiv\n */\nfunction mulDiv(a: bigint, b: bigint, c: bigint): bigint {\n if (c === 0n) {\n throw new Error('Division by zero');\n }\n return (a * b) / c;\n}\n\n/**\n * Multiplies two BigInt values, divides by a third, and rounds up\n * Equivalent to Solidity's FullMath.mulDivRoundingUp\n */\nfunction mulDivRoundingUp(a: bigint, b: bigint, c: bigint): bigint {\n if (c === 0n) {\n throw new Error('Division by zero');\n }\n const result = (a * b) / c;\n const remainder = (a * b) % c;\n return remainder > 0n ? result + 1n : result;\n}\n\n/**\n * Returns the minimum of two BigInt values\n */\nfunction min(a: bigint, b: bigint): bigint {\n return a < b ? a : b;\n}\n\n/**\n * Gets the current vault reserves for both tokens\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param vaultAddress - Address of the vault\n * @returns Promise resolving to [token0Balance, token1Balance, totalSupply]\n */\nexport async function getVaultReserves(\n publicClient: PublicClient,\n vaultAddress: `0x${string}`\n): Promise<SteerResponse<{ token0Balance: bigint; token1Balance: bigint; totalSupply: bigint }>> {\n try {\n const [totalSupply, token0Address, token1Address] = await Promise.all([\n publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'totalSupply'\n }) as Promise<bigint>,\n \n publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'token0'\n }) as Promise<`0x${string}`>,\n \n publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'token1'\n }) as Promise<`0x${string}`>\n ]);\n\n const [token0Balance, token1Balance] = await Promise.all([\n publicClient.readContract({\n address: token0Address,\n abi: [\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [{ name: 'account', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view'\n }\n ],\n functionName: 'balanceOf',\n args: [vaultAddress]\n }) as Promise<bigint>,\n \n publicClient.readContract({\n address: token1Address,\n abi: [\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [{ name: 'account', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view'\n }\n ],\n functionName: 'balanceOf',\n args: [vaultAddress]\n }) as Promise<bigint>\n ]);\n\n return {\n data: {\n token0Balance,\n token1Balance,\n totalSupply\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 : 'Failed to get vault reserves'\n };\n }\n} \n\n","import type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { getContractAddressByChainIdAndContractName, getProtocolTypeByBeacon, Protocol } from '../../../const/index.js';\nimport { singleTokenDepositAbi } from '../../../const/abis/singleTokenDeposit.js';\nimport { UniswapV3PoolABI } from '../../../const/abis/UniswapPool.js';\nimport { AlgebraVaultDetails, SteerResponse, VaultDetails } from '../../../types.js';\nimport { calculateLimitPrice } from './calculateLimitPrice.js';\nimport { calculateSwapAmount } from './calculateSwapAmount.js';\nimport { estimateLpTokens } from './estimateLpTokens.js';\nimport { determineSwapDirection, simulateSwapWithSlippage, SwapWithSlippageParams } from './simulateSwap.js';\nimport type {\n CalculateLimitPriceParams,\n CalculateSwapAmountParams,\n SingleAssetDepositParams,\n SingleAssetDepositPreview\n} from './types.js';\nimport { AMMType } from './types.js';\nimport { abis } from '../../../const/deployments/abis.js';\n\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\n/**\n * Main single-asset deposit client that orchestrates all the steps\n */\nexport class SingleAssetDepositClient {\n constructor(\n private readonly publicClient: PublicClient,\n private readonly walletClient: WalletClient\n ) {}\n\n /**\n * Previews a single-asset deposit by running all simulation steps\n * This allows users to see the expected outcome before executing the transaction\n * \n * @param params - Single-asset deposit parameters\n * @param poolAddress - Address of the pool (must be provided separately)\n * @returns Promise resolving to the complete deposit preview\n * \n * @example\n * ```typescript\n * const preview = await client.previewDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * }, poolAddress);\n * \n * if (preview.success) {\n * console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n * console.log('Swap amount:', preview.data.swapAmount);\n * }\n * ```\n */\n public async previewDeposit(\n params: SingleAssetDepositParams,\n poolAddress: `0x${string}`\n ): Promise<SteerResponse<SingleAssetDepositPreview>> {\n try {\n\n const chainId = await this.publicClient.getChainId();\n const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(\n chainId,\n 'SingleAssetDeposit'\n )\n\n // Step 1: Calculate swap amount\n const swapAmountParams: CalculateSwapAmountParams = {\n depositAmount: params.assets,\n isToken0: params.isToken0,\n vault: params.vault,\n pool: poolAddress,\n ammType: params.ammType,\n singleAssetDepositContract: singleAssentDeposit as Address\n };\n\n\n const swapAmountResult = await calculateSwapAmount(this.publicClient, swapAmountParams);\n if (!swapAmountResult.success || !swapAmountResult.data) {\n return {\n data: null,\n status: swapAmountResult.status,\n success: false,\n error: swapAmountResult.error || 'Failed to calculate swap amount'\n };\n }\n\n const { swapAmount, sqrtPrice } = swapAmountResult.data;\n const zeroForOne = determineSwapDirection(params.isToken0);\n\n // Get token addresses from the pool contract\n const [token0, token1] = await Promise.all([\n this.publicClient.readContract({\n address: poolAddress,\n abi: UniswapV3PoolABI,\n functionName: 'token0'\n }) as Promise<`0x${string}`>,\n this.publicClient.readContract({\n address: poolAddress,\n abi: UniswapV3PoolABI,\n functionName: 'token1'\n }) as Promise<`0x${string}`>\n ]);\n\n // Step 2: Calculate limit price\n const limitPriceParams: CalculateLimitPriceParams = {\n pool: poolAddress,\n slippageBP: params.swapSlippageBP,\n zeroForOne,\n ammType: params.ammType,\n token0,\n token1\n };\n\n const limitPriceResult = await calculateLimitPrice(this.publicClient, limitPriceParams);\n if (!limitPriceResult.success || limitPriceResult.data === null) {\n return {\n data: null,\n status: limitPriceResult.status,\n success: false,\n error: limitPriceResult.error || 'Failed to calculate limit price'\n };\n }\n\n const sqrtPriceLimitX96 = limitPriceResult.data;\n\n let fee = 3000;\n if (params.ammType === AMMType.UniswapV3) {\n fee = await this.publicClient.readContract({\n address: poolAddress,\n abi: UniswapV3PoolABI,\n functionName: 'fee'\n }) as number;\n }\n // Get pool fee from the contract\n\n let vaultDetails: VaultDetails | AlgebraVaultDetails;\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(chainId, 'SteerPeriphery');\n if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n let protocol: Protocol | null;\n\n try {\n // First try regular vault\n vaultDetails = await this.publicClient.readContract({\n address: params.vault,\n abi: PERIPHERY_ABI,\n functionName: 'vaultDetailsByAddress',\n args: [params.vault]\n }) as VaultDetails;\n\n protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\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: [params.vault]\n }) as AlgebraVaultDetails;\n\n protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\n }\n // Step 3: Simulate swap\n const simulateSwapParams: SwapWithSlippageParams = {\n poolAddress: poolAddress,\n recipient: params.receiver, // For simulation, use receiver address\n zeroForOne,\n amountSpecified: swapAmount,\n sqrtPriceLimitX96,\n ammType: params.ammType,\n tokenIn: zeroForOne ? token0 : token1,\n tokenOut: zeroForOne ? token1 : token0,\n fee,\n protocol\n };\n\n const swapSimulationResult = await simulateSwapWithSlippage(\n this.publicClient, \n simulateSwapParams, \n this.publicClient.chain?.id || 1 // Use chain ID from public client, fallback to mainnet\n );\n if (!swapSimulationResult.success || !swapSimulationResult.data) {\n return {\n data: null,\n status: swapSimulationResult.status,\n success: false,\n error: swapSimulationResult.error || 'Failed to simulate swap'\n };\n }\n\n const swapSimulation = swapSimulationResult.data;\n\n // Step 4: Estimate LP tokens\n const lpEstimationResult = await estimateLpTokens(this.publicClient, {\n vault: params.vault,\n originalAssets: params.assets,\n swapAmount,\n swapResult: swapSimulation.swapSimulation,\n isToken0: params.isToken0\n });\n\n if (!lpEstimationResult.success || !lpEstimationResult.data) {\n return {\n data: null,\n status: lpEstimationResult.status,\n success: false,\n error: lpEstimationResult.error || 'Failed to estimate LP tokens'\n };\n }\n\n const lpEstimation = lpEstimationResult.data;\n\n return {\n data: {\n swapAmount,\n currentSqrtPrice: sqrtPrice,\n sqrtPriceLimitX96,\n swapSimulation,\n lpEstimation,\n zeroForOne\n },\n status: 200,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to preview single-asset deposit'\n };\n }\n }\n\n /**\n * Executes a single-asset deposit transaction\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the transaction hash\n * \n * @example\n * ```typescript\n * const result = await client.deposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * });\n * \n * if (result.success) {\n * console.log('Transaction hash:', result.data);\n * }\n * ```\n */\n public async deposit(params: SingleAssetDepositParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) {\n throw new Error('No account found');\n }\n\n const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(\n this.publicClient.chain?.id || 1,\n 'SingleAssetDeposit'\n )\n\n // Prepare the transaction\n const { request } = await this.publicClient.simulateContract({\n address: singleAssentDeposit as Address,\n abi: singleTokenDepositAbi,\n functionName: 'deposit',\n args: [\n params.assets,\n params.receiver,\n params.vault,\n params.isToken0,\n params.depositSlippagePercent,\n params.swapSlippageBP,\n params.ammType\n ],\n account: account[0]\n });\n\n // Execute the transaction\n const hash = await this.walletClient.writeContract(request);\n\n return {\n data: hash,\n status: 200,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to execute single-asset deposit'\n };\n }\n }\n\n /**\n * Prepares a single-asset deposit transaction without executing it\n * Useful for batching transactions or custom execution logic\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the prepared transaction data\n */\n public async prepareDepositTx(params: SingleAssetDepositParams) {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) {\n throw new Error('No account found');\n }\n\n const chainId = await this.publicClient.getChainId();\n\n const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(\n chainId,\n 'SingleAssetDeposit'\n )\n // await this.publicClient.simulateContract({\n // address: singleAssentDeposit as Address,\n // abi: singleTokenDepositAbi,\n // functionName: 'deposit',\n // args: [\n // params.assets,\n // params.receiver,\n // params.vault,\n // params.isToken0,\n // params.depositSlippagePercent,\n // params.swapSlippageBP,\n // params.ammType\n // ],\n // account: account[0]\n // });\n\n return {\n data: {\n address: params.singleAssetDepositContract || singleAssentDeposit,\n abi: singleTokenDepositAbi,\n functionName: 'deposit' as const,\n args: [\n params.assets,\n params.receiver,\n params.vault,\n params.isToken0,\n params.depositSlippagePercent,\n params.swapSlippageBP,\n params.ammType\n ] as const\n },\n status: 200,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to prepare single-asset deposit transaction'\n };\n }\n }\n\n /**\n * Validates single-asset deposit parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\n public validateDepositParams(params: SingleAssetDepositParams): void {\n if (params.assets <= 0n) {\n throw new Error('Assets amount must be greater than 0');\n }\n\n if (!params.vault || params.vault === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid vault address');\n }\n\n if (!params.receiver || params.receiver === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid receiver address');\n }\n\n if (!params.singleAssetDepositContract || params.singleAssetDepositContract === '0x0000000000000000000000000000000000000000') {\n throw new Error('Invalid single-asset deposit contract address');\n }\n\n if (params.depositSlippagePercent > 100n) {\n throw new Error('Deposit slippage percent cannot exceed 100%');\n }\n\n if (params.swapSlippageBP > 10000) {\n throw new Error('Swap slippage BP cannot exceed 10000 (100%)');\n }\n\n if (!Object.values(AMMType).includes(params.ammType)) {\n throw new Error('Invalid AMM type');\n }\n }\n} ","// Export all types\nexport * from './types.js';\n\n// Export individual functions for separate testing and usage\nexport { calculateSwapAmount } from './calculateSwapAmount.js';\nexport { calculateLimitPrice, getPoolSlot0 } from './calculateLimitPrice.js';\nexport { simulateSwap, determineSwapDirection, validateSwapParams } from './simulateSwap.js';\nexport { estimateLpTokens, getVaultReserves } from './estimateLpTokens.js';\n\n// Export the main client\nexport { SingleAssetDepositClient } from './singleAssetDeposit.js';\n\n/**\n * @fileoverview Single-Asset Deposit Module\n * \n * This module provides comprehensive functionality for single-asset deposits into liquidity vaults.\n * The process allows users to deposit only one token (token0 or token1), while the contract \n * internally performs a swap to balance the token pair before depositing into the vault.\n * \n * ## Architecture\n * \n * The single-asset deposit process is broken down into separate, testable functions:\n * \n * 1. **calculateSwapAmount** - Determines how much of the input token needs to be swapped\n * 2. **calculateLimitPrice** - Calculates slippage protection limits for the internal swap\n * 3. **simulateSwap** - Simulates the swap to preview expected output amounts\n * 4. **estimateLpTokens** - Estimates the final LP tokens that will be received\n * 5. **SingleAssetDepositClient** - Main orchestrator that combines all steps\n * \n * ## Supported AMM Types\n * \n * Currently supports:\n * - UniswapV3 (fully implemented)\n * - Algebra variants (planned for future implementation)\n * \n * ## Example Usage\n * \n * ```typescript\n * import { SingleAssetDepositClient, AMMType } from '@steerprotocol/sdk';\n * import { parseEther } from 'viem';\n * \n * // Initialize the client\n * const client = new SingleAssetDepositClient(publicClient, walletClient);\n * \n * // Preview the deposit\n * const preview = await client.previewDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * }, poolAddress);\n * \n * if (preview.success) {\n * console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n * \n * // Execute the deposit\n * const result = await client.deposit(params);\n * if (result.success) {\n * console.log('Transaction hash:', result.data);\n * }\n * }\n * ```\n * \n * ## Testing Individual Functions\n * \n * Each function can be tested separately:\n * \n * ```typescript\n * import { calculateSwapAmount, AMMType } from '@steerprotocol/sdk';\n * \n * // Test swap amount calculation\n * const result = await calculateSwapAmount(publicClient, {\n * depositAmount: parseEther('100'),\n * isToken0: true,\n * vault: vaultAddress,\n * pool: poolAddress,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * });\n * ```\n */ ","import { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport { AlgebraVaultDetails, SteerResponse, VaultDetails } from '../../../types.js';\nimport { TokensFromLpResponse, VaultWithdrawParams } from './types.js';\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\nexport class VaultWithdrawClient {\n constructor(\n protected readonly publicClient: PublicClient,\n protected readonly walletClient: WalletClient\n ) {}\n\n /**\n * Withdraws tokens from a vault\n * @param params The withdrawal parameters\n */\n public async withdraw(params: VaultWithdrawParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'withdraw',\n args: [\n params.shares,\n params.amount0Min,\n params.amount1Min,\n params.to ?? account[0]\n ],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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\n /**\n * Prepares the transaction data for withdrawing tokens from a vault without executing it\n * @param params The withdrawal parameters\n */\n public async prepareWithdrawTx(params: VaultWithdrawParams): Promise<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: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [\n bigint,\n bigint,\n bigint,\n Address\n ];\n }>> {\n try {\n const account = await this.walletClient.getAddresses();\n\n if (!params.to) {\n if (!account[0]) throw new Error('No account found');\n }\n\n // Prepare the complete contract interaction data\n return {\n data: {\n address: params.vaultAddress,\n abi: [{\n type: 'function',\n inputs: [\n { name: 'shares', 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: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable'\n }],\n functionName: 'withdraw',\n args: [\n params.shares,\n 0n,\n 0n,\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 * Calculates the amount of tokens that would be received for a given amount of LP tokens\n * @param vaultAddress The vault address\n * @param lpToken The amount of LP tokens to calculate for\n */\n public async getTokensFromLp(\n vaultAddress: Address,\n lpToken: bigint\n ): Promise<SteerResponse<TokensFromLpResponse>> {\n try {\n // Get chain ID and periphery address\n const chainId = await this.publicClient.getChainId();\n const steerPeripheryAddress = getContractAddressByChainIdAndContractName(chainId, 'SteerPeriphery');\n if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n // Try to get vault details, first attempt with regular vault\n let vaultDetails: VaultDetails | AlgebraVaultDetails;\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 // Calculate token amounts based on LP token proportion\n const token0Val = vaultDetails.totalLPTokensIssued > 0n\n ? (vaultDetails.token0Balance * lpToken) / vaultDetails.totalLPTokensIssued\n : BigInt(1);\n\n const token1Val = vaultDetails.totalLPTokensIssued > 0n\n ? (vaultDetails.token1Balance * lpToken) / vaultDetails.totalLPTokensIssued\n : BigInt(1);\n\n return {\n data: {\n token0Val,\n token1Val\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} ","import { createClient } from '@steerprotocol/api-sdk';\nimport { Pool as PoolV3 } from \"@uniswap/v3-sdk\";\nimport type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { chainIdToName, getBeaconNameByProtocol, getProtocolTypeByBeacon } from '../const/index.js';\nimport { getAmmConfig } from '../const/amm/configs/ammConfig.js';\nimport { getProtocolsForChainId } from '../const/amm/utils/protocol.js';\nimport { ChainId, MultiPositionManagers, Protocol } from '../const/chain.js';\nimport { steerSubgraphConfig } from '../const/subgraph.js';\nimport { SubgraphVaultClient } from '../utils/SubgraphVaultClient.js';\nimport { getApiUrl } from '../const/api.js';\nimport { abis } from '../const/deployments/abis.js';\nimport { SteerResponse, VaultDetailsResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { VaultDepositClient } from './vault/deposit/index.js';\nimport { PoolInstanceParams, VaultDepositParams } from './vault/deposit/types.js';\nimport { SingleAssetDepositClient } from './vault/single-asset/index.js';\nimport type {\n SingleAssetDepositParams,\n SingleAssetDepositPreview\n} from './vault/single-asset/types.js';\nimport { VaultWithdrawClient } from './vault/withdraw/index.js';\nimport { TokensFromLpResponse, VaultWithdrawParams } from './vault/withdraw/types.js';\nexport * from \"./vault/single-asset/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\n\n// Custom ABI for reward functions\nconst REWARD_FUNCTIONS_ABI = [\n {\n \"type\": \"function\",\n \"name\": \"calculatePendingRewards\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"rewards\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"extraRewards\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimUserRewards\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n \n] as const;\n\nexport interface VaultApproveParams {\n vaultAddress: Address;\n spender: Address;\n amount: bigint;\n}\n\nexport interface VaultAllowanceParams {\n vaultAddress: Address;\n owner: Address;\n spender: Address;\n}\n\nexport interface VaultBalanceParams {\n vaultAddress: Address;\n account: Address;\n}\n\n// Pagination interfaces matching API SDK types\nexport interface ApiPageInfo {\n hasNextPage: boolean;\n endCursor: string | null;\n}\n\nexport interface VaultNode {\n id: string;\n chainId: number;\n vaultAddress: string;\n protocol: string;\n beaconName: string;\n protocolBaseType: string;\n name: string;\n feeApr?: number;\n stakingApr?: number;\n merklApr?: number;\n /** Raw positions from the subgraph. Only available when sourced from subgraph. */\n positions?: {\n id: string;\n upperTick: number;\n lowerTick: number;\n relativeWeight: string;\n }[];\n /** Computed tick range across all current positions (min lower / max upper). Only available when sourced from subgraph. */\n tickRange?: {\n minLowerTick: number;\n maxUpperTick: number;\n };\n /** Cumulative fees collected by the vault. Only available when sourced from subgraph. */\n fees?: {\n fees0: string;\n fees1: string;\n };\n pool: {\n poolAddress: string;\n id: string;\n feeTier: string;\n tick?: string;\n liquidity?: string;\n volumeUSD?: string;\n totalValueLockedUSD?: string;\n };\n token0: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n token1: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n}\n\nexport interface VaultEdge {\n cursor: string;\n node: VaultNode;\n}\n\nexport interface VaultsConnection {\n edges: readonly VaultEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface TokenNode {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n chainId: number;\n address: string;\n}\n\nexport interface TokenEdge {\n cursor: string;\n node: TokenNode;\n}\n\nexport interface TokensConnection {\n edges: readonly TokenEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface PoolNode {\n id: string;\n chainId: number;\n feeTier: string;\n token0: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n token1: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n}\n\nexport interface PoolEdge {\n cursor: string;\n node: PoolNode;\n}\n\nexport interface PoolsConnection {\n edges: readonly PoolEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface VaultFilter {\n chainId?: number;\n protocol?: string;\n isActive?: boolean;\n beaconName?: string;\n poolAddress?: string;\n vaultAddress?: string;\n tokenAddress?: string;\n tokenAddresses?: string[];\n tokenSymbol?: string;\n tokenSymbols?: string[];\n}\n\n// API-specific filter that excludes protocol field\nexport interface ApiVaultFilter {\n chainId?: number;\n isActive?: boolean;\n beaconName?: string;\n pool?: string;\n}\n\nexport interface TokenFilter {\n chainId?: number;\n symbol?: string;\n}\n\nexport interface PoolFilter {\n chainId?: number;\n protocol?: string;\n minLiquidity?: string;\n}\n\nexport interface VaultApr {\n apr: {\n apr: number;\n message: string;\n };\n beaconName: string;\n vaultAddress: string;\n}\n\nexport interface AprResponse {\n vaults: VaultApr[];\n}\n\nexport interface AprFilter {\n chainId: number;\n protocol: string;\n}\n\nexport interface PendingRewardsParams {\n vaultAddress: Address;\n user: Address;\n}\n\nexport interface PendingRewardsResponse {\n rewards: bigint;\n extraRewards: bigint;\n}\n\nexport interface ClaimRewardsParams {\n vaultAddress: Address;\n}\n\nexport interface BlackholeAprDetailedParams {\n vaultAddress: Address;\n chainId: number;\n}\n\nexport interface BlackholeSnapshotAnalysis {\n period: number;\n fromTimestamp: number;\n toTimestamp: number;\n fromDate: string;\n toDate: string;\n durationSeconds: number;\n durationHours: number;\n tvlUSD: number;\n feesUSD: number;\n apr: number;\n}\n\nexport interface BlackholeAprDetailedResponse {\n vaultAddress: string;\n beaconName: string;\n apr: {\n apr: number;\n message: string;\n };\n snapshotAnalysis: BlackholeSnapshotAnalysis[];\n}\n\n/**\n * Client for interacting with Steer Protocol's Vault system.\n * This client provides functionality for vault operations, deposit/withdraw, and comprehensive data fetching.\n * \n * **Features:**\n * - Vault data includes associated pool information (pool address, fee tier) along with token details\n * - Full pagination support for all data fetching methods\n * - API client integration for efficient data retrieval\n * - Backward compatibility with subgraph queries\n * \n * **Available API Client Methods:**\n * - `getVaults()` - Get vaults with pagination and filtering\n * - `getTokens()` - Get tokens with pagination and filtering\n * - `getPools()` - Get pools with pagination and filtering\n * - `getAllVaults()` - Get all vaults (auto-pagination)\n * - `getAllTokens()` - Get all tokens (auto-pagination)\n * - `getAllPools()` - Get all pools (auto-pagination)\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { VaultClient } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * // Initialize the Vault client\n * const vaultClient = new VaultClient(publicClient, walletClient, 'production');\n * \n * // Get vaults with pagination - includes pool information\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 10, null);\n * \n * if (vaults.success && vaults.data) {\n * vaults.data.edges.forEach((edge) => {\n * const vault = edge.node;\n * console.log(`${vault.token0.symbol}/${vault.token1.symbol} vault`);\n * console.log(`Pool: ${vault.pool.id} (${vault.pool.feeTier} fee tier)`);\n * console.log(`Protocol: ${vault.protocol} (${vault.beaconName})`);\n * });\n * }\n * \n * // Get all tokens for a chain\n * const allTokens = await vaultClient.getAllTokens({ chainId: 1 });\n * \n * // Get pools with specific filters\n * const pools = await vaultClient.getPools({ \n * chainId: 1, \n * protocol: 'uniswap-v3' \n * });\n * \n * // Traditional vault operations\n * const depositTx = await vaultClient.deposit(depositParams);\n * const withdrawTx = await vaultClient.withdraw(withdrawParams);\n * ```\n * \n * @group Client\n */\nexport class VaultClient extends SubgraphClient {\n protected readonly apiClient: ReturnType<typeof createClient>;\n protected readonly publicClient: PublicClient;\n protected readonly walletClient: WalletClient;\n private readonly depositClient: VaultDepositClient;\n private readonly withdrawClient: VaultWithdrawClient;\n public readonly singleAssetDepositClient: SingleAssetDepositClient;\n private readonly subgraphVaultClient: SubgraphVaultClient;\n private readonly subgraphStudioKey: string;\n\n /**\n * Creates a new instance of VaultClient\n * @param publicClient - The public client for reading from the blockchain\n * @param walletClient - The wallet client for writing to the blockchain\n * @param environment - The environment to use ('production' or 'development')\n * @param version - Optional API version to use (defaults to 'v1')\n * @param subgraphStudioKey - Optional subgraph studio key for protocol data fetching\n */\n constructor(\n publicClient: PublicClient, \n walletClient: WalletClient,\n environment: 'production' | 'development',\n version: 'v1' = 'v1',\n subgraphStudioKey?: string\n ) {\n const combinedClient = publicClient as PublicClient & WalletClient;\n super(combinedClient);\n \n const apiUrl = getApiUrl(environment, version);\n this.apiClient = createClient(apiUrl);\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n this.depositClient = new VaultDepositClient(publicClient, walletClient);\n this.withdrawClient = new VaultWithdrawClient(publicClient, walletClient);\n this.singleAssetDepositClient = new SingleAssetDepositClient(publicClient, walletClient);\n this.subgraphVaultClient = new SubgraphVaultClient();\n this.subgraphStudioKey = subgraphStudioKey || '';\n }\n\n private normalizeProtocolValue(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n }\n\n private resolveProtocolEnum(protocol?: string): Protocol | null {\n if (!protocol) {\n return null;\n }\n\n const normalizedProtocol = this.normalizeProtocolValue(protocol);\n const matchedProtocol = Object.values(Protocol).find(\n protocolValue => this.normalizeProtocolValue(protocolValue) === normalizedProtocol\n );\n\n return matchedProtocol || null;\n }\n\n private getProtocolBeaconNames(protocol?: string): string[] {\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n if (!resolvedProtocol) {\n return [];\n }\n\n const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n const beaconNames: string[] = [];\n\n if (protocolConfig?.beaconContract) {\n beaconNames.push(protocolConfig.beaconContract);\n }\n\n if (protocolConfig?.beaconContractSushiManaged) {\n beaconNames.push(protocolConfig.beaconContractSushiManaged);\n }\n\n if (resolvedProtocol === Protocol.Blackhole) {\n beaconNames.push(MultiPositionManagers.MultiPositionBlackholeOld);\n }\n\n const beaconAlias = getBeaconNameByProtocol(resolvedProtocol);\n if (beaconAlias) {\n beaconNames.push(beaconAlias);\n }\n\n return [...new Set(beaconNames.filter(name => name.length > 0))];\n }\n\n private getPrimaryProtocolBeaconName(protocol?: string): string | null {\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n if (!resolvedProtocol) {\n return null;\n }\n\n const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n return protocolConfig?.beaconContract || null;\n }\n\n private buildApiVaultFilter(filter?: VaultFilter): ApiVaultFilter | undefined {\n if (!filter) {\n return undefined;\n }\n\n const { protocol, poolAddress, chainId, isActive, beaconName } = filter;\n const apiFilter: ApiVaultFilter = {\n chainId,\n isActive,\n beaconName,\n };\n\n if (poolAddress) {\n apiFilter.pool = poolAddress;\n }\n\n if (!apiFilter.beaconName && protocol) {\n const primaryBeaconName = this.getPrimaryProtocolBeaconName(protocol);\n if (primaryBeaconName) {\n apiFilter.beaconName = primaryBeaconName;\n }\n }\n\n return apiFilter;\n }\n\n private vaultMatchesProtocolFilter(\n vault: VaultNode,\n protocolFilter: string,\n resolvedProtocol: Protocol | null\n ): boolean {\n const normalizedFilter = this.normalizeProtocolValue(protocolFilter);\n const normalizedBeaconName = this.normalizeProtocolValue(vault.beaconName);\n const resolvedVaultProtocol = getProtocolTypeByBeacon(vault.beaconName);\n\n const directCandidates = [vault.protocol, vault.protocolBaseType, resolvedVaultProtocol || ''];\n const hasDirectMatch = directCandidates.some(candidate => {\n if (!candidate) {\n return false;\n }\n return this.normalizeProtocolValue(candidate) === normalizedFilter;\n });\n\n if (hasDirectMatch) {\n return true;\n }\n\n const expectedBeacon = resolvedProtocol\n ? getBeaconNameByProtocol(resolvedProtocol)\n : protocolFilter;\n const normalizedExpectedBeacon = this.normalizeProtocolValue(expectedBeacon);\n\n return normalizedExpectedBeacon.length > 0 && normalizedBeaconName.includes(normalizedExpectedBeacon);\n }\n\n private applyProtocolFilter(vaultsConnection: VaultsConnection, protocol?: string): VaultsConnection {\n if (!protocol) {\n return vaultsConnection;\n }\n\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n const filteredEdges = vaultsConnection.edges.filter(edge =>\n this.vaultMatchesProtocolFilter(edge.node, protocol, resolvedProtocol)\n );\n\n return {\n ...vaultsConnection,\n edges: filteredEdges\n };\n }\n\n private normalizeAddress(value?: string): string {\n return value?.toLowerCase() || '';\n }\n\n private normalizeSymbol(value?: string): string {\n return value?.trim().toLowerCase() || '';\n }\n\n private matchesAnyAddress(candidates: Array<string | undefined>, filterValues: string[]): boolean {\n if (filterValues.length === 0) {\n return true;\n }\n\n const normalizedCandidates = new Set(\n candidates.map((candidate) => this.normalizeAddress(candidate)).filter(Boolean),\n );\n\n return filterValues.some((value) => normalizedCandidates.has(value));\n }\n\n private matchesAnySymbol(candidates: Array<string | undefined>, filterValues: string[]): boolean {\n if (filterValues.length === 0) {\n return true;\n }\n\n const normalizedCandidates = new Set(\n candidates.map((candidate) => this.normalizeSymbol(candidate)).filter(Boolean),\n );\n\n return filterValues.some((value) => normalizedCandidates.has(value));\n }\n\n private filterVaultNodes(vaults: VaultNode[], filter: VaultFilter): VaultNode[] {\n const vaultAddress = this.normalizeAddress(filter.vaultAddress);\n const poolAddress = this.normalizeAddress(filter.poolAddress);\n const tokenAddressFilters = [\n ...(filter.tokenAddress ? [filter.tokenAddress] : []),\n ...(filter.tokenAddresses || []),\n ]\n .map((address) => this.normalizeAddress(address))\n .filter(Boolean);\n const tokenSymbolFilters = [\n ...(filter.tokenSymbol ? [filter.tokenSymbol] : []),\n ...(filter.tokenSymbols || []),\n ]\n .map((symbol) => this.normalizeSymbol(symbol))\n .filter(Boolean);\n\n return vaults.filter((vault) => {\n if (vaultAddress && this.normalizeAddress(vault.vaultAddress) !== vaultAddress) {\n return false;\n }\n\n if (\n poolAddress &&\n !this.matchesAnyAddress([vault.pool.poolAddress, vault.pool.id], [poolAddress])\n ) {\n return false;\n }\n\n if (\n !this.matchesAnyAddress(\n [vault.token0.address, vault.token0.id, vault.token1.address, vault.token1.id],\n tokenAddressFilters,\n )\n ) {\n return false;\n }\n\n if (\n !this.matchesAnySymbol(\n [vault.token0.symbol, vault.token1.symbol],\n tokenSymbolFilters,\n )\n ) {\n return false;\n }\n\n return true;\n });\n }\n\n /**\n * Gets vaults with pagination support\n * Fetches ALL data from both API (database) and subgraph in parallel, merges without duplicates, then paginates\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated vaults data\n * \n * @example\n * ```typescript\n * // Get first 20 vaults for Ethereum\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 20);\n * \n * if (vaults.success && vaults.data) {\n * vaults.data.edges.forEach((edge) => {\n * const vault = edge.node;\n * console.log(`Vault: ${vault.name}`);\n * console.log(`Pool: ${vault.pool.id}`);\n * console.log(`Pool Fee Tier: ${vault.pool.feeTier}`);\n * console.log(`Tokens: ${vault.token0.symbol}/${vault.token1.symbol}`);\n * });\n * }\n * \n * // Get next page using cursor\n * if (vaults.data?.pageInfo.hasNextPage) {\n * const nextPage = await vaultClient.getVaults(\n * { chainId: 1 }, \n * 20, \n * vaults.data.pageInfo.endCursor\n * );\n * }\n * \n * // For additional pool details (liquidity, volume, etc.), use the PoolClient:\n * // const poolDetails = await poolClient.getPoolById(vault.pool.id, protocol, chainId);\n * ```\n */\n public async getVaults(\n filter?: VaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n const apiFilter = this.buildApiVaultFilter(filter);\n\n // Fetch ALL vaults from both sources in parallel (no pagination at source level)\n const [apiResult, subgraphResult] = await Promise.allSettled([\n this.getAllVaultsFromApi(apiFilter),\n filter?.chainId !== ChainId.Avalanche ? this.getAllVaultsFromSubgraph(filter) : Promise.reject(new Error('Avalanche not supported'))\n ]);\n\n // Extract successful results\n const apiVaults: VaultEdge[] = apiResult.status === 'fulfilled' && apiResult.value.success && apiResult.value.data \n ? apiResult.value.data\n : [];\n \n const subgraphVaults: VaultEdge[] = subgraphResult.status === 'fulfilled' && subgraphResult.value.success && subgraphResult.value.data \n ? subgraphResult.value.data\n : [];\n\n // If both failed, return error\n if (apiVaults.length === 0 && subgraphVaults.length === 0) {\n const apiError = apiResult.status === 'rejected' ? apiResult.reason : null;\n const subgraphError = subgraphResult.status === 'rejected' ? subgraphResult.reason : null;\n \n return {\n data: null,\n status: 500,\n success: false,\n error: `Both API and subgraph failed. API: ${apiError?.message || 'Unknown error'}. Subgraph: ${subgraphError?.message || 'Unknown error'}`\n };\n }\n\n // Merge results and remove duplicates based on vaultAddress\n const mergedVaults = this.mergeVaultResults(apiVaults, subgraphVaults);\n\n // Apply protocol filter to merged results\n const filteredVaults = mergedVaults.filter(edge => \n !filter?.protocol || this.vaultMatchesProtocolFilter(edge.node, filter.protocol, this.resolveProtocolEnum(filter.protocol))\n );\n\n // Apply pagination to the complete merged and filtered dataset\n const paginatedVaults = this.paginateVaults(filteredVaults, first, after);\n\n return {\n data: paginatedVaults,\n status: 200,\n success: true\n };\n }\n\n /**\n * Fetches ALL vaults from API (database) by auto-paginating\n * @private\n */\n private async getAllVaultsFromApi(\n apiFilter?: ApiVaultFilter\n ): Promise<SteerResponse<VaultEdge[]>> {\n try {\n const allVaults: VaultEdge[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n const batchSize = 100; // Fetch in batches of 100\n\n while (hasNextPage) {\n const response = await this.getVaultsFromApi(apiFilter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n // If we already have some vaults, return them; otherwise return error\n if (allVaults.length > 0) {\n break;\n }\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch vaults from API'\n };\n }\n\n allVaults.push(...response.data.edges);\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allVaults,\n status: 200,\n success: true\n };\n } catch (error) {\n console.warn('Failed to fetch all vaults from API:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch all vaults from API'\n };\n }\n }\n\n /**\n * Fetches vaults from API (database) with pagination\n * @private\n */\n private async getVaultsFromApi(\n apiFilter?: ApiVaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n try {\n const response = await this.apiClient.vaults({\n filter: apiFilter,\n first,\n after\n });\n\n if (!response.data?.vaults) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: 'No data returned from API'\n };\n }\n\n // Transform the response to match our interface\n const transformedData: VaultsConnection = {\n edges: response.data.vaults.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n chainId: edge.node.chainId,\n vaultAddress: edge.node.vaultAddress,\n protocol: edge.node.protocol,\n beaconName: edge.node.beaconName,\n protocolBaseType: edge.node.protocolBaseType,\n name: edge.node.name || '',\n feeApr: edge.node.feeApr || undefined,\n stakingApr: edge.node.stakingApr || undefined,\n merklApr: edge.node.merklApr || undefined,\n pool: {\n id: edge.node.pool?.id || '',\n poolAddress: edge.node.pool?.poolAddress || '',\n feeTier: edge.node.pool?.feeTier || '',\n tick: undefined, // Not available in API response\n liquidity: undefined, // Not available in API response\n volumeUSD: undefined, // Not available in API response\n totalValueLockedUSD: undefined // Not available in API response\n },\n token0: {\n id: edge.node.token0?.id || '',\n symbol: edge.node.token0?.symbol || '',\n name: edge.node.token0?.name || '',\n decimals: edge.node.token0?.decimals || 0,\n address: edge.node.token0?.address || '',\n chainId: edge.node.token0?.chainId || 0\n },\n token1: {\n id: edge.node.token1?.id || '',\n symbol: edge.node.token1?.symbol || '',\n name: edge.node.token1?.name || '',\n decimals: edge.node.token1?.decimals || 0,\n address: edge.node.token1?.address || '',\n chainId: edge.node.token1?.chainId || 0\n }\n }\n })),\n pageInfo: {\n hasNextPage: response.data.vaults.pageInfo.hasNextPage,\n endCursor: response.data.vaults.pageInfo.endCursor ?? null\n },\n totalCount: response.data.vaults.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n console.warn('API client failed:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n };\n }\n }\n\n /**\n * Merges vault results from API and subgraph, removing duplicates\n * Prioritizes API data when duplicates are found\n * Generates consistent cursors for the merged dataset\n * @private\n */\n private mergeVaultResults(apiVaults: VaultEdge[], subgraphVaults: VaultEdge[]): VaultEdge[] {\n const vaultMap = new Map<string, VaultEdge>();\n\n // Add API vaults first (they take priority)\n apiVaults.forEach(edge => {\n const key = edge.node.vaultAddress.toLowerCase();\n vaultMap.set(key, edge);\n });\n\n // Add subgraph vaults only if not already present\n subgraphVaults.forEach(edge => {\n const key = edge.node.vaultAddress.toLowerCase();\n if (!vaultMap.has(key)) {\n vaultMap.set(key, edge);\n } else {\n // Merge additional data from subgraph if available (like pool details)\n const existing = vaultMap.get(key)!;\n const merged: VaultEdge = {\n ...existing,\n node: {\n ...existing.node,\n // Merge pool data - prefer subgraph data for pool details if API doesn't have it\n pool: {\n id: existing.node.pool.id || edge.node.pool.id,\n poolAddress: existing.node.pool.poolAddress || edge.node.pool.poolAddress,\n feeTier: existing.node.pool.feeTier || edge.node.pool.feeTier,\n tick: existing.node.pool.tick || edge.node.pool.tick,\n liquidity: existing.node.pool.liquidity || edge.node.pool.liquidity,\n volumeUSD: existing.node.pool.volumeUSD || edge.node.pool.volumeUSD,\n totalValueLockedUSD: existing.node.pool.totalValueLockedUSD || edge.node.pool.totalValueLockedUSD\n },\n // Prefer API APR data, but use subgraph if API doesn't have it\n feeApr: existing.node.feeApr ?? edge.node.feeApr,\n stakingApr: existing.node.stakingApr ?? edge.node.stakingApr,\n merklApr: existing.node.merklApr ?? edge.node.merklApr,\n // Subgraph-only fields: always take from subgraph when available\n positions: existing.node.positions ?? edge.node.positions,\n tickRange: existing.node.tickRange ?? edge.node.tickRange,\n fees: existing.node.fees ?? edge.node.fees,\n }\n };\n vaultMap.set(key, merged);\n }\n });\n\n // Convert to array and regenerate cursors for consistent pagination\n const mergedArray = Array.from(vaultMap.values());\n return mergedArray.map((edge, index) => ({\n ...edge,\n cursor: `merged_${edge.node.chainId}_${index}_${edge.node.vaultAddress.toLowerCase()}`\n }));\n }\n\n /**\n * Applies pagination to vault results\n * @private\n */\n private paginateVaults(vaults: VaultEdge[], first: number, after?: string | null): VaultsConnection {\n let startIndex = 0;\n\n // If cursor is provided, find the starting position\n if (after) {\n const cursorIndex = vaults.findIndex(edge => edge.cursor === after);\n if (cursorIndex !== -1) {\n startIndex = cursorIndex + 1;\n }\n }\n\n // Get the slice of vaults for this page\n const paginatedEdges = vaults.slice(startIndex, startIndex + first);\n const hasNextPage = startIndex + first < vaults.length;\n const endCursor = paginatedEdges.length > 0 ? paginatedEdges[paginatedEdges.length - 1].cursor : null;\n\n return {\n edges: paginatedEdges,\n pageInfo: {\n hasNextPage,\n endCursor\n },\n totalCount: vaults.length\n };\n }\n\n /**\n * Fetches ALL vaults from subgraph (no pagination)\n * @param filter - Optional filter criteria\n * @returns Promise resolving to all vaults data from subgraph\n * @private\n */\n private async getAllVaultsFromSubgraph(\n filter?: VaultFilter\n ): Promise<SteerResponse<VaultEdge[]>> {\n try {\n // Extract chainId from filter\n const chainId = filter?.chainId;\n if (!chainId) {\n throw new Error('ChainId is required for subgraph');\n }\n\n // Get chain enum from chainId\n const chain = chainIdToName(chainId);\n \n if (!chain) { \n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n // Get subgraph URL for this chain\n const subgraphUrl = steerSubgraphConfig[chain];\n if (!subgraphUrl) {\n throw new Error(`No subgraph configured for chain: ${chain}`);\n }\n\n const beaconNames = this.getProtocolBeaconNames(filter?.protocol);\n\n if (filter?.beaconName) {\n beaconNames.push(filter.beaconName);\n }\n\n const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n // Fetch all vaults from subgraph\n const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n subgraphUrl,\n chainId,\n showDeprecated: false,\n showCurrentProtocol: uniqueBeaconNames.length > 0,\n beaconNames: uniqueBeaconNames\n });\n\n // Get all supported protocols for this chain\n const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n \n // Fetch APR data for all protocols in parallel\n const aprPromises = supportedProtocols.map(protocol => \n this.getAprs({ chainId, protocol }).catch(error => {\n console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n return { success: false, data: null };\n })\n );\n\n const aprResults = await Promise.all(aprPromises);\n \n // Create a map of vault address to APR for quick lookup\n const aprMap = new Map<string, number>();\n aprResults && aprResults.forEach(aprResult => {\n if (aprResult.success && aprResult.data) {\n aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n });\n }\n });\n\n // Transform to VaultEdge array with APR data\n const vaultEdges: VaultEdge[] = subgraphVaults.map((vault, index) => {\n // Parse positions and compute tick range\n const positions = vault.positions?.map(pos => ({\n id: pos.id,\n upperTick: parseInt(pos.upperTick),\n lowerTick: parseInt(pos.lowerTick),\n relativeWeight: pos.relativeWeight\n }));\n\n // Compute tick range from positions\n let tickRange: { minLowerTick: number; maxUpperTick: number } | undefined;\n if (positions && positions.length > 0) {\n const lowerTicks = positions.map(p => p.lowerTick);\n const upperTicks = positions.map(p => p.upperTick);\n tickRange = {\n minLowerTick: Math.min(...lowerTicks),\n maxUpperTick: Math.max(...upperTicks)\n };\n }\n\n return {\n cursor: `subgraph_${chainId}_${index}`,\n node: {\n id: vault.id,\n chainId: chainId,\n vaultAddress: vault.id,\n protocol: vault.beaconName || '',\n beaconName: vault.beaconName || '',\n protocolBaseType: vault.beaconName || '',\n name: `${vault.token0Symbol}/${vault.token1Symbol}`,\n feeApr: aprMap.get(vault.id.toLowerCase()),\n stakingApr: undefined,\n merklApr: undefined,\n positions,\n tickRange,\n fees: vault.fees0 && vault.fees1 ? {\n fees0: vault.fees0,\n fees1: vault.fees1\n } : undefined,\n pool: {\n id: vault.pool || '',\n poolAddress: vault.pool || '',\n feeTier: vault.feeTier || '',\n tick: undefined,\n liquidity: undefined,\n volumeUSD: undefined,\n totalValueLockedUSD: undefined\n },\n token0: {\n id: vault.token0,\n symbol: vault.token0Symbol,\n name: vault.token0Symbol, // Use symbol as name since subgraph doesn't provide name\n decimals: parseInt(vault.token0Decimals) || 18,\n address: vault.token0,\n chainId: chainId\n },\n token1: {\n id: vault.token1,\n symbol: vault.token1Symbol,\n name: vault.token1Symbol, // Use symbol as name since subgraph doesn't provide name\n decimals: parseInt(vault.token1Decimals) || 18,\n address: vault.token1,\n chainId: chainId\n }\n }\n };\n });\n\n return {\n data: vaultEdges,\n status: 200,\n success: true\n };\n\n } catch (error) {\n console.error('Subgraph vault fetch failed:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch vaults from subgraph'\n };\n }\n }\n\n /**\n * Fallback method to fetch vaults from subgraph with pagination\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated vaults data from subgraph\n * @private\n */\n private async getVaultsFromSubgraph(\n filter?: VaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n try {\n // Extract chainId from filter\n const chainId = filter?.chainId;\n if (!chainId) {\n throw new Error('ChainId is required for subgraph fallback');\n }\n\n // Get chain enum from chainId\n\n const chain = chainIdToName(chainId);\n \n if (!chain) { \n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n // Get subgraph URL for this chain\n const subgraphUrl = steerSubgraphConfig[chain];\n if (!subgraphUrl) {\n throw new Error(`No subgraph configured for chain: ${chain}`);\n }\n\n const beaconNames = this.getProtocolBeaconNames(filter?.protocol);\n\n if (filter?.beaconName) {\n beaconNames.push(filter.beaconName);\n }\n\n const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n // Fetch all vaults from subgraph\n const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n subgraphUrl,\n chainId,\n showDeprecated: false,\n showCurrentProtocol: uniqueBeaconNames.length > 0,\n beaconNames: uniqueBeaconNames\n });\n\n // Get all supported protocols for this chain\n const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n \n // Fetch APR data for all protocols in parallel\n const aprPromises = supportedProtocols.map(protocol => \n this.getAprs({ chainId, protocol }).catch(error => {\n console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n return { success: false, data: null };\n })\n );\n\n const aprResults = await Promise.all(aprPromises);\n \n // Create a map of vault address to APR for quick lookup\n const aprMap = new Map<string, number>();\n aprResults && aprResults.forEach(aprResult => {\n if (aprResult.success && aprResult.data) {\n aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n });\n }\n });\n\n // Transform to VaultsConnection format with pagination and populate APR data\n const vaultsConnection = this.subgraphVaultClient.transformToVaultsConnection(\n subgraphVaults,\n chainId,\n first,\n aprMap,\n after\n );\n\n // Enhance vault data with APR information\n if (vaultsConnection.edges) {\n vaultsConnection.edges = vaultsConnection.edges.map(edge => ({\n ...edge,\n node: {\n ...edge.node,\n feeApr: aprMap.get(edge.node.vaultAddress.toLowerCase()) || edge.node.feeApr\n }\n }));\n }\n\n const filteredVaultsConnection = this.applyProtocolFilter(vaultsConnection, filter?.protocol);\n\n return {\n data: filteredVaultsConnection,\n status: 200,\n success: true\n };\n\n } catch (error) {\n console.error('Subgraph vault fetch failed:', error);\n throw error;\n }\n }\n\n /**\n * Gets tokens with pagination support\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated tokens data\n * \n * @example\n * ```typescript\n * // Get first 100 tokens\n * const tokens = await vaultClient.getTokens({ chainId: 1 }, 100);\n * \n * // Filter by symbol\n * const usdcTokens = await vaultClient.getTokens({ symbol: 'USDC' });\n * ```\n */\n public async getTokens(\n filter?: TokenFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<TokensConnection>> {\n try {\n const response = await this.apiClient.tokens({\n filter,\n first,\n after\n });\n\n if (!response.data?.tokens) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n // Transform the response to match our interface\n const transformedData: TokensConnection = {\n edges: response.data.tokens.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n symbol: edge.node.symbol,\n name: edge.node.name,\n decimals: edge.node.decimals,\n chainId: edge.node.chainId,\n address: edge.node.address\n }\n })),\n pageInfo: {\n hasNextPage: response.data.tokens.pageInfo.hasNextPage,\n endCursor: response.data.tokens.pageInfo.endCursor ?? null\n },\n totalCount: response.data.tokens.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getTokens is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets pools with pagination support\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated pools data\n * \n * @example\n * ```typescript\n * // Get first 50 pools for Ethereum\n * const pools = await vaultClient.getPools({ chainId: 1 }, 50);\n * \n * // Filter by minimum liquidity\n * const liquidPools = await vaultClient.getPools({ \n * chainId: 1, \n * minLiquidity: '1000000' \n * });\n * ```\n */\n public async getPools(\n filter?: PoolFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<PoolsConnection>> {\n try {\n const response = await this.apiClient.pools({\n filter,\n first,\n after\n });\n\n if (!response.data?.pools) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n // Transform the response to match our interface\n const transformedData: PoolsConnection = {\n edges: response.data.pools.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n chainId: edge.node.chainId,\n feeTier: edge.node.feeTier,\n token0: {\n id: edge.node.token0?.id || '',\n symbol: edge.node.token0?.symbol || '',\n name: edge.node.token0?.name || '',\n decimals: edge.node.token0?.decimals || 0,\n address: edge.node.token0?.address || '',\n chainId: edge.node.token0?.chainId || 0\n },\n token1: {\n id: edge.node.token1?.id || '',\n symbol: edge.node.token1?.symbol || '',\n name: edge.node.token1?.name || '',\n decimals: edge.node.token1?.decimals || 0,\n address: edge.node.token1?.address || '',\n chainId: edge.node.token1?.chainId || 0\n }\n }\n })),\n pageInfo: {\n hasNextPage: response.data.pools.pageInfo.hasNextPage,\n endCursor: response.data.pools.pageInfo.endCursor ?? null\n },\n totalCount: response.data.pools.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getPools is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets all vaults by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all vaults data (includes pool information)\n * \n * @example\n * ```typescript\n * // Get all vaults for a specific chain\n * const allVaults = await vaultClient.getAllVaults({ chainId: 1 });\n * console.log(`Found ${allVaults.data?.length} vaults`);\n * \n * // Access pool information for each vault\n * allVaults.data?.forEach(vault => {\n * console.log(`Vault ${vault.name}: Pool ${vault.pool.id} (${vault.pool.feeTier} fee)`);\n * });\n * ```\n */\n public async getAllVaults(\n filter?: VaultFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<VaultNode[]>> {\n try {\n const allVaults: VaultNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getVaults(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch vaults'\n };\n }\n\n allVaults.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allVaults,\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 all tokens by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all tokens data\n */\n public async getAllTokens(\n filter?: TokenFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<TokenNode[]>> {\n try {\n const allTokens: TokenNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getTokens(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch tokens'\n };\n }\n\n allTokens.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allTokens,\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 all pools by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all pools data\n */\n public async getAllPools(\n filter?: PoolFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<PoolNode[]>> {\n try {\n const allPools: PoolNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getPools(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch pools'\n };\n }\n\n allPools.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allPools,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getAllPools is not supported for this configuration'\n };\n }\n }\n\n /**\n * Searches vaults by combining verified API-supported filters with local\n * filtering over the merged vault result set for unsupported server-side fields.\n */\n public async searchVaults(\n filter?: VaultFilter,\n ): Promise<SteerResponse<VaultNode[]>> {\n const response = await this.getAllVaults(filter);\n\n if (!response.success || !response.data) {\n return response;\n }\n\n return {\n data: this.filterVaultNodes(response.data, filter || {}),\n status: 200,\n success: true,\n };\n }\n\n public async getVaultByAddress(\n vaultAddress: string,\n filter?: VaultFilter,\n ): Promise<SteerResponse<VaultNode | null>> {\n const response = await this.searchVaults({\n ...filter,\n vaultAddress,\n });\n\n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: response.success,\n error: response.error,\n };\n }\n\n return {\n data: response.data[0] || null,\n status: 200,\n success: true,\n };\n }\n\n public async getVaultsForPool(\n poolAddress: string,\n filter?: VaultFilter,\n ): Promise<SteerResponse<VaultNode[]>> {\n return this.searchVaults({\n ...filter,\n poolAddress,\n });\n }\n\n public async getVaultsForToken(\n tokenAddressOrSymbol: string,\n filter?: VaultFilter,\n ): Promise<SteerResponse<VaultNode[]>> {\n const normalizedValue = tokenAddressOrSymbol.trim();\n const isAddress = /^0x[a-fA-F0-9]{40}$/.test(normalizedValue);\n\n return this.searchVaults({\n ...filter,\n ...(isAddress\n ? { tokenAddress: normalizedValue }\n : { tokenSymbol: normalizedValue }),\n });\n }\n\n /**\n * Gets APR data for vaults from the Steer Finance API\n * @param filter - Filter containing chainId and protocol\n * @returns Promise resolving to APR data for vaults\n * \n * @example\n * ```typescript\n * // Get APRs for Uniswap vaults on Nibiru (chainId: 6900)\n * const aprs = await vaultClient.getAprs({ chainId: 6900, protocol: 'Uniswap' });\n * \n * if (aprs.success && aprs.data) {\n * aprs.data.vaults.forEach(vault => {\n * console.log(`Vault: ${vault.vaultAddress}`);\n * console.log(`APR: ${vault.apr.apr}% (${vault.apr.message})`);\n * console.log(`Beacon: ${vault.beaconName}`);\n * });\n * }\n * ```\n */\n public async getAprs(filter: AprFilter): Promise<SteerResponse<AprResponse>> {\n try {\n const { chainId, protocol } = filter;\n \n // Build the API URL\n const apiUrl = `https://api.steer.finance/getAprs?chainId=${chainId}&dexName=${protocol}`;\n \n const response = await fetch(apiUrl, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: `API request failed: ${response.statusText}`\n };\n }\n\n const data: AprResponse = await response.json();\n\n return {\n data,\n status: response.status,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getAprs is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets detailed APR data for a specific Blackhole vault from the Steer Finance API\n * This includes snapshot analysis with historical APR data over different time periods\n * \n * @param params - Parameters containing vault address and chain ID\n * @returns Promise resolving to detailed APR data including snapshot analysis\n * \n * @example\n * ```typescript\n * // Get detailed APR for a Blackhole vault on Avalanche\n * const aprDetails = await vaultClient.getBlackholeAprDetailed({\n * vaultAddress: '0x5c1d454f08975c554f6b70a84fd8859fbdfcc069',\n * chainId: 43114\n * });\n * \n * if (aprDetails.success && aprDetails.data) {\n * console.log(`Vault: ${aprDetails.data.vaultAddress}`);\n * console.log(`Beacon: ${aprDetails.data.beaconName}`);\n * console.log(`Current APR: ${aprDetails.data.apr.apr}% (${aprDetails.data.apr.message})`);\n * \n * // Access snapshot analysis\n * aprDetails.data.snapshotAnalysis.forEach(snapshot => {\n * console.log(`Period ${snapshot.period}:`);\n * console.log(` Duration: ${snapshot.durationHours} hours`);\n * console.log(` TVL: $${snapshot.tvlUSD}`);\n * console.log(` Fees: $${snapshot.feesUSD}`);\n * console.log(` APR: ${snapshot.apr}%`);\n * });\n * }\n * ```\n */\n public async getBlackholeVaultApr(params: BlackholeAprDetailedParams): Promise<SteerResponse<BlackholeAprDetailedResponse>> {\n try {\n const { vaultAddress, chainId } = params;\n \n // Build the API URL\n const apiUrl = `https://api.steer.finance/blackhole/apr-detailed?vaultAddress=${vaultAddress}&chainId=${chainId}`;\n \n const response = await fetch(apiUrl, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: `API request failed: ${response.statusText}`\n };\n }\n\n const data: BlackholeAprDetailedResponse = await response.json();\n\n return {\n data,\n status: response.status,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch Blackhole APR details'\n };\n }\n }\n\n /**\n * Gets the latest vaults from the subgraph\n */\n public async getLatestVaults<T>(): Promise<SteerResponse<T>> {\n const query = ` \n query latestVaults{\n vaults(first: 250, skip: 0, orderBy: createdAt, orderDirection: desc, where: {\n gasUsed_gt: 0\n } ) {\n id\n beaconName\n createdAt\n gasUsed\n token1Symbol\n token0Symbol\n token0\n token1\n token0Name\n token1Name\n strategyToken {\n id\n name\n creator {\n id\n }\n }\n }\n }\n `;\n\n return this.executeSubgraphQuery<T>(query);\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 return this.depositClient.deposit(params);\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<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 return this.depositClient.prepareDepositTx(params);\n }\n\n /**\n * Gets the deposit ratio for a vault\n * @param vaultAddress The vault address\n */\n public async getDepositRatio(vaultAddress: Address, zeroForOne: boolean): Promise<SteerResponse<VaultDetailsResponse>> {\n try {\n const ratioResponse = await this.depositClient.getDepositRatio(vaultAddress, zeroForOne);\n if (!ratioResponse.success || !ratioResponse.data) {\n throw new Error(ratioResponse.error || 'Failed to get deposit ratio');\n }\n\n return {\n data: {\n details: ratioResponse.data.vaultDetails,\n ratio: ratioResponse.data.ratio,\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 * Withdraws tokens from a vault\n * @param params The withdrawal parameters\n */\n public async withdraw(params: VaultWithdrawParams): Promise<SteerResponse<Hash>> {\n return this.withdrawClient.withdraw(params);\n }\n\n /**\n * Prepares the transaction data for withdrawing tokens from a vault without executing it\n * @param params The withdrawal parameters\n */\n public async prepareWithdrawTx(params: VaultWithdrawParams): Promise<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: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [\n bigint,\n bigint,\n bigint,\n Address\n ];\n }>> {\n return this.withdrawClient.prepareWithdrawTx(params);\n }\n\n /**\n * Calculates the amount of tokens that would be received for a given amount of LP tokens\n * @param vaultAddress The vault address\n * @param lpToken The amount of LP tokens to calculate for\n */\n public async getTokensFromLp(\n vaultAddress: Address,\n lpToken: bigint\n ): Promise<SteerResponse<TokensFromLpResponse>> {\n return this.withdrawClient.getTokensFromLp(vaultAddress, lpToken);\n }\n\n /**\n * Approves spending of tokens for a vault\n * @param params The approval parameters\n */\n public async approve(params: VaultApproveParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'approve',\n args: [params.spender, params.amount],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 * Gets the allowance for a vault token\n * @param params The allowance parameters\n */\n public async allowance(params: VaultAllowanceParams): Promise<SteerResponse<bigint>> {\n try {\n const allowance = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'allowance',\n args: [params.owner, params.spender],\n });\n\n return {\n data: allowance,\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 balance of a vault token for an account\n * @param params The balance parameters\n */\n public async balanceOf(params: VaultBalanceParams): Promise<SteerResponse<bigint>> {\n try {\n const balance = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'balanceOf',\n args: [params.account],\n });\n\n return {\n data: balance,\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 total supply of a vault token\n * @param vaultAddress The vault address\n */\n public async totalSupply(vaultAddress: Address): Promise<SteerResponse<bigint>> {\n try {\n const totalSupply = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'totalSupply',\n });\n\n return {\n data: totalSupply,\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 decimals of a vault token\n * @param vaultAddress The vault address\n */\n public async decimals(vaultAddress: Address): Promise<SteerResponse<number>> {\n try {\n const decimals = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'decimals',\n });\n\n return {\n data: decimals,\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 symbol of a vault token\n * @param vaultAddress The vault address\n */\n public async symbol(vaultAddress: Address): Promise<SteerResponse<string>> {\n try {\n const result = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'symbol',\n });\n\n return {\n data: result,\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 name of a vault token\n * @param vaultAddress The vault address\n */\n public async name(vaultAddress: Address): Promise<SteerResponse<string>> {\n try {\n const result = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'name',\n });\n\n return {\n data: result,\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 public async pool(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 });\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 return this.depositClient.getPoolInstance(params);\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 return this.depositClient.getCorrespondingTokenAmount(vaultAddress, amount, zeroForOne);\n }\n\n // Single-Asset Deposit Methods\n\n /**\n * Previews a single-asset deposit by running all simulation steps\n * This allows users to see the expected outcome before executing the transaction\n * \n * @param params - Single-asset deposit parameters\n * @param poolAddress - Address of the pool (must be provided separately)\n * @returns Promise resolving to the complete deposit preview\n * \n * @example\n * ```typescript\n * const preview = await vaultClient.previewSingleAssetDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * }, poolAddress);\n * \n * if (preview.success) {\n * console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n * console.log('Swap amount:', preview.data.swapAmount);\n * }\n * ```\n */\n public async previewSingleAssetDeposit(\n params: SingleAssetDepositParams,\n poolAddress: Address\n ): Promise<SteerResponse<SingleAssetDepositPreview>> {\n return this.singleAssetDepositClient.previewDeposit(params, poolAddress);\n }\n\n /**\n * Executes a single-asset deposit transaction\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the transaction hash\n * \n * @example\n * ```typescript\n * const result = await vaultClient.singleAssetDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * });\n * \n * if (result.success) {\n * console.log('Transaction hash:', result.data);\n * }\n * ```\n */\n public async singleAssetDeposit(params: SingleAssetDepositParams): Promise<SteerResponse<Hash>> {\n return this.singleAssetDepositClient.deposit(params);\n }\n\n /**\n * Prepares a single-asset deposit transaction without executing it\n * Useful for batching transactions or custom execution logic\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the prepared transaction data\n */\n public async prepareSingleAssetDepositTx(params: SingleAssetDepositParams) {\n return this.singleAssetDepositClient.prepareDepositTx(params);\n }\n\n /**\n * Validates single-asset deposit parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\n public validateSingleAssetDepositParams(params: SingleAssetDepositParams): void {\n return this.singleAssetDepositClient.validateDepositParams(params);\n }\n\n // Reward Management Methods\n\n /**\n * Calculates pending rewards for a user from a vault\n * This is a view function that doesn't modify state\n * \n * @param params - Parameters containing vault address and user address\n * @returns Promise resolving to pending rewards data or zero values if function reverts\n * \n * @example\n * ```typescript\n * const pendingRewards = await vaultClient.calculatePendingRewards({\n * vaultAddress: '0x123...',\n * user: '0xabc...'\n * });\n * \n * if (pendingRewards.success && pendingRewards.data) {\n * console.log('Rewards:', pendingRewards.data.rewards);\n * console.log('Extra Rewards:', pendingRewards.data.extraRewards);\n * }\n * ```\n */\n public async calculatePendingRewards(params: PendingRewardsParams): Promise<SteerResponse<PendingRewardsResponse>> {\n try {\n const result = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: REWARD_FUNCTIONS_ABI,\n functionName: 'calculatePendingRewards',\n args: [params.user],\n }) as [bigint, bigint];\n\n return {\n data: {\n rewards: result[0],\n extraRewards: result[1]\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n // If the function reverts or doesn't exist, return zero values\n console.warn('calculatePendingRewards failed, returning zero values:', error);\n return {\n data: {\n rewards: 0n,\n extraRewards: 0n\n },\n status: 200,\n success: true,\n };\n }\n }\n\n /**\n * Claims pending rewards from a vault using the claimBlackHolePendingRewards function\n * \n * @param params - Parameters containing vault address\n * @returns Promise resolving to transaction hash or zero values if function reverts\n * \n * @example\n * ```typescript\n * const claimResult = await vaultClient.claimPendingRewards({\n * vaultAddress: '0x123...'\n * });\n * \n * if (claimResult.success && claimResult.data) {\n * console.log('Claim transaction hash:', claimResult.data);\n * }\n * ```\n */\n public async claimBlackholePendingRewards(params: ClaimRewardsParams): Promise<SteerResponse<Hash | PendingRewardsResponse>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: REWARD_FUNCTIONS_ABI,\n functionName: 'claimUserRewards',\n args: [],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error('claimBlackHolePendingRewards failed, error:', error);\n // If the function reverts or doesn't exist, return zero values instead of transaction hash\n console.warn('claimBlackHolePendingRewards failed, returning zero values:', error);\n return {\n data: {\n rewards: 0n,\n extraRewards: 0n\n },\n status: 200,\n success: true,\n };\n }\n }\n\n} \n","import { createClient } from '@steerprotocol/api-sdk';\nimport type { PublicClient, WalletClient } from 'viem';\nimport { SmartRewards } from './SmartRewards.js';\nimport { getApiUrl } from '../const/api.js';\n\n/**\n * Client for interacting with Steer Protocol's Smart Rewards system.\n * This client provides functionality for managing rewards, claims, and campaigns.\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { SmartRewardsClient } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * // Initialize the Smart Rewards client\n * const rewardsClient = new SmartRewardsClient(publicClient, walletClient, 'production');\n * \n * // Get user's reward summary\n * const summary = await rewardsClient.getRewardSummary(userAddress, chainId);\n * \n * // Claim rewards\n * const tx = await rewardsClient.claimCampaignRewards(userAddress, chainId);\n * ```\n * \n * @group Client\n */\nexport class SmartRewardsClient extends SmartRewards {\n /**\n * Creates a new instance of SmartRewardsClient\n * @param publicClient - The public client for reading from the blockchain\n * @param walletClient - The wallet client for writing to the blockchain\n * @param environment - The environment to use ('production' or 'development')\n * @param version - Optional API version to use (defaults to 'v1')\n */\n constructor(\n publicClient: PublicClient, \n walletClient: WalletClient,\n environment: 'production' | 'development',\n version: 'v1' = 'v1'\n ) {\n const apiUrl = getApiUrl(environment, version);\n const apiClient = createClient(apiUrl);\n super(apiClient, publicClient, walletClient);\n }\n}","/**\n * @fileoverview Pool Query Adapter - Provides GraphQL queries for different DEX protocols\n * @module PoolQueryAdapter\n */\n\nimport { isShadowProtocol, Protocol } from '../const/index.js';\n\n/**\n * GraphQL query to fetch top pools from Shadow protocol by volume\n * Returns pools ordered by volumeUSD in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_SHADOW = `\nquery {\n\tclPools(first: $limit, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Uniswap V3 protocol by volume\n * Returns pools ordered by volumeUSD in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_UNISWAP = `\nquery {\n\tpools(first: $limit, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Thruster protocol by TVL\n * Returns pools ordered by totalValueLockedETH in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_THRUSTER = `\nquery {\n\tpools(first: 500, orderBy: totalValueLockedETH, orderDirection: desc, subgraphError: allow){\n\t\tid\n volumeUSD\n totalValueLockedETH\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from PoolShark protocol by volume\n * Returns limit pools ordered by volumeUsd in descending order\n * @internal\n */\nconst FETCH_POOLSHARK_TOP_POOLS = `\n{\n limitPools(first: 500, orderBy: volumeUsd, orderDirection: desc, subgraphError: allow) {\n id\n volumeUsd\n totalValueLockedEth\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier {\n id\n }\n }\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Algebra-based protocols by volume\n * Returns pools ordered by volumeUSD in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_ALGEBRA = `\nquery {\n\tpools(first: 500, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Ocelex protocol\n * Returns first 500 pools with basic volume and liquidity data\n * @internal\n */\nconst FETCH_TOP_POOLS_OCELEX = `\nquery {\n\tpools(first: 500){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Kyo protocol by volume\n * Returns pools ordered by volumeUSD in descending order with fee information\n * @internal\n */\nconst FETCH_TOP_POOLS_KYO = `\nquery {\n\tpools(first: 500, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n fee\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from ArthSwap protocol by volume\n * Returns pools ordered by volumeUSD_DESC with fee tier information\n * @internal\n */\nconst FETCH_ARTHSWAP_TOP_POOLS = `\n{\n pools(limit:500, orderBy: volumeUSD_DESC) {\n id\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n tick\n liquidity\n }\n}\n`;\n\n/**\n * Returns the appropriate GraphQL query for fetching top pools based on protocol type\n * \n * @param protocol - The DEX protocol to fetch pools from\n * @param isAlgebraPool - Whether the protocol is based on Algebra\n * @returns GraphQL query string for fetching top pools\n * \n * @example\n * ```typescript\n * const query = getTopPoolsQuery(Protocol.UniswapV3, false);\n * // Returns FETCH_TOP_POOLS_UNISWAP query\n * ```\n */\nexport const getTopPoolsQuery = (protocol: Protocol, isAlgebraPool: boolean): string => {\n if (protocol === Protocol.ArthSwap || protocol === Protocol.ThickV2) {\n return FETCH_ARTHSWAP_TOP_POOLS;\n } else if (protocol === Protocol.Thruster) {\n return FETCH_TOP_POOLS_THRUSTER;\n } else if (protocol === Protocol.Ocelex) {\n return FETCH_TOP_POOLS_OCELEX;\n } else if (protocol === Protocol.PoolShark) {\n return FETCH_POOLSHARK_TOP_POOLS;\n } else if (protocol === Protocol.Kyo) {\n return FETCH_TOP_POOLS_KYO;\n } else if (isShadowProtocol(protocol)) {\n return FETCH_TOP_POOLS_SHADOW;\n } else if (isAlgebraPool) {\n return FETCH_TOP_POOLS_ALGEBRA;\n } else {\n return FETCH_TOP_POOLS_UNISWAP;\n }\n};\n\n// --- Token Pool Queries for fetchPoolsForTokens ---\n\n/**\n * GraphQL query to fetch pools containing a specific token from Algebra-based protocols\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_ALGEBRA = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n or: [\n {\n\t\t\t\ttoken0: $token\n }\n {\n token1: $token\n }\n ]\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Ocelex protocol\n * Returns up to 50 pools that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_OCELEX = `\nquery pools($token: ID!) {\n\tpools(first: 50, where: {\n or: [\n {\n\t\t\t\ttoken0: $token\n }\n {\n token1: $token\n }\n ]\n }){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from ArthSwap protocol\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_ARTHSWAP = `\nquery pools($token: String!) {\n\tpools(limit: 50, orderBy: volumeUSD_DESC, where: {\n OR: [\n {\n\t\t\t\ttoken0Id_eq: $token\n }\n {\n token1Id_eq: $token\n }\n ]\n }){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Uniswap V3 protocol\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_UNISWAP = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n or: [\n {\n\t\t\t\ttoken0: $token\n }\n {\n token1: $token\n }\n ]\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Shadow protocol\n * Returns up to 50 CL pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_SHADOW = `\nquery pools($token: String!) {\n\tclPools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n or: [\n {\n\t\t\t\ttoken0: $token\n }\n {\n token1: $token\n }\n ]\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from PoolShark protocol\n * Returns up to 50 limit pools ordered by TVL that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_POOLSHARK = `\nquery pools($token: String!) {\n\tlimitPools(first: 50, orderBy: totalValueLockedEth, orderDirection: desc, where: {\n or: [\n {\n\t\t\t\ttoken0: $token\n }\n {\n token1: $token\n }\n ]\n }, subgraphError: allow){\n\t\tid\n volumeUsd\n totalValueLockedEth\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier {\n id\n }\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token0 from Lynex protocol\n * Returns up to 50 pools ordered by volume where token is the first token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_LYNEX_TOKEN0 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n token0: $token\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token1 from Lynex protocol\n * Returns up to 50 pools ordered by volume where token is the second token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_LYNEX_TOKEN1 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n token1: $token\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token0 from Thruster protocol\n * Returns up to 50 pools ordered by TVL where token is the first token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_THRUSTER_TOKEN0 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: totalValueLockedETH, orderDirection: desc, where: {\n\t\ttoken0: $token\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n totalValueLockedETH\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token1 from Thruster protocol\n * Returns up to 50 pools ordered by TVL where token is the second token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_THRUSTER_TOKEN1 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: totalValueLockedETH, orderDirection: desc, where: {\n\t\ttoken1: $token\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n totalValueLockedETH\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Kyo protocol\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_KYO = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n or: [\n {\n\t\t\t\ttoken0: $token\n }\n {\n token1: $token\n }\n ]\n }, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n fee\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`;\n\n/**\n * Returns the appropriate GraphQL query for fetching pools containing a specific token\n * \n * @param isAlgebraPool - Whether the protocol is based on Algebra\n * @param protocol - The DEX protocol to fetch pools from\n * @returns GraphQL query string for fetching token pools\n * \n * @example\n * ```typescript\n * const query = getTokenPoolsQueryByAddress(false, Protocol.UniswapV3);\n * // Returns FETCH_TOKEN_POOLS_UNISWAP query\n * ```\n */\nexport const getTokenPoolsQueryByAddress = (isAlgebraPool: boolean, protocol: Protocol) => {\n if (isAlgebraPool) {\n if (protocol === Protocol.Ocelex) {\n return FETCH_TOKEN_POOLS_OCELEX;\n }\n return FETCH_TOKEN_POOLS_ALGEBRA;\n } else if (protocol === Protocol.ArthSwap || protocol === Protocol.ThickV2) {\n return FETCH_TOKEN_POOLS_ARTHSWAP;\n } else if (protocol === Protocol.PoolShark) {\n return FETCH_TOKEN_POOLS_POOLSHARK;\n } else if (protocol === Protocol.Kyo) {\n return FETCH_TOKEN_POOLS_KYO;\n } else if (isShadowProtocol(protocol)) {\n return FETCH_TOKEN_POOLS_SHADOW;\n } else {\n return FETCH_TOKEN_POOLS_UNISWAP;\n }\n};\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Algebra-based protocols\n * Returns pool details including tokens, volume, tick, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_ALGEBRA = `\nquery pools($pool: String! ) {\n\tpool(id: $pool, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Ocelex protocol\n * Returns pool details including tokens, volume, tick, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_OCELEX = `\nquery pools($pool: ID!) {\n\tpool(id: $pool){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Uniswap V3 protocol\n * Returns comprehensive pool details including fees, TVL, and volume data\n * @internal\n */\nconst FETCH_POOL_DETAILS_UNISWAP = `\nquery pools($pool: String! ) {\n\tpool(id: $pool, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n feeTier\n totalValueLockedETH\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Shadow protocol\n * Returns CL pool details including tokens, volume, tick, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_SHADOW = `\nquery pools($pool: String! ) {\n\tclPool(id: $pool, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n feeTier\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from PoolShark protocol\n * Returns limit pool details including tokens, volume, and fee information\n * @internal\n */\nconst FETCH_POOL_DETAILS_POOLSHARK = `\nquery pools($pool: String! ) {\n\tlimitPools(where: {id: $pool}){\n\t\tid\n volumeUsd\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n feeTier {\n id\n }\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from ArthSwap protocol\n * Returns pool details including tokens, volume, fee tier, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_ARTHSWAP = `\nquery pools($pool: String! ) {\n\tpools(where: {id_eq: $pool}){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n }\n token1 {\n id\n name\n symbol\n }\n feeTier\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Kyo protocol\n * Returns pool details including tokens, volume, fee, and liquidity with decimals\n * @internal\n */\nconst FETCH_POOL_DETAILS_KYO = `\nquery pools($pool: String! ) {\n\tpool(id: $pool, subgraphError: allow){\n\t\tid\n volumeUSD\n token0 {\n id\n name\n symbol\n decimals\n }\n token1 {\n id\n name\n symbol\n decimals\n }\n fee\n volumeToken0\n volumeToken1\n tick\n liquidity\n\t}\n}\n`\n\n/**\n * Returns the appropriate GraphQL query for fetching detailed pool information\n * \n * @param isAlgebraPool - Whether the protocol is based on Algebra\n * @param protocol - The DEX protocol to fetch pool details from (optional)\n * @returns GraphQL query string for fetching pool details\n * \n * @example\n * ```typescript\n * const query = getPoolDetailsQuery(false, Protocol.UniswapV3);\n * // Returns FETCH_POOL_DETAILS_UNISWAP query\n * ```\n */\nexport const getPoolDetailsQuery = (isAlgebraPool: boolean, protocol?: Protocol) => {\n if (protocol === Protocol.ArthSwap || protocol === Protocol.ThickV2) {\n return FETCH_POOL_DETAILS_ARTHSWAP\n } else if (protocol === Protocol.Ocelex) {\n return FETCH_POOL_DETAILS_OCELEX\n } else if (protocol === Protocol.PoolShark) {\n return FETCH_POOL_DETAILS_POOLSHARK\n } else if (protocol === Protocol.Kyo) {\n return FETCH_POOL_DETAILS_KYO;\n } else if (protocol && isShadowProtocol(protocol)) {\n return FETCH_POOL_DETAILS_SHADOW;\n } else if (isAlgebraPool) {\n return FETCH_POOL_DETAILS_ALGEBRA;\n } else {\n return FETCH_POOL_DETAILS_UNISWAP\n }\n }","import type { PublicClient, WalletClient } from 'viem';\nimport { PoolData, SteerResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { \n Protocol, \n Chain\n} from '../const/chain.js';\nimport { \n chainIdToName, \n getProtocolSubgraphURL\n} from '../const/index.js';\nimport { isAlgebraProtocol } from '../const/protocol.js';\nimport { getTopPoolsQuery, getTokenPoolsQueryByAddress, getPoolDetailsQuery } from '../utils/PoolQueryAdapter.js';\n\n/**\n * GraphQL token data interface representing token information from subgraph responses\n * @interface GraphQLTokenData\n */\nexport interface GraphQLTokenData {\n /** Token symbol (e.g., \"ETH\", \"USDC\") */\n symbol: string;\n /** Token contract address */\n id: string;\n /** Number of decimal places for the token */\n decimals: string;\n /** Human-readable token name */\n name: string;\n}\n\n/**\n * GraphQL pool data interface representing pool information from subgraph responses\n * @interface GraphQLPoolData\n */\nexport interface GraphQLPoolData {\n /** Pool contract address */\n id: string;\n /** First token in the pool */\n token0: GraphQLTokenData;\n /** Second token in the pool */\n token1: GraphQLTokenData;\n /** 24-hour trading volume in USD */\n volumeUSD: string;\n /** Current tick of the pool */\n tick: string;\n /** Total liquidity in the pool */\n liquidity: string;\n /** Fee tier for the pool (optional) */\n feeTier?: string;\n /** 24-hour volume of token0 (optional) */\n volumeToken0?: string;\n /** 24-hour volume of token1 (optional) */\n volumeToken1?: string;\n /** Total value locked in ETH (optional) */\n totalValueLockedETH?: string;\n /** Alternative field name for volume USD (optional) */\n volumeUsd?: string;\n /** Alternative field name for TVL in ETH (optional) */\n totalValueLockedEth?: string;\n}\n\n/**\n * Filter criteria for querying pools\n * @interface PoolFilter\n */\nexport interface PoolFilter {\n /** Chain ID to filter pools by */\n chainId?: number;\n /** Protocol to filter pools by */\n protocol?: Protocol;\n /** Exact pool address/id to look up */\n poolAddress?: string;\n /** Minimum volume in USD to filter pools */\n minVolumeUSD?: number;\n /** Token address to find pools containing this token */\n tokenAddress?: string;\n /** Multiple token addresses to find pools for */\n tokenAddresses?: string[];\n /** Token symbol to find pools containing this token */\n tokenSymbol?: string;\n /** Multiple token symbols to find pools for */\n tokenSymbols?: string[];\n /** Maximum number of pools to return */\n limit?: number;\n}\n\n// GraphQL response interfaces (currently unused but kept for future use)\n// interface GraphQLResponse<T> {\n// data: T;\n// errors?: Array<{ message: string }>;\n// }\n\n/**\n * Response interface for top pools query\n * @interface TopPoolsResponse\n * @internal\n */\ninterface TopPoolsResponse {\n /** Standard pools array */\n pools: GraphQLPoolData[];\n /** Limit pools array (used by some protocols) */\n limitPools?: GraphQLPoolData[];\n /** CL pools array (used by some protocols) */\n clPools?: GraphQLPoolData[];\n}\n\n/**\n * Response interface for pool details query\n * @interface PoolDetailsResponse\n * @internal\n */\ninterface PoolDetailsResponse {\n /** Single pool data */\n pool: GraphQLPoolData;\n /** Single limit pool data (used by some protocols) */\n limitPool?: GraphQLPoolData;\n /** Single CL pool data (used by some protocols) */\n clPool?: GraphQLPoolData;\n}\n\n/**\n * Response interface for pools by token query\n * @interface PoolsByTokenResponse\n * @internal\n */\ninterface PoolsByTokenResponse {\n /** Standard pools array */\n pools?: GraphQLPoolData[];\n /** Limit pools array (used by some protocols) */\n limitPools?: GraphQLPoolData[];\n /** Token pools array (used by some protocols) */\n tokenPools?: GraphQLPoolData[];\n /** CL pools array (used by some protocols) */\n clPools?: GraphQLPoolData[];\n}\n\n/**\n * Client for fetching pool data from various DEX protocol subgraphs\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { PoolClient } from '@steerprotocol/sdk';\n * \n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * }) as PublicClient & WalletClient;\n * \n * const poolClient = new PoolClient(client, 'your-subgraph-studio-key');\n * \n * // Fetch top pools\n * const topPools = await poolClient.getTopPools(100, Protocol.UniswapV3, 1);\n * ```\n * \n * @extends SubgraphClient\n * @group Pool\n */\nexport class PoolClient extends SubgraphClient {\n /** Public client for blockchain interactions */\n protected readonly publicClient: PublicClient;\n /** Default timeout for GraphQL queries in milliseconds */\n private readonly defaultTimeout: number = 60000;\n /** Counter for tracking API call metrics */\n private apiCallCount: number = 0;\n /** Subgraph Studio API key for rate limiting */\n private readonly subgraphStudioKey: string;\n\n /**\n * Creates a new PoolClient instance\n * \n * @param client - Combined public and wallet client for blockchain interactions\n * @param subgraphStudioKey - Optional Subgraph Studio API key for higher rate limits\n * \n * @example\n * ```typescript\n * const poolClient = new PoolClient(client, 'your-api-key');\n * ```\n */\n constructor(\n client: PublicClient & WalletClient,\n subgraphStudioKey: string = ''\n ) {\n super(client);\n this.publicClient = client;\n this.subgraphStudioKey = subgraphStudioKey;\n }\n\n /**\n * Resets the API call counter for metrics tracking\n * \n * @example\n * ```typescript\n * poolClient.resetMetrics();\n * ```\n */\n public resetMetrics(): void {\n this.apiCallCount = 0;\n }\n\n /**\n * Gets current metrics for monitoring API usage\n * \n * @returns Object containing current metrics\n * \n * @example\n * ```typescript\n * const metrics = poolClient.getMetrics();\n * console.log(`API calls made: ${metrics.apiCallCount}`);\n * ```\n */\n public getMetrics(): { apiCallCount: number } {\n return {\n apiCallCount: this.apiCallCount,\n };\n }\n\n private normalizeAddress(value?: string): string {\n return value?.toLowerCase() || '';\n }\n\n private normalizeSymbol(value?: string): string {\n return value?.trim().toLowerCase() || '';\n }\n\n private dedupePools(pools: GraphQLPoolData[]): GraphQLPoolData[] {\n const seen = new Set<string>();\n const deduped: GraphQLPoolData[] = [];\n\n pools.forEach((pool) => {\n const key = this.normalizeAddress(pool.id);\n if (!key || seen.has(key)) {\n return;\n }\n\n seen.add(key);\n deduped.push(pool);\n });\n\n return deduped;\n }\n\n private filterPoolsBySymbols(\n pools: GraphQLPoolData[],\n symbols: string[],\n ): GraphQLPoolData[] {\n if (symbols.length === 0) {\n return pools;\n }\n\n const normalizedSymbols = new Set(\n symbols.map((symbol) => this.normalizeSymbol(symbol)).filter(Boolean),\n );\n\n return pools.filter((pool) => {\n const token0Symbol = this.normalizeSymbol(pool.token0?.symbol);\n const token1Symbol = this.normalizeSymbol(pool.token1?.symbol);\n\n return normalizedSymbols.has(token0Symbol) || normalizedSymbols.has(token1Symbol);\n });\n }\n\n private applyPoolSearchResultFilters(\n pools: GraphQLPoolData[],\n filter: PoolFilter,\n ): GraphQLPoolData[] {\n let filteredPools = this.dedupePools(pools);\n\n if (typeof filter.minVolumeUSD === 'number') {\n filteredPools = filteredPools.filter((pool) => {\n const volumeUSD = parseFloat(pool.volumeUSD || pool.volumeUsd || '0');\n return !Number.isNaN(volumeUSD) && volumeUSD >= filter.minVolumeUSD!;\n });\n }\n\n if (typeof filter.limit === 'number' && filter.limit >= 0) {\n filteredPools = filteredPools.slice(0, filter.limit);\n }\n\n return filteredPools;\n }\n\n private async searchPoolsBySymbols(\n filter: Required<Pick<PoolFilter, 'chainId' | 'protocol'>> & PoolFilter,\n symbols: string[],\n ): Promise<SteerResponse<GraphQLPoolData[]>> {\n // Symbol relation filtering is not portable across all supported AMM subgraphs.\n // Use bounded top-pools fetch plus local symbol filtering as the baseline path.\n const boundedLimit = Math.min(Math.max(filter.limit ?? 200, 1), 500);\n const topPools = await this.getTopPools(boundedLimit, filter.protocol, filter.chainId);\n\n if (!topPools.success || !topPools.data) {\n return topPools;\n }\n\n const symbolMatches = this.filterPoolsBySymbols(topPools.data, symbols);\n\n return {\n data: this.applyPoolSearchResultFilters(symbolMatches, filter),\n status: 200,\n success: true,\n };\n }\n\n /**\n * Fetches data from GraphQL endpoint with retry logic for rate limits\n * \n * @param query - GraphQL query string\n * @param variables - Variables for the GraphQL query\n * @param protocol - Protocol to query\n * @param chainId - Chain ID to query\n * @returns Promise containing the response data\n * \n * @throws {Error} When subgraph endpoint is not available\n * @throws {Error} When rate limit is exceeded after max retries\n * @throws {Error} When GraphQL query times out\n * \n * @internal\n */\n private async fetchFromGraph<T>(\n query: string,\n variables: Record<string, unknown>,\n protocol: Protocol,\n chainId: number\n ): Promise<SteerResponse<T>> {\n try {\n const chainName = chainIdToName(chainId);\n const endpoint = getProtocolSubgraphURL(protocol, chainName as Chain, this.subgraphStudioKey);\n\n if (!endpoint) {\n throw new Error(`No subgraph endpoint available for protocol ${protocol} on chain ${chainName}`);\n }\n\n const MAX_RETRIES = 3;\n const RETRY_DELAY_MS = 11000;\n\n const fetchWithRetry = async (retries = 0): Promise<T> => {\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ query, variables }),\n });\n\n const data = await response.json() as { data: T; error?: string; errors?: Array<{ message: string }> };\n\n if (data.error && typeof data.error === \"string\" && data.error.includes(\"surpassed your query allowance\")) {\n if (retries < MAX_RETRIES) {\n console.warn(`Rate limit hit for ${endpoint}, retrying in ${RETRY_DELAY_MS / 1000}s (attempt ${retries + 1})`);\n await new Promise(res => setTimeout(res, RETRY_DELAY_MS));\n return fetchWithRetry(retries + 1);\n } else {\n throw new Error(`Rate limit exceeded after ${MAX_RETRIES} retries: ${data.error}`);\n }\n }\n\n if (data.error) {\n throw new Error(`GraphQL endpoint error: ${data.error}`);\n }\n\n if (data.errors) {\n throw new Error(`GraphQL errors: ${JSON.stringify(data.errors)}`);\n }\n\n return data.data;\n };\n\n this.apiCallCount++;\n console.log(\"Total API calls:\", this.apiCallCount);\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(\n () => reject(new Error(\"GraphQL query timeout\")),\n this.defaultTimeout\n );\n });\n\n const data = await Promise.race([fetchWithRetry(), timeoutPromise]);\n\n return {\n data: data as T,\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 * Fetches the top pools for a specific protocol by trading volume\n * \n * @param count - Number of pools to fetch (default: 500)\n * @param protocol - Protocol to fetch pools from\n * @param chainId - Chain ID to fetch pools from\n * @returns Promise containing an array of top pools\n * \n * @example\n * ```typescript\n * // Get top 100 Uniswap V3 pools on Ethereum\n * const topPools = await poolClient.getTopPools(100, Protocol.UniswapV3, 1);\n * if (topPools.success) {\n * console.log(`Found ${topPools.data.length} pools`);\n * }\n * ```\n * \n * @throws {Error} When failed to fetch pools from subgraph\n */\n public async getTopPools(\n count: number = 500,\n protocol: Protocol,\n chainId: number\n ): Promise<SteerResponse<GraphQLPoolData[]>> {\n try {\n const isAlgebraPool = isAlgebraProtocol(protocol);\n const query = getTopPoolsQuery(protocol, isAlgebraPool);\n\n console.log(`[Chain ${chainId}] [Protocol ${protocol}] 📊 Fetching top ${count} pools from the subgraph...`);\n\n const response = await this.fetchFromGraph<TopPoolsResponse>(\n query,\n { limit: count },\n protocol,\n chainId\n );\n\n if (!response.success || !response.data) {\n throw new Error(response.error || 'Failed to fetch pools');\n }\n\n const pools = response.data.pools || response.data.limitPools || response.data.clPools || [];\n \n console.log(`[Chain ${chainId}] [Protocol ${protocol}] ✅ Received ${pools.length} pools from the subgraph`);\n\n // Filter out pools with invalid volumeUSD\n const validPools = pools.filter(pool => {\n const volumeUSD = parseFloat(pool.volumeUSD || pool.volumeUsd || \"0\");\n return !isNaN(volumeUSD) && volumeUSD > 0;\n });\n\n console.log(`[Chain ${chainId}] [Protocol ${protocol}] ✅ Found ${validPools.length} valid pools with positive volumeUSD`);\n\n return {\n data: validPools,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error(`[Chain ${chainId}] [Protocol ${protocol}] Error in getTopPools:`, 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 * Fetches detailed information for a specific pool by its ID\n * \n * @param poolId - Pool contract address to fetch\n * @param protocol - Protocol the pool belongs to\n * @param chainId - Chain ID where the pool exists\n * @returns Promise containing pool details or null if not found\n * \n * @example\n * ```typescript\n * // Get specific pool details\n * const poolDetails = await poolClient.getPoolById(\n * '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640',\n * Protocol.UniswapV3,\n * 1\n * );\n * if (poolDetails.success && poolDetails.data) {\n * console.log(`Pool: ${poolDetails.data.token0.symbol}/${poolDetails.data.token1.symbol}`);\n * }\n * ```\n * \n * @throws {Error} When failed to fetch pool from subgraph\n */\n public async getPoolById(\n poolId: string,\n protocol: Protocol,\n chainId: number\n ): Promise<SteerResponse<GraphQLPoolData | null>> {\n try {\n\n const isAlgebraPool = isAlgebraProtocol(protocol);\n const query = getPoolDetailsQuery(isAlgebraPool, protocol);\n\n \n const response = await this.fetchFromGraph<PoolDetailsResponse>(\n query,\n { pool: poolId },\n protocol,\n chainId\n );\n\n if (!response.success || !response.data) {\n throw new Error(response.error || 'Failed to fetch pool');\n }\n\n const pool = response.data.pool || response.data.clPool || response.data.limitPool || null;\n\n\n return {\n data: pool,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error(`Error fetching pool ${poolId}:`, 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 * Fetches pools containing multiple tokens in batches for better performance\n * \n * @param tokenAddresses - Array of token contract addresses\n * @param protocol - Protocol to fetch pools from\n * @param chainId - Chain ID to fetch pools from\n * @param batchSize - Number of tokens to process in each batch (default: 10)\n * @returns Promise containing all pools found for the tokens\n * \n * @example\n * ```typescript\n * // Get pools for multiple tokens\n * const tokenAddresses = [\n * '0xa0b86a33e6f8b07b71c3a39ef77a6b6e8f1b7b7e', // USDC\n * '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' // WETH\n * ];\n * const pools = await poolClient.fetchPoolsForTokensBatch(\n * tokenAddresses,\n * Protocol.UniswapV3,\n * 1,\n * 5\n * );\n * ```\n * \n * @throws {Error} When batch processing fails\n */\n public async fetchPoolsForTokensBatch(\n tokenAddresses: string[],\n protocol: Protocol,\n chainId: number,\n batchSize: number = 10\n ): Promise<SteerResponse<GraphQLPoolData[]>> {\n try {\n if (tokenAddresses.length === 0) {\n return {\n data: [],\n status: 200,\n success: true,\n };\n }\n\n console.log(`\\n🔍 Batch Pool Fetch Summary:`);\n console.log(`📥 Total tokens to process: ${tokenAddresses.length}`);\n\n const isAlgebraPool = isAlgebraProtocol(protocol);\n const normalizedAddresses = tokenAddresses.map(addr => addr.toLowerCase());\n\n // Split into chunks\n const chunkSize = batchSize;\n const addressChunks = [];\n for (let i = 0; i < normalizedAddresses.length; i += chunkSize) {\n addressChunks.push(normalizedAddresses.slice(i, i + chunkSize));\n }\n\n console.log(`📦 Processing ${addressChunks.length} chunks of max ${chunkSize} tokens each`);\n\n const allPools: GraphQLPoolData[] = [];\n\n // Process chunks in parallel\n const results = await Promise.all(\n addressChunks.map(async (chunk, chunkIndex) => {\n console.log(`\\n🔄 Processing chunk ${chunkIndex + 1}/${addressChunks.length} with ${chunk.length} tokens`);\n\n const chunkResults = await Promise.all(\n chunk.map(async (token) => {\n try {\n const query = getTokenPoolsQueryByAddress(isAlgebraPool, protocol);\n const queryStartTime = performance.now();\n \n const response = await this.fetchFromGraph<PoolsByTokenResponse>(\n query,\n { token },\n protocol,\n chainId\n );\n\n const queryTime = performance.now() - queryStartTime;\n console.log(`⏱️ GraphQL query for token ${token.slice(0, 6)}... completed in ${queryTime.toFixed(2)}ms`);\n\n if (!response.success || !response.data) {\n console.error(`❌ No pools found for token: ${token} on chainId: ${chainId}`);\n return [];\n }\n\n // Extract pools from different possible response structures\n let pools: GraphQLPoolData[] = [];\n if (response.data.pools) {\n pools = response.data.pools;\n } else if (response.data.clPools) {\n pools = response.data.clPools;\n } else if (response.data.limitPools) {\n pools = response.data.limitPools;\n } else if (response.data.tokenPools) {\n pools = response.data.tokenPools;\n }\n\n if (pools.length === 0) {\n console.error(`❌ No pools found for token: ${token} on chainId: ${chainId}`);\n return [];\n }\n\n return pools;\n } catch (error) {\n console.error(`❌ Error fetching pools for token: ${token} on chainId: ${chainId}`, error);\n return [];\n }\n })\n );\n\n return chunkResults.flat();\n })\n );\n\n // Flatten all results\n allPools.push(...results.flat());\n\n return {\n data: allPools,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error(\"Error in fetchPoolsForTokensBatch:\", 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 * Fetches all pools containing a specific token\n * \n * @param tokenAddress - Token contract address\n * @param protocol - Protocol to fetch pools from\n * @param chainId - Chain ID to fetch pools from\n * @returns Promise containing pools that include the specified token\n * \n * @example\n * ```typescript\n * // Get all USDC pools on Uniswap V3\n * const usdcPools = await poolClient.fetchPoolsForToken(\n * '0xa0b86a33e6f8b07b71c3a39ef77a6b6e8f1b7b7e',\n * Protocol.UniswapV3,\n * 1\n * );\n * if (usdcPools.success) {\n * console.log(`Found ${usdcPools.data.length} USDC pools`);\n * }\n * ```\n * \n * @throws {Error} When failed to fetch pools for token\n */\n public async fetchPoolsForToken(\n tokenAddress: string,\n protocol: Protocol,\n chainId: number\n ): Promise<SteerResponse<GraphQLPoolData[]>> {\n try {\n const isAlgebraPool = isAlgebraProtocol(protocol);\n const query = getTokenPoolsQueryByAddress(isAlgebraPool, protocol);\n\n const response = await this.fetchFromGraph<PoolsByTokenResponse>(\n query,\n { token: tokenAddress.toLowerCase() },\n protocol,\n chainId\n );\n\n if (!response.success || !response.data) {\n throw new Error(response.error || 'Failed to fetch pools for token');\n }\n\n // Extract pools from different possible response structures\n let pools: GraphQLPoolData[] = [];\n if (response.data.pools) {\n pools = response.data.pools;\n } else if (response.data.limitPools) {\n pools = response.data.limitPools;\n } else if (response.data.tokenPools) {\n pools = response.data.tokenPools;\n } else if (response.data.clPools) {\n pools = response.data.clPools;\n }\n\n return {\n data: pools,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error(`Error fetching pools for token ${tokenAddress}:`, 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 * Filters pools based on validity criteria such as tick range and liquidity\n * \n * @param pools - Array of pools to filter\n * @returns Array of valid pools that meet the criteria\n * \n * @example\n * ```typescript\n * const validPools = poolClient.filterValidPools(allPools);\n * console.log(`Filtered down to ${validPools.length} valid pools`);\n * ```\n */\n public filterValidPools(pools: PoolData[]): PoolData[] {\n return pools.filter(pool => {\n // Check for required fields\n if (!pool.id || !pool.tick || !pool.liquidity) {\n return false;\n }\n\n // Parse values\n const tick = parseInt(pool.tick);\n const liquidity = parseFloat(pool.liquidity);\n\n // Check for valid tick range and liquidity\n const TICK_MIN = -887272;\n const TICK_MAX = 887272;\n const TICK_EDGE_THRESHOLD = 1;\n\n if (\n isNaN(tick) ||\n isNaN(liquidity) ||\n liquidity <= 0 ||\n tick <= TICK_MIN + TICK_EDGE_THRESHOLD ||\n tick >= TICK_MAX - TICK_EDGE_THRESHOLD\n ) {\n return false;\n }\n\n return true;\n });\n }\n\n /**\n * Searches pools using exact-address lookups where supported and local symbol\n * filtering as a portable fallback.\n *\n * Symbol-based matching is best-effort because not every downstream AMM\n * subgraph exposes portable nested token-symbol filters.\n */\n public async searchPools(\n filter: PoolFilter,\n ): Promise<SteerResponse<GraphQLPoolData[]>> {\n const { chainId, protocol } = filter;\n\n if (!chainId || !protocol) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'searchPools requires both chainId and protocol',\n };\n }\n\n const normalizedPoolAddress = this.normalizeAddress(filter.poolAddress);\n const normalizedTokenAddress = this.normalizeAddress(filter.tokenAddress);\n const normalizedTokenAddresses = (filter.tokenAddresses || [])\n .map((address) => this.normalizeAddress(address))\n .filter(Boolean);\n const tokenSymbols = [\n ...(filter.tokenSymbol ? [filter.tokenSymbol] : []),\n ...(filter.tokenSymbols || []),\n ].filter(Boolean);\n\n if (\n !normalizedPoolAddress &&\n !normalizedTokenAddress &&\n normalizedTokenAddresses.length === 0 &&\n tokenSymbols.length === 0\n ) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'searchPools requires at least one of poolAddress, tokenAddress, tokenAddresses, tokenSymbol, or tokenSymbols',\n };\n }\n\n const collectedPools: GraphQLPoolData[] = [];\n\n if (normalizedPoolAddress) {\n const exactPool = await this.getPoolById(normalizedPoolAddress, protocol, chainId);\n if (!exactPool.success) {\n return {\n data: null,\n status: exactPool.status,\n success: false,\n error: exactPool.error,\n };\n }\n\n if (exactPool.data) {\n collectedPools.push(exactPool.data);\n }\n }\n\n if (normalizedTokenAddress) {\n const tokenPools = await this.fetchPoolsForToken(normalizedTokenAddress, protocol, chainId);\n if (!tokenPools.success) {\n return tokenPools;\n }\n\n collectedPools.push(...(tokenPools.data || []));\n }\n\n if (normalizedTokenAddresses.length > 0) {\n const batchPools = await this.fetchPoolsForTokensBatch(\n normalizedTokenAddresses,\n protocol,\n chainId,\n );\n if (!batchPools.success) {\n return batchPools;\n }\n\n collectedPools.push(...(batchPools.data || []));\n }\n\n if (tokenSymbols.length > 0) {\n const symbolPools = await this.searchPoolsBySymbols(\n { ...filter, chainId, protocol },\n tokenSymbols,\n );\n if (!symbolPools.success) {\n return symbolPools;\n }\n\n collectedPools.push(...(symbolPools.data || []));\n }\n\n return {\n data: this.applyPoolSearchResultFilters(collectedPools, filter),\n status: 200,\n success: true,\n };\n }\n}\n","import type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { SteerResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { VaultWithdrawClient } from './vault/withdraw/index.js';\nimport { StakingProtocol, isValidStakingProtocol, normalizeProtocol } from '../const/protocol.js';\nimport { Decimal } from 'decimal.js';\n\n// Interfaces for staking pool data from API\nexport interface StakingPool {\n allSymbols?: string\n rewardToken: Address\n rewardTokenDetail?: Reward\n rewardTokenA: Address\n rewardTokenADetail: Reward\n rewardTokenB?: Address\n rewardTokenBDetail?: Reward\n dailyEmissionRewardA: number\n dailyEmissionRewardB?: number\n chainId: number\n stakingPool: string\n stakingToken: string\n protocol: string\n staking: Staking\n reward: Reward\n isSteerVault: boolean\n beaconName?: string\n vaultTokens?: VaultTokens\n periodFinish: string\n isDualFactory?: boolean\n feeTier?: string\n rewardsDuration: string\n strategyId?:string\n isActive?:boolean\n postGeneratedTotalStaked?:number\n postGeneratedApr?: number\n stakedAmount?:bigint,\n locked?:boolean\n}\n\n\nexport interface VaultTokens {\n token0: Token0\n token1: Token1\n}\n\nexport interface Token0 {\n name: string\n address: Address\n symbol: string\n}\n\nexport interface Token1 {\n name: string\n address: Address\n symbol: string\n}\n\nexport interface Reward {\n symbol: string\n name: string\n address: Address,\n decimals: number\n}\n\nexport interface Staking {\n symbol: string\n name: string\n address: Address\n decimals: number\n}\n\nexport interface StakingPoolFilter {\n chainId?: number;\n protocol?: StakingProtocol;\n isLive?: boolean;\n includeExpired?: boolean;\n minDailyEmissionA?: number;\n minDailyEmissionB?: number;\n isDualRewards?: boolean;\n}\n\n// Interfaces for contract parameters\nexport interface StakeParams {\n stakingPool: Address;\n amount: bigint;\n}\n\nexport interface WithdrawParams {\n stakingPool: Address;\n amount: bigint;\n}\n\nexport interface GetRewardParams {\n stakingPool: Address;\n}\n\nexport interface TokenValueParams {\n stakingPool: StakingPool;\n amount: bigint;\n token0UsdPrice: number;\n token1UsdPrice: number;\n}\n\nexport interface TokenValueResponse {\n totalValueUsd: number;\n token0Value?: number;\n token1Value?: number;\n tokenValue?: number;\n}\n\n// Add type definition for raw pool data\ninterface RawStakingPool {\n allSymbols?: string\n rewardToken: Address\n rewardTokenDetail?: Reward\n rewardTokenA: Address\n rewardTokenADetail: Reward\n rewardTokenB?: Address\n rewardTokenBDetail?: Reward\n dailyEmissionRewardA: number\n dailyEmissionRewardB?: number\n chainId: number\n stakingPool: string\n stakingToken: string\n protocol: StakingProtocol\n staking: Staking\n reward: Reward\n isSteerVault: boolean\n beaconName?: string\n vaultTokens?: VaultTokens\n periodFinish: string\n isDualFactory?: boolean\n feeTier?: string\n rewardsDuration: string\n strategyId?:string\n isActive?:boolean\n postGeneratedTotalStaked?:number\n postGeneratedApr?: number\n stakedAmount?:bigint,\n locked?:boolean\n}\n\n// ABIs for staking contracts\nconst SINGLE_REWARD_ABI = [\n {\n \"inputs\": [],\n \"name\": \"lastTimeRewardApplicable\",\n \"outputs\": [{\"type\": \"uint256\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{\"type\": \"address\"}],\n \"name\": \"earned\",\n \"outputs\": [{\"type\": \"uint256\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [{\"type\": \"uint256\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{\"type\": \"address\"}],\n \"name\": \"balanceOf\",\n \"outputs\": [{\"type\": \"uint256\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{\"type\": \"uint256\"}],\n \"name\": \"stake\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{\"type\": \"uint256\"}],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getReward\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"exit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const;\n\nconst DUAL_REWARD_ABI = [\n ...SINGLE_REWARD_ABI,\n {\n \"inputs\": [{\"type\": \"address\"}],\n \"name\": \"earnedA\",\n \"outputs\": [{\"type\": \"uint256\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{\"type\": \"address\"}],\n \"name\": \"earnedB\",\n \"outputs\": [{\"type\": \"uint256\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n] as const;\n\nconst ERC20_ABI = [\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [{\"type\": \"uint8\"}],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n] as const;\n\nexport class StakingClient extends SubgraphClient {\n protected readonly publicClient: PublicClient;\n protected readonly walletClient: WalletClient;\n private readonly stakingPoolsEndpoint = 'https://9i52h964s3.execute-api.us-east-1.amazonaws.com/dev/staking-pools';\n private readonly withdrawClient: VaultWithdrawClient;\n\n constructor(client: PublicClient & WalletClient) {\n super(client);\n this.publicClient = client;\n this.walletClient = client;\n this.withdrawClient = new VaultWithdrawClient(client, client);\n }\n\n /**\n * Fetches and filters staking pools based on provided criteria\n * @param filter Optional filter object to filter the pools\n */\n public async getStakingPools(\n filter?: StakingPoolFilter\n ): Promise<SteerResponse<StakingPool[]>> {\n try {\n const response = await fetch(this.stakingPoolsEndpoint);\n if (!response.ok) {\n throw new Error('Failed to fetch staking pools');\n }\n\n const rawPools: RawStakingPool[] = (await response.json()).pools;\n\n // Convert and validate protocols in the response\n let pools: StakingPool[] = rawPools\n .filter((pool) => isValidStakingProtocol(pool.protocol))\n .map((pool) => ({\n ...pool,\n protocol: normalizeProtocol(pool.protocol)\n }));\n\n // Apply filters if provided\n if (filter) {\n pools = this.filterPools(pools, filter);\n }\n\n return {\n data: pools,\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 only currently active staking pools\n * @param chainId Optional chain ID to filter pools\n * @param protocol Optional protocol name to filter pools\n */\n public async getLiveStakingPools(chainId?: number, protocol?: StakingProtocol): Promise<SteerResponse<StakingPool[]>> {\n return this.getStakingPools({\n chainId,\n protocol,\n isLive: true,\n includeExpired: false\n });\n }\n\n /**\n * Gets all dual rewards staking pools\n * @param chainId Optional chain ID to filter pools\n * @param protocol Optional protocol name to filter pools\n * @param isLive Optional flag to only get live pools\n */\n public async getDualRewardsStakingPools(\n chainId?: number,\n protocol?: StakingProtocol,\n isLive?: boolean\n ): Promise<SteerResponse<StakingPool[]>> {\n return this.getStakingPools({\n chainId,\n protocol,\n isLive,\n isDualRewards: true\n });\n }\n\n /**\n * Gets high yield staking pools based on minimum daily emissions\n * @param minDailyEmissionA Minimum daily emission for reward A\n * @param minDailyEmissionB Optional minimum daily emission for reward B\n * @param chainId Optional chain ID to filter pools\n */\n public async getHighYieldStakingPools(\n minDailyEmissionA: number,\n minDailyEmissionB?: number,\n chainId?: number\n ): Promise<SteerResponse<StakingPool[]>> {\n return this.getStakingPools({\n chainId,\n minDailyEmissionA,\n minDailyEmissionB,\n isLive: true\n });\n }\n\n /**\n * Internal helper to filter pools based on criteria\n */\n private filterPools(pools: StakingPool[], filter: StakingPoolFilter): StakingPool[] {\n return pools.filter(pool => {\n // Chain ID filter\n if (filter.chainId !== undefined && pool.chainId !== filter.chainId) {\n return false;\n }\n\n // Protocol filter\n if (filter.protocol !== undefined && pool.protocol !== filter.protocol) {\n return false;\n }\n\n // Dual rewards filter\n if (filter.isDualRewards !== undefined && pool.isDualFactory !== filter.isDualRewards) {\n return false;\n }\n\n // Daily emission filters\n if (filter.minDailyEmissionA !== undefined && pool.dailyEmissionRewardA < filter.minDailyEmissionA) {\n return false;\n }\n if (filter.minDailyEmissionB !== undefined && pool.dailyEmissionRewardB !== undefined && pool.dailyEmissionRewardB < filter.minDailyEmissionB) {\n return false;\n }\n\n // Live/Expired filter\n if (filter.isLive !== undefined) {\n const now = Math.floor(Date.now() / 1000);\n const periodFinish = parseInt(pool.periodFinish);\n const isPoolLive = periodFinish > now;\n\n if (filter.isLive && !isPoolLive) {\n return false;\n }\n\n if (!filter.includeExpired && !isPoolLive) {\n return false;\n }\n }\n\n return true;\n });\n }\n\n /**\n * Stakes tokens in a staking pool\n * @param params The staking parameters\n */\n public async stake(params: StakeParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.stakingPool,\n abi: SINGLE_REWARD_ABI,\n functionName: 'stake',\n args: [params.amount],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 * Withdraws tokens from a staking pool\n * @param params The withdrawal parameters\n */\n public async withdraw(params: WithdrawParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.stakingPool,\n abi: SINGLE_REWARD_ABI,\n functionName: 'withdraw',\n args: [params.amount],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 * Claims rewards from a staking pool\n * @param params The reward claim parameters\n */\n public async getReward(params: GetRewardParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.stakingPool,\n abi: SINGLE_REWARD_ABI,\n functionName: 'getReward',\n args: [],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 * Gets the earned rewards for an account in a staking pool\n * @param stakingPool The staking pool address\n * @param account The account to check rewards for\n */\n public async earned(stakingPool: Address, account: Address): Promise<SteerResponse<{ rewardA: bigint; rewardB?: bigint }>> {\n try {\n // First try to read as single reward\n try {\n const reward = await this.publicClient.readContract({\n address: stakingPool,\n abi: SINGLE_REWARD_ABI,\n functionName: 'earned',\n args: [account],\n });\n\n return {\n data: { rewardA: reward },\n status: 200,\n success: true,\n };\n } catch {\n // If single reward fails, try dual rewards\n const [rewardA, rewardB] = await Promise.all([\n this.publicClient.readContract({\n address: stakingPool,\n abi: DUAL_REWARD_ABI,\n functionName: 'earnedA',\n args: [account],\n }),\n this.publicClient.readContract({\n address: stakingPool,\n abi: DUAL_REWARD_ABI,\n functionName: 'earnedB',\n args: [account],\n }),\n ]);\n\n return {\n data: { rewardA, rewardB },\n status: 200,\n success: true,\n };\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 total supply of staked tokens in a pool\n * @param stakingPool The staking pool address\n */\n public async totalSupply(stakingPool: Address): Promise<SteerResponse<bigint>> {\n try {\n const totalSupply = await this.publicClient.readContract({\n address: stakingPool,\n abi: SINGLE_REWARD_ABI,\n functionName: 'totalSupply',\n });\n\n return {\n data: totalSupply,\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 staked balance of an account in a pool\n * @param stakingPool The staking pool address\n * @param account The account to check balance for\n */\n public async balanceOf(stakingPool: Address, account: Address): Promise<SteerResponse<bigint>> {\n try {\n const balance = await this.publicClient.readContract({\n address: stakingPool,\n abi: SINGLE_REWARD_ABI,\n functionName: 'balanceOf',\n args: [account],\n });\n\n return {\n data: balance,\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 * Calculates the APR for a staking pool\n * @param pool The staking pool data\n * @param rewardTokenPriceUSD The price of the reward token in USD\n * @param totalStakedUSD The total value staked in USD\n */\n public calculateAPR(\n pool: StakingPool,\n rewardTokenPriceUSD: number,\n totalStakedUSD: number\n ): number {\n if (totalStakedUSD === 0) {\n return 0;\n }\n\n const dailyRewardUSD = pool.dailyEmissionRewardA * rewardTokenPriceUSD;\n let apr = (dailyRewardUSD * 365 * 100) / totalStakedUSD;\n\n if (pool.isDualFactory && pool.dailyEmissionRewardB) {\n const dailyRewardBUSD = pool.dailyEmissionRewardB * rewardTokenPriceUSD;\n apr += (dailyRewardBUSD * 365 * 100) / totalStakedUSD;\n }\n\n return apr;\n }\n\n /**\n * Calculates the USD value of tokens in a staking pool\n * Handles both regular staking pools and Steer vaults\n * @param params Parameters for token value calculation\n */\n public async getSteerLpTokenValue(params: TokenValueParams): Promise<SteerResponse<TokenValueResponse>> {\n try {\n // First, get the staking pool details\n const pool = params.stakingPool;\n \n const chainId = await this.publicClient.getChainId();\n if (chainId !== pool.chainId) {\n throw new Error(`Chain ID mismatch| expected ${pool.chainId} but got ${chainId}`);\n }\n\n // Handle Steer vault staking pools\n if (pool.isSteerVault && pool.staking) {\n if (!pool.vaultTokens) {\n throw new Error('Vault tokens information not found');\n }\n\n // Get underlying token amounts from LP token\n const tokensResponse = await this.withdrawClient.getTokensFromLp(\n pool.staking.address,\n params.amount\n );\n\n if (!tokensResponse.success || !tokensResponse.data) {\n throw new Error('Failed to get token amounts from LP');\n }\n\n // Get decimals for both tokens\n const [token0Decimals, token1Decimals] = await Promise.all([\n this.publicClient.readContract({\n address: pool.vaultTokens.token0.address,\n abi: ERC20_ABI,\n functionName: 'decimals'\n }),\n this.publicClient.readContract({\n address: pool.vaultTokens.token1.address,\n abi: ERC20_ABI,\n functionName: 'decimals'\n })\n ]);\n\n // Use Decimal.js for precise calculations\n const token0Amount = new Decimal(tokensResponse.data.token0Val.toString())\n .div(new Decimal(10).pow(token0Decimals))\n .mul(params.token0UsdPrice);\n\n const token1Amount = new Decimal(tokensResponse.data.token1Val.toString())\n .div(new Decimal(10).pow(token1Decimals))\n .mul(params.token1UsdPrice);\n\n const totalValueUsd = token0Amount.plus(token1Amount).toNumber();\n const token0ValueUsd = token0Amount.toNumber();\n const token1ValueUsd = token1Amount.toNumber();\n\n return {\n data: {\n totalValueUsd,\n token0Value: token0ValueUsd,\n token1Value: token1ValueUsd\n },\n status: 200,\n success: true\n };\n }\n\n // Handle regular staking pools (non-Steer vault)\n const stakingDecimals = await this.publicClient.readContract({\n address: pool.staking.address,\n abi: ERC20_ABI,\n functionName: 'decimals'\n });\n\n const tokenValueUsd = new Decimal(params.amount.toString())\n .div(new Decimal(10).pow(stakingDecimals))\n .mul(params.token0UsdPrice)\n .toNumber();\n\n return {\n data: {\n totalValueUsd: tokenValueUsd,\n tokenValue: tokenValueUsd\n },\n status: 200,\n success: true\n };\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 total staking amount in USD for a pool\n * @param stakingPool The staking pool\n * @param token0UsdPrice Price of token0 in USD\n * @param token1UsdPrice Price of token1 in USD (required for Steer vaults)\n */\n public async getTotalStakingAmountInUsd(\n stakingPool: StakingPool,\n token0UsdPrice: number,\n token1UsdPrice?: number\n ): Promise<SteerResponse<number>> {\n try {\n // Get total supply\n const totalSupplyResponse = await this.totalSupply(stakingPool.stakingPool as `0x${string}`);\n if (!totalSupplyResponse.success || !totalSupplyResponse.data) {\n throw new Error('Failed to get total supply');\n }\n\n // Get value using getSteerLpTokenValue\n const valueResponse = await this.getSteerLpTokenValue({\n stakingPool,\n amount: totalSupplyResponse.data,\n token0UsdPrice,\n token1UsdPrice: token1UsdPrice || token0UsdPrice\n });\n\n if (!valueResponse.success || !valueResponse.data) {\n throw new Error('Failed to calculate token value');\n }\n\n return {\n data: valueResponse.data.totalValueUsd,\n status: 200,\n success: true\n };\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 staking tokens without executing it\n * @param params The staking parameters\n */\n public async prepareStakeTx(params: StakeParams): Promise<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: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [bigint];\n }>> {\n try {\n\n return {\n data: {\n address: params.stakingPool,\n abi: [{\n type: 'function',\n inputs: [\n { name: 'amount', internalType: 'uint256', type: 'uint256' }\n ],\n name: 'stake',\n outputs: [],\n stateMutability: 'nonpayable'\n }],\n functionName: 'stake',\n args: [params.amount] 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 * Prepares the transaction data for withdrawing tokens without executing it\n * @param params The withdrawal parameters\n */\n public async prepareWithdrawTx(params: WithdrawParams): Promise<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: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [bigint];\n }>> {\n try {\n\n return {\n data: {\n address: params.stakingPool,\n abi: [{\n type: 'function',\n inputs: [\n { name: 'amount', internalType: 'uint256', type: 'uint256' }\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable'\n }],\n functionName: 'withdraw',\n args: [params.amount] 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 * Prepares the transaction data for claiming rewards without executing it\n * @param params The reward claim parameters\n */\n public async prepareGetRewardTx(params: GetRewardParams): Promise<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: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [];\n }>> {\n try {\n\n return {\n data: {\n address: params.stakingPool,\n abi: [{\n type: 'function',\n inputs: [],\n name: 'getReward',\n outputs: [],\n stateMutability: 'nonpayable'\n }],\n functionName: 'getReward',\n args: [] 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} ","import { SteerConfig, SteerResponse } from './types.js';\nimport { SubgraphClient } from './base/SubgraphClient.js';\nimport { VaultClient } from './base/VaultClient.js';\nimport { SmartRewardsClient } from './base/SmartRewardClient.js';\nimport { PoolClient } from './base/PoolClient.js';\nimport type { PublicClient, WalletClient } from 'viem';\nimport { StakingClient } from './base/StakingClient.js';\n\n/**\n * The main client for interacting with the Steer Protocol.\n * This client provides access to vault operations, smart rewards functionality, pool data, and staking.\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { SteerClient, Protocol } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * // Initialize the Steer client\n * const steerClient = new SteerClient({\n * environment: 'production',\n * client: publicClient,\n * walletClient: walletClient,\n * subgraphStudioKey: 'your-subgraph-studio-key' // Optional\n * });\n * \n * // Use vault operations\n * const vaults = await steerClient.vaults.getLatestVaults();\n * \n * // Use rewards functionality\n * const campaigns = await steerClient.rewards.getCampaigns(1);\n * const summary = await steerClient.rewards.getRewardSummary(userAddress, chainId);\n * \n * // Use pool data functionality\n * const topPools = await steerClient.pools.getTopPools(100, Protocol.UniswapV3, 1);\n * const poolDetails = await steerClient.pools.getPoolById(poolId, Protocol.UniswapV3, 1);\n * \n * // Use staking functionality\n * const stakingPools = await steerClient.staking.getStakingPools(1);\n * ```\n * \n * @group Client\n */\nexport class SteerClient extends SubgraphClient {\n \n /** The environment the client is configured for */\n private readonly environment: 'production' | 'development';\n \n /** The vault client instance for interacting with Steer vaults */\n public readonly vaults: VaultClient;\n\n /** The rewards client instance for interacting with Smart Rewards */\n public readonly rewards: SmartRewardsClient;\n\n /** The staking client instance for interacting with staking pools */\n public readonly staking: StakingClient;\n\n /** The pool client instance for fetching pool data from DEX protocols */\n public readonly pools: PoolClient;\n\n /**\n * Creates a new instance of the SteerClient\n * \n * @param config - The configuration object for the client\n * @param config.environment - The environment to use ('production' or 'development')\n * @param config.client - The viem client for blockchain interactions\n * @param config.walletClient - Optional wallet client for write operations\n * @param config.subgraphStudioKey - Optional Subgraph Studio API key for higher rate limits\n * \n * @example\n * ```typescript\n * const steerClient = new SteerClient({\n * environment: 'production',\n * client: publicClient,\n * walletClient: walletClient,\n * subgraphStudioKey: 'your-key'\n * });\n * ```\n */\n constructor(config: SteerConfig) {\n super(config.client);\n this.environment = config.environment || 'production';\n \n // Initialize clients based on provided configuration\n const publicClient = config.client as PublicClient;\n const walletClient = config.walletClient;\n const subgraphStudioKey = config.subgraphStudioKey || '';\n\n // Initialize vault client with both public and wallet clients if available\n this.vaults = new VaultClient(\n publicClient,\n walletClient || publicClient as unknown as WalletClient,\n this.environment === 'production' ? 'production' : 'development'\n );\n\n // Initialize staking client with both public and wallet clients if available\n this.staking = new StakingClient(walletClient ? \n { ...publicClient, ...walletClient } as PublicClient & WalletClient : \n publicClient as unknown as PublicClient & WalletClient\n );\n\n // Initialize pool client with both public and wallet clients if available\n this.pools = new PoolClient(walletClient ? \n { ...publicClient, ...walletClient } as PublicClient & WalletClient : \n publicClient as unknown as PublicClient & WalletClient,\n subgraphStudioKey\n );\n\n // Initialize rewards client with both public and wallet clients if available\n if (walletClient) {\n this.rewards = new SmartRewardsClient(\n publicClient,\n walletClient,\n this.environment === 'production' ? 'production' : 'development'\n );\n } else {\n // If no wallet client is provided, initialize with read-only capabilities\n this.rewards = new SmartRewardsClient(\n publicClient,\n publicClient as unknown as WalletClient, // Type cast for read-only operations\n this.environment === 'production' ? 'production' : 'development'\n );\n }\n }\n\n /**\n * Gets the active chain ID from the client\n * @returns A promise that resolves to the active chain ID\n * @throws Error if no active chain is found\n * \n * @example\n * ```typescript\n * const chainId = await steerClient.getActiveChain();\n * console.log(chainId.data); // e.g., 1 for Ethereum mainnet\n * ```\n */\n public async getActiveChain<T>(): Promise<SteerResponse<T>> {\n const activeChain = await this.client.chain?.id;\n\n if (!activeChain) {\n throw new Error('No active chain found');\n }\n\n return {\n data: activeChain as unknown as T,\n status: 200,\n success: true,\n };\n }\n}\n","import {\n type Address,\n type Hash,\n type PublicClient,\n type WalletClient,\n isAddressEqual,\n} from 'viem';\nimport type {\n DefaultFeeManagerConfigParams,\n Fee,\n FeeManagerConfigParams,\n FeeWithdrawalParams,\n MultipleFeeWithdrawalParams,\n MultiVaultFeeWithdrawalParams,\n SteerResponse,\n} from '../types.js';\nimport { FEE_MANAGER_ABI } from '../const/abis/feeManager.js';\nimport { VAULT_FEES_ABI } from '../const/abis/vaultFees.js';\nimport { SubgraphClient } from './SubgraphClient.js';\n\nexport class FeeManagerClient extends SubgraphClient {\n protected readonly publicClient: PublicClient;\n protected readonly walletClient: WalletClient;\n protected feeManagerAddress: Address;\n\n public constructor(\n feeManagerAddress: Address,\n publicClient: PublicClient,\n walletClient: WalletClient\n ) {\n super(publicClient as PublicClient & WalletClient);\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n this.feeManagerAddress = feeManagerAddress;\n }\n\n /**\n * Overrides the FeeManager contract address.\n * Useful when deployment addresses are not yet hardcoded or need custom targeting.\n * @param address The new FeeManager contract address\n */\n public setFeeManagerAddress(address: Address): void {\n this.feeManagerAddress = address;\n }\n\n public async getFees(vault: Address): Promise<SteerResponse<Fee[]>> {\n try {\n const fees = await this.publicClient.readContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'getFees',\n args: [vault],\n });\n\n return {\n data: fees as Fee[],\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 public async getTotalFees(vault: Address): Promise<SteerResponse<bigint>> {\n try {\n const totalFees = await this.publicClient.readContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'vaultTotalFees',\n args: [vault],\n });\n\n return {\n data: totalFees as bigint,\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 public async getWithdrawer(\n vault: Address,\n feeIdentifier: string\n ): Promise<SteerResponse<Address>> {\n try {\n const withdrawer = await this.publicClient.readContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'withdrawalPermissions',\n args: [vault, feeIdentifier],\n });\n\n return {\n data: withdrawer as Address,\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 public async validateAdminPermission(): Promise<SteerResponse<boolean>> {\n try {\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const owner = await this.publicClient.readContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'owner',\n });\n\n return {\n data: isAddressEqual(owner as Address, accounts[0]),\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 public async validateWithdrawerPermission(\n vault: Address,\n feeIdentifier: string\n ): Promise<SteerResponse<boolean>> {\n try {\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const withdrawer = await this.publicClient.readContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'withdrawalPermissions',\n args: [vault, feeIdentifier],\n });\n\n return {\n data: isAddressEqual(withdrawer as Address, accounts[0]),\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 public async setFeeAndWithdrawalPermission(\n params: FeeManagerConfigParams\n ): Promise<SteerResponse<Hash>> {\n try {\n if (\n params.feeIdentifiers.length !== params.feeValues.length ||\n params.feeIdentifiers.length !== params.withdrawers.length\n ) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'feeIdentifiers, feeValues, and withdrawers must have the same length',\n };\n }\n\n const isAdmin = await this.validateAdminPermission();\n if (!isAdmin.success) {\n throw new Error(isAdmin.error ?? 'Unknown error occurred');\n }\n if (!isAdmin.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'Caller is not FeeManager owner',\n };\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'setFeeAndWithdrawalPermission',\n args: [params.vault, params.feeIdentifiers, params.feeValues, params.withdrawers],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async setDefaultFeeAndWithdrawalPermission(\n params: DefaultFeeManagerConfigParams\n ): Promise<SteerResponse<Hash>> {\n try {\n if (\n params.feeIdentifiers.length !== params.feeValues.length ||\n params.feeIdentifiers.length !== params.withdrawers.length\n ) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'feeIdentifiers, feeValues, and withdrawers must have the same length',\n };\n }\n\n const isAdmin = await this.validateAdminPermission();\n if (!isAdmin.success) {\n throw new Error(isAdmin.error ?? 'Unknown error occurred');\n }\n if (!isAdmin.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'Caller is not FeeManager owner',\n };\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'setDefaultFeeAndWithdrawalPermission',\n args: [\n params.vault,\n params.totalVaultFees,\n params.feeIdentifiers,\n params.feeValues,\n params.withdrawers,\n ],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async setMigratedVaultFeeAndWithdrawalPermission(): Promise<SteerResponse<Hash>> {\n try {\n const isAdmin = await this.validateAdminPermission();\n if (!isAdmin.success) {\n throw new Error(isAdmin.error ?? 'Unknown error occurred');\n }\n if (!isAdmin.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'Caller is not FeeManager owner',\n };\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'setMigratedVaultFeeAndWithdrawalPermission',\n args: [],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async setTotalFees(vault: Address, newTotalFees: bigint): Promise<SteerResponse<Hash>> {\n try {\n const isAdmin = await this.validateAdminPermission();\n if (!isAdmin.success) {\n throw new Error(isAdmin.error ?? 'Unknown error occurred');\n }\n if (!isAdmin.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'Caller is not FeeManager owner',\n };\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'setTotalFees',\n args: [vault, newTotalFees],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async changeFeeWithdrawer(\n vault: Address,\n feeIdentifier: string,\n newWithdrawer: Address\n ): Promise<SteerResponse<Hash>> {\n try {\n const isAdmin = await this.validateAdminPermission();\n if (!isAdmin.success) {\n throw new Error(isAdmin.error ?? 'Unknown error occurred');\n }\n if (!isAdmin.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'Caller is not FeeManager owner',\n };\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'changeFeeWithdrawer',\n args: [vault, feeIdentifier, newWithdrawer],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async withdrawFee(params: FeeWithdrawalParams): Promise<SteerResponse<Hash>> {\n try {\n const canWithdraw = await this.validateWithdrawerPermission(\n params.vault,\n params.feeIdentifier\n );\n if (!canWithdraw.success) {\n throw new Error(canWithdraw.error ?? 'Unknown error occurred');\n }\n if (!canWithdraw.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'Caller is not authorized withdrawer',\n };\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'withdrawFee',\n args: [params.vault, params.feeIdentifier, params.amount0, params.amount1],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async withdrawMultipleFees(\n params: MultipleFeeWithdrawalParams\n ): Promise<SteerResponse<Hash>> {\n try {\n if (\n params.feeIdentifiers.length !== params.amounts0.length ||\n params.feeIdentifiers.length !== params.amounts1.length\n ) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'feeIdentifiers, amounts0, and amounts1 must have the same length',\n };\n }\n\n for (const feeIdentifier of params.feeIdentifiers) {\n const canWithdraw = await this.validateWithdrawerPermission(params.vault, feeIdentifier);\n if (!canWithdraw.success) {\n throw new Error(canWithdraw.error ?? 'Unknown error occurred');\n }\n if (!canWithdraw.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: `Caller is not authorized withdrawer for ${feeIdentifier}`,\n };\n }\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'withdrawMultipleFees',\n args: [params.vault, params.feeIdentifiers, params.amounts0, params.amounts1],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 public async withdrawFeesFromMultipleVaults(\n params: MultiVaultFeeWithdrawalParams\n ): Promise<SteerResponse<Hash>> {\n try {\n if (\n params.vaults.length !== params.feeIdentifiers.length ||\n params.vaults.length !== params.amounts0.length ||\n params.vaults.length !== params.amounts1.length\n ) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'vaults, feeIdentifiers, amounts0, and amounts1 must have the same length',\n };\n }\n\n for (let i = 0; i < params.vaults.length; i++) {\n const vault = params.vaults[i];\n const identifiers = params.feeIdentifiers[i];\n const amount0 = params.amounts0[i];\n const amount1 = params.amounts1[i];\n\n if (identifiers.length !== amount0.length || identifiers.length !== amount1.length) {\n return {\n data: null,\n status: 400,\n success: false,\n error: 'feeIdentifiers[i], amounts0[i], and amounts1[i] must have the same length',\n };\n }\n\n for (const feeIdentifier of identifiers) {\n const canWithdraw = await this.validateWithdrawerPermission(vault, feeIdentifier);\n if (!canWithdraw.success) {\n throw new Error(canWithdraw.error ?? 'Unknown error occurred');\n }\n if (!canWithdraw.data) {\n return {\n data: null,\n status: 400,\n success: false,\n error: `Caller is not authorized withdrawer for ${feeIdentifier}`,\n };\n }\n }\n }\n\n const accounts = await this.walletClient.getAddresses();\n if (!accounts[0]) {\n throw new Error('No account found');\n }\n\n const { request } = await this.publicClient.simulateContract({\n address: this.feeManagerAddress,\n abi: FEE_MANAGER_ABI,\n functionName: 'withdrawFeesFromMultipleVaults',\n args: [params.vaults, params.feeIdentifiers, params.amounts0, params.amounts1],\n account: accounts[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\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 * Gets the accrued revenue for a specific fee identifier in a vault\n * @param vault The vault address\n * @param feeIdentifier The fee identifier (e.g., 'STEER_FEES', 'STRATEGIST_FEES')\n * @returns Promise resolving to the accrued amounts for token0 and token1\n */\n public async getAccruedRevenue(\n vault: Address,\n feeIdentifier: string\n ): Promise<SteerResponse<{ amount0: bigint; amount1: bigint }>> {\n try {\n const [amount0, amount1] = await Promise.all([\n this.publicClient.readContract({\n address: vault,\n abi: VAULT_FEES_ABI,\n functionName: 'accruedFees0',\n args: [feeIdentifier],\n }),\n this.publicClient.readContract({\n address: vault,\n abi: VAULT_FEES_ABI,\n functionName: 'accruedFees1',\n args: [feeIdentifier],\n }),\n ]);\n\n return {\n data: { amount0, amount1 },\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 summary of accrued revenue for all configured fee identifiers in a vault\n * @param vault The vault address\n * @returns Promise resolving to a list of fee identifiers and their accrued amounts\n */\n public async getVaultRevenueSummary(\n vault: Address\n ): Promise<SteerResponse<{ feeIdentifier: string; amount0: bigint; amount1: bigint }[]>> {\n try {\n const feesResponse = await this.getFees(vault);\n if (!feesResponse.success || !feesResponse.data) {\n throw new Error(feesResponse.error || 'Failed to fetch vault fees configuration');\n }\n\n const summary = await Promise.all(\n feesResponse.data.map(async (fee) => {\n const revenue = await this.getAccruedRevenue(vault, fee.feeIdentifier);\n return {\n feeIdentifier: fee.feeIdentifier,\n amount0: revenue.data?.amount0 ?? 0n,\n amount1: revenue.data?.amount1 ?? 0n,\n };\n })\n );\n\n return {\n data: summary,\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","export * from './utils/subgraph-types.js';\nexport { SubgraphVaultClient } from './utils/SubgraphVaultClient.js';\nexport * from './base/SmartRewards.js';\nexport * from './client.js';\nexport * from './types.js';\nexport * from './base/VaultClient.js';\nexport * from './base/SubgraphClient.js';\nexport * from './base/StakingClient.js';\nexport * from './base/FeeManagerClient.js';\nexport * from './base/vault/single-asset/index.js';\nexport type { GraphQLTokenData, GraphQLPoolData } from './base/PoolClient.js';\nexport { PoolClient } from './base/PoolClient.js';\nexport * from './const/index.js';\n\n/**\n * @packageDocumentation\n *\n * The Steer Protocol SDK provides a comprehensive interface for interacting with Steer Protocol's smart contracts and services.\n *\n * ## Key Features\n *\n * - Smart Rewards Management\n * - Campaign Interactions\n * - Claim Management\n * - Multi-chain Support\n *\n * ## Quick Start\n *\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { SteerClient } from '@steerprotocol/sdk';\n *\n * // Create viem clients\n * const publicClient = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * });\n *\n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * });\n *\n * // Initialize the Steer client with both public and wallet clients\n * const steerClient = new SteerClient({\n * environment: 'production',\n * client: publicClient,\n * walletClient: walletClient // Optional: Provide for write operations\n * });\n *\n * // Use vault operations (read-only if no wallet client)\n * const vaults = await steerClient.vaults.getLatestVaults();\n *\n * // Use rewards functionality (read-only if no wallet client)\n * const campaigns = await steerClient.rewards.getCampaigns(1);\n * const summary = await steerClient.rewards.getRewardSummary(userAddress, chainId);\n *\n * // Write operations (requires wallet client)\n * if (steerClient.rewards) {\n * const tx = await steerClient.rewards.claimCampaignRewards(userAddress, chainId);\n * }\n * ```\n *\n * ## Smart Rewards\n *\n * The Smart Rewards functionality is accessible through the SteerClient's rewards property.\n * It provides comprehensive functionality for managing rewards:\n *\n * - View reward balances and claim history (read-only operations)\n * - Claim rewards across multiple campaigns (requires wallet client)\n * - Track historical claims\n * - Get comprehensive reward summaries\n *\n * For write operations like claiming rewards, make sure to provide a wallet client when initializing the SteerClient.\n *\n * See {@link SmartRewards} for detailed API documentation.\n */\n"],"mappings":"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a,0BAA0B,YAAoB,gBAAyB,WAAmB;AACnG,QAAO,qDAAqD,OAAO,GAAG,iBAAiB,gBAAgB,YAAY,MAAM;;;;;;;ACE7H,MAAa,WAAW,EACtB,IAAI;CACF,YAAY;CACZ,aAAa;CACd,EAMF;;;;;;;AAQD,SAAgB,UACd,aACA,UAAiC,MACzB;AACR,QAAO,SAAS,SAAS;;;;ACzB3B,MAAa,WAAW;CACtB;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACF;;;AC/ND,MAAa,YAAY;CACvB;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,UAAU;EACV,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,MAAM;GACP,CACF;EACD,SAAS;EACT,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACF;;;ACzVD,MAAa,aAAa;CACxB;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EA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CAC7B;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,YAAY,CACV;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP,EACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP,CACF;GACD,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACF;;;AC/pBD,MAAa,iBAAiB,CAC5B;CACE,QAAQ,CACN;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,MAAM;CACN,SAAS,CACP;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,iBAAiB;CACjB,MAAM;CACP,EACD;CACE,QAAQ,CACN;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,MAAM;CACN,SAAS,CACP;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,iBAAiB;CACjB,MAAM;CACP,CACF;;;ACnCD,MAAa,wBAAsC;CACjD,gBAAgB,sBAAsB;CACtC,UAAU;GACP,MAAM,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"}