diff --git a/.github/workflows/beta-release.yaml b/.github/workflows/beta-release.yaml index 0e2238922..2e4a0ff3f 100644 --- a/.github/workflows/beta-release.yaml +++ b/.github/workflows/beta-release.yaml @@ -40,7 +40,7 @@ jobs: echo -n "$SIGNING_KEY" | base64 --decode | gpg --import git config --global user.name "johngrantuk" git config --global user.email "4797222+johngrantuk@users.noreply.github.com" - git config user.signingkey 0B86E3F46D321811DC4330D1376AF1CD2A15D127 + git config user.signingkey 5D1644BB7D087635E36B06C1ABCBFFAEE5EAEE77 git config gpg.program /usr/bin/gpg yarn version --prerelease --preid beta --no-git-tag-version export NEW_VERSION=$(jq -r '.version' package.json) diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..013831e4b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Balancer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/balancer-js/README.md b/balancer-js/README.md index 92c096487..cea21fe74 100644 --- a/balancer-js/README.md +++ b/balancer-js/README.md @@ -1,3 +1,16 @@ +# **Deprecation Notice** # + +This package/library is being deprecated in favor of our new and improved version located at [repo](https://github.com/balancer/b-sdk)/[package](https://www.npmjs.com/package/@balancer/sdk). + +We recommend migrating to the new repository to access the latest features (including V3 support), bug fixes, and security patches. For more information about this change, please check out the examples and documentation pages: + +* [Documentation Pages](https://docs-v3.balancer.fi/developer-reference/sdk/) +* [Examples](https://github.com/balancer/b-sdk/tree/main/examples) + +If you have any questions or need assistance with migrating to the new repository, feel free to reach out via the Dev channel on [Discord](https://discord.balancer.fi/). + +Thank you for your understanding, and we hope to see you in our new repository! + # Balancer Javascript SDK A JavaScript SDK which provides commonly used utilties for interacting with Balancer Protocol V2. diff --git a/balancer-js/examples/data/api-token-price-service.ts b/balancer-js/examples/data/api-token-price-service.ts new file mode 100644 index 000000000..a7101c62a --- /dev/null +++ b/balancer-js/examples/data/api-token-price-service.ts @@ -0,0 +1,25 @@ +/** + * Display APRs for pool ids hardcoded under `const ids` + * Run command: yarn example ./examples/data/token-prices.ts + */ +import { ApiTokenPriceService } from '@/modules/sor/token-price/apiTokenPriceService'; + +const dai = '0x6b175474e89094c44da98b954eedeac495271d0f'; +const weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; +const ohm = '0X64AA3364F17A4D01C6F1751FD97C2BD3D7E7F1D5'; + +(async () => { + const apiTokenPriceService = new ApiTokenPriceService(1); + const daiPriceInEth = await apiTokenPriceService.getNativeAssetPriceInToken( + dai + ); + console.log('Dai Price In ETH: ' + daiPriceInEth); + const wethPriceInEth = await apiTokenPriceService.getNativeAssetPriceInToken( + weth + ); + console.log('WETH Price In ETH: ' + wethPriceInEth); + const ohmPriceInEth = await apiTokenPriceService.getNativeAssetPriceInToken( + ohm + ); + console.log('OHM Price In ETH: ' + ohmPriceInEth); +})(); diff --git a/balancer-js/examples/pools/aprs/aprs.base.ts b/balancer-js/examples/pools/aprs/aprs.base.ts new file mode 100644 index 000000000..ef8b46e8b --- /dev/null +++ b/balancer-js/examples/pools/aprs/aprs.base.ts @@ -0,0 +1,44 @@ +/** + * Display APRs for pool ids hardcoded under `const ids` + * + * Run command + * yarn example ./examples/pools/aprs/aprs.arbitrum.ts + */ +import { BalancerSDK, Pool } from '@balancer-labs/sdk'; + +const sdk = new BalancerSDK({ + network: 8453, + rpcUrl: 'https://rpc.ankr.com/base', +}); + +const { pools } = sdk; + +const main = async () => { + const id = + '0xfb4c2e6e6e27b5b4a07a36360c89ede29bb3c9b6000000000000000000000026'; + const pool = (await pools.find(id)) as Pool; + const apr = await pools.apr(pool); + console.log(pool.id, apr); + + // const list = ( + // await pools.where( + // (pool) => + // pool.poolType != 'Element' && + // pool.poolType != 'AaveLinear' && + // pool.poolType != 'LiquidityBootstrapping' + // ) + // ) + // .sort((a, b) => parseFloat(b.totalLiquidity) - parseFloat(a.totalLiquidity)) + // .slice(0, 30) + + // list.forEach(async (pool) => { + // try { + // const apr = await pools.apr(pool) + // console.log(pool.id, apr) + // } catch (e) { + // console.log(e) + // } + // }); +}; + +main(); diff --git a/balancer-js/examples/pools/bpt-price.ts b/balancer-js/examples/pools/bpt-price.ts new file mode 100644 index 000000000..c8d338746 --- /dev/null +++ b/balancer-js/examples/pools/bpt-price.ts @@ -0,0 +1,23 @@ +import { BalancerSDK } from '@balancer-labs/sdk'; + +const sdk = new BalancerSDK({ + network: 1, + rpcUrl: 'https://rpc.ankr.com/eth', + coingecko: { + coingeckoApiKey: 'CG-ViHyrfvtLz2WSCJzm59TfGow', + isDemoApiKey: true, + }, +}); + +const bptPriceExample = async () => { + const poolId = + '0x26cc136e9b8fd65466f193a8e5710661ed9a98270002000000000000000005ad'; + const pool = await sdk.pools.find(poolId); + if (!pool) { + throw new Error('Pool not found'); + } + const bptPrice = await sdk.pools.bptPrice(pool); + console.log('bpt price: ', bptPrice); +}; + +bptPriceExample().catch((error) => console.error(error)); diff --git a/balancer-js/examples/swaps/advanced.ts b/balancer-js/examples/swaps/advanced.ts index f0b80fb0a..e785cb808 100644 --- a/balancer-js/examples/swaps/advanced.ts +++ b/balancer-js/examples/swaps/advanced.ts @@ -42,8 +42,8 @@ async function getAndProcessSwaps( console.log('No Swap'); return; } - // console.log(swapInfo.swaps); - // console.log(swapInfo.tokenAddresses); + console.log(swapInfo.swaps); + console.log(swapInfo.tokenAddresses); console.log(`Return amount: `, swapInfo.returnAmount.toString()); const pools = balancer.swaps.sor.getPools(); @@ -120,15 +120,16 @@ async function getAndProcessSwaps( } async function swapExample() { - const network = Network.GNOSIS; + const network = Network.ARBITRUM; const rpcUrl = FORK_NODES[network]; - const tokenIn = '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d'; - const tokenOut = '0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1'; + const tokenIn = '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'; + const tokenOut = '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'; const swapType = SwapTypes.SwapExactIn; - const amount = parseFixed('20000', 18); + const amount = parseFixed('200000', 6); // Currently Relayer only suitable for ExactIn and non-eth swaps const canUseJoinExitPaths = canUseJoinExit(swapType, tokenIn, tokenOut); + console.log(rpcUrl); const balancer = new BalancerSDK({ network, rpcUrl, diff --git a/balancer-js/examples/swaps/swapDebug.ts b/balancer-js/examples/swaps/swapDebug.ts new file mode 100644 index 000000000..12f35164d --- /dev/null +++ b/balancer-js/examples/swaps/swapDebug.ts @@ -0,0 +1,104 @@ +/** + * Helper example to facilitate swap debugging within the SDK + * + * How to run: + * yarn example examples/swaps/swapDebug.ts + */ +import { ADDRESSES } from '@/test/lib/constants'; +import { FORK_NODES, RPC_URLS, forkSetup } from '@/test/lib/utils'; +import { BalancerSDK, Network } from '@balancer-labs/sdk'; +import { formatFixed } from '@ethersproject/bignumber'; + +const network = Network.MAINNET; +const rpcUrl = RPC_URLS[network]; +const sdk = new BalancerSDK({ + network, + rpcUrl, +}); + +const tokenIn = ADDRESSES[network].BAL8020BPT; +const tokenOut = ADDRESSES[network].auraBal; +const amount = String(BigInt(1000e18)); // 1000 eth + +const { swaps } = sdk; +const erc20Out = sdk.contracts.ERC20(tokenOut.address, sdk.provider); + +async function swap() { + const signer = sdk.provider.getSigner(); + const account = await signer.getAddress(); + + await forkSetup( + signer, + [tokenIn.address], + [tokenIn.slot], + [amount], + FORK_NODES[network] + ); + + // Finding a trading route rely on on-chain data. + // fetchPools will fetch the current data from the subgraph. + // Let's fetch just 5 pools with highest liquidity of tokenOut. + await swaps.fetchPools({ + first: 5, + where: { + swapEnabled: { + eq: true, + }, + tokensList: { + contains: [tokenOut.address], + }, + }, + orderBy: 'totalLiquidity', + orderDirection: 'desc', + }); + + // Set exectution deadline to 60 seconds from now + const deadline = String(Math.ceil(Date.now() / 1000) + 60); + + // Avoid getting rekt by setting low slippage from expected amounts out, 10 bsp = 0.1% + const maxSlippage = 10; + + // Building the route payload + const payload = await swaps.buildRouteExactIn( + account, + account, + tokenIn.address, + tokenOut.address, + amount, + { + maxSlippage, + deadline, + } + ); + + // Extract parameters required for sendTransaction + const { to, data, value } = payload; + + // Execution with ethers.js + try { + const balanceBefore = await erc20Out.balanceOf(account); + + await ( + await signer.sendTransaction({ + to, + data, + value, + gasLimit: 8e6, + }) + ).wait(); + + // check delta + const balanceAfter = await erc20Out.balanceOf(account); + + console.log( + `Amount of tokenOut received: ${formatFixed( + balanceAfter.sub(balanceBefore), + tokenOut.decimals + )}` + ); + } catch (err) { + console.log(err); + } +} + +swap(); diff --git a/balancer-js/package.json b/balancer-js/package.json index 73b4673c5..df3951921 100644 --- a/balancer-js/package.json +++ b/balancer-js/package.json @@ -1,6 +1,6 @@ { "name": "@balancer-labs/sdk", - "version": "1.1.5", + "version": "1.1.6", "description": "JavaScript SDK for interacting with the Balancer Protocol V2", "license": "GPL-3.0-only", "homepage": "https://github.com/balancer-labs/balancer-sdk#readme", @@ -20,7 +20,6 @@ "dist/" ], "scripts": { - "address-book:generate": "npx ts-node -P tsconfig.testing.json -r tsconfig-paths/register ./src/lib/utils/generate-address-books.ts", "build": "rimraf dist && rollup -c", "dev": "rollup -c -w", "test": "ts-mocha --paths --recursive -p tsconfig.testing.json 'src/**/*.spec.ts' --timeout 20000", @@ -70,7 +69,6 @@ "eslint": "^7.9.0", "eslint-plugin-mocha-no-only": "^1.1.1", "eslint-plugin-prettier": "^3.1.4", - "ethers": "^5.0.0", "fishery": "^2.2.2", "hardhat": "^2.9.3", "mocha": "^8.2.1", @@ -88,7 +86,7 @@ "typescript": "^4.0.2" }, "dependencies": { - "@balancer-labs/sor": "^4.1.1-beta.16", + "@balancer-labs/sor": "^4.1.1-beta.17", "@ethersproject/abi": "^5.4.0", "@ethersproject/abstract-signer": "^5.4.0", "@ethersproject/address": "^5.4.0", @@ -99,6 +97,7 @@ "@ethersproject/contracts": "^5.4.0", "@ethersproject/providers": "^5.4.5", "axios": "^0.24.0", + "ethers": "^5", "graphql": "^15.6.1", "graphql-request": "^3.5.0", "json-to-graphql-query": "^2.2.4", diff --git a/balancer-js/src/lib/constants/addresses.json b/balancer-js/src/lib/constants/addresses.json deleted file mode 100644 index 2e70ee6fc..000000000 --- a/balancer-js/src/lib/constants/addresses.json +++ /dev/null @@ -1,729 +0,0 @@ -{ - "1": { - "contracts": { - "aaveLinearPoolFactory": "0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9", - "arbitrumRootGauge": "0x6337949cbc4825bbd09242c811770f6f6fee9ffc", - "arbitrumRootGaugeFactory": "0x1c99324edc771c82a0dccb780cc7dda0045e50e7", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0x8f42adbba1b16eaae3bb5754915e0d06059add75", - "authorizerAdaptorEntrypoint": "0xf5decdb1f3d1ee384908fbe16d2f0348ae43a9ea", - "authorizerWithAdaptorValidation": "0x6048a8c631fb7e77eca533cf9c29784e482391e7", - "avalancheRootGauge": "0xc57b4be50bf6bbe5f6a4fe379da342b32b37bf2f", - "avalancheRootGaugeFactory": "0x10f3e79911a490aa5b5d5cda6f111029c4eab5ac", - "bal": "0xba100000625a3754423978a60c9317c58a424e3d", - "balancerHelpers": "0x5addcca35b7a0d07c74063c48700c8590e87864e", - "balancerMinter": "0x239e55f427d44c3cc793f49bfb507ebe76638a2b", - "balancerQueries": "0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5", - "balancerRelayer": "0xfea793aa415061c483d2390414275ad314b3f621", - "balancerTokenAdmin": "0xf302f9f50958c5593770fdf4d4812309ff77414f", - "balTokenHolderFactory": "0xb848f50141f3d4255b37ac288c25c109104f2158", - "batchRelayerLibrary": "0xf77018c0d817da22cadbdf504c00c0d32ce1e5c2", - "circuitBreakerLib": "0x4967b3353cdf9e5c67421a3890d35f2f3bb50527", - "composableStablePoolFactory": "0xfada0f4547ab2de89d1304a668c39b3e09aa7c76", - "distributionScheduler": "0xbd35248f8325dd1cb2bbf9d01e80a6bb99a792dd", - "doubleEntrypointFixRelayer": "0xca96c4f198d343e251b1a01f3eba061ef3da73c1", - "erc4626LinearPoolFactory": "0x813ee7a840ce909e7fea2117a44a90b8063bd4fd", - "eulerLinearPoolFactory": "0x5f43fba61f63fa6bff101a0a0458cea917f6b347", - "externalWeightedMath": "0x3db89f0ca3b388f2bcdbccd2ff8e13c22459cf75", - "feeDistributor": "0xd3cf852898b21fc233251427c2dc93d3d604f3bb", - "gaugeAdder": "0x5dbad78818d4c8958eff2d5b95b28385a22113cd", - "gaugeController": "0xc128468b7ce63ea702c1f104d55a2566b13d3abd", - "gaugeWorkingBalanceHelper": "0xdab2583911e872a00a851fb80dcc78a4b46ba57c", - "gearboxLinearPoolFactory": "0x39a79eb449fc05c92c39aa6f0e9bfac03be8de5b", - "gnosisRootGauge": "0x05277ce7d1e365d660624612d8b8b9b55bfd4518", - "gnosisRootGaugeFactory": "0x2a18b396829bc29f66a1e59fadd7a0269a6605e8", - "l2GaugeCheckpointer": "0x343688c5cb92115a52ca485af7f62b4b7a2e9ccc", - "liquidityGaugeFactory": "0xf1665e19bc105be4edd3739f88315cc699cc5b65", - "liquidityGaugeV5": "0xe5f96070ca00cd54795416b1a4b4c2403231c548", - "managedPoolAddRemoveTokenLib": "0x4148bf5b0688ed0a87f317c6534cb841f503349e", - "managedPoolAmmLib": "0xb37646acbb1a91287721b2cdbe01ba0dba5e57a2", - "managedPoolFactory": "0xbf904f9f340745b4f0c4702c7b6ab1e808ea6b93", - "merkleOrchard": "0xe3881627b8deebccf9c23b291430a549fc0be5f7", - "mockAaveLendingPool": "0x28fa1e40011adf98898e8243b2a48bb21ebf0c29", - "mockAaveLinearPool": "0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d", - "mockComposableStablePool": "0x5537f945d8c3fcfdc1b8deceebd220fad26afda8", - "mockErc4626LinearPool": "0x9516a2d25958edb8da246a320f2c7d94a0dbe25d", - "mockErc4626Token": "0xb99edc4b289b0f2284fcf3f66884191bdce29624", - "mockEulerLinearPool": "0xdec02e6642e2c999af429f5ce944653cad15e093", - "mockEulerToken": "0xc101dca301a4011c1f925e9622e749e550a1b667", - "mockGearboxDieselToken": "0xb7a32b67aadb3866cc5c2fabc6c6ab8a9027c3c1", - "mockGearboxLinearPool": "0x0d05aac44ac7dd3c7ba5d50be93eb884a057d234", - "mockGearboxVault": "0xc7b779ab638b7a59f490ac95199502343a81e006", - "mockManagedPool": "0xd0cbf6765997b7ca7be6440f5e305b2ec7b96065", - "mockShareToken": "0x192e67544694a7baa2dea94f9b1df58bb3395a12", - "mockSilo": "0x66c94ae8d795e98f69ca65ffac87b38b17be3ca2", - "mockSiloLinearPool": "0x74cbfaf94a3577c539a9dcee9870a6349a33b34f", - "mockSiloRepository": "0x8e2dfc5e111dbe14e9d725210b9342688dd51c6c", - "mockStaticAToken": "0x1f3c910c416ed2340150281c5eb93325c38817a1", - "mockWeightedPool": "0x8055b8c947de30130bc1ec750c8f345a50006b23", - "mockYearnLinearPool": "0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f", - "mockYearnTokenVault": "0x806e02dea8d4a0882cad9fa3fa75b212328692de", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e", - "omniVotingEscrowAdaptor": "0x96484f2abf5e58b15176dbf1a799627b53f13b6d", - "optimismRootGauge": "0xbc230b1a66a138cd9cfc7b352390025978dfadde", - "optimismRootGaugeFactory": "0x866d4b65694c66fbfd15dd6fa933d0a6b3940a36", - "polygonRootGauge": "0xfeb1a24c2752e53576133cdb718f25bc64ebdd52", - "polygonRootGaugeFactory": "0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13", - "polygonZkEvmRootGauge": "0x45bf48d996d22afc9bc150df7fb4d13a49088602", - "polygonZkEvmRootGaugeFactory": "0x9bf951848288ccd87d06fac426150262cd3447de", - "poolRecoveryHelper": "0x1b300c86980a5195bcf49bd419a068d98dc133db", - "preseededVotingEscrowDelegation": "0xb496ff44746a8693a060fafd984da41b253f6790", - "protocolFeePercentagesProvider": "0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0x5ef4c5352882b10893b70dbcaa0c000965bd23c5", - "protocolIdRegistry": "0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68", - "recoveryModeHelper": "0x7827108af2fd9910ea7cf361d9b827941fa7d809", - "siloLinearPoolFactory": "0x4e11aeec21baf1660b1a46472963cb3da7811c89", - "singleRecipientGauge": "0xb2007b8b7e0260042517f635cfd8e6dd2dd7f007", - "singleRecipientGaugeFactory": "0x4fb47126fa83a8734991e41b942ac29a3266c968", - "smartWalletChecker": "0x7869296efd0a76872fee62a058c8fbca5c1c826c", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0x67f8df125b796b05895a6dc8ecf944b9556ecb0b", - "votingEscrow": "0xc128a9954e6c874ea3d62ce62b468ba073093f25", - "votingEscrowDelegation": "0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647", - "votingEscrowDelegationProxy": "0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0", - "votingEscrowRemapper": "0x83e443ef4f9963c77bd860f94500075556668cb8", - "weightedPoolFactory": "0x897888115ada5773e02aa29f775430bfb5f34c51", - "weth": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "wstEthRateProvider": "0x72d07d7dca67b8a406ad1ec34ce969c90bfee768", - "yearnLinearPoolFactory": "0x5f5222ffa40f2aed6380d022184d6ea67c776ee0" - }, - "tokens": { - "AAVE": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", - "aFEI": "0x683923db55fead99a79fa01a27eec3cb19679cc3", - "aFRAX": "0xd4937682df3c8aef4fe912a96a74121c0829e664", - "ALCX": "0xdbdb4d16eda451d0503b854cf79d55697f90c8df", - "alUSD": "0xbc6da0fe9ad5f3b0d58160288917aa56653660e9", - "ANGLE": "0x31429d1856ad1377a8a0079410b297e1a9e214c2", - "AURA": "0xc0c293ce456ff0ed870add98a0828dd4d2903dbf", - "AURABAL": "0x616e8bfa43f920657b3497dbf40d6b1a02d4608d", - "aUSDC": "0xbcca60bb61934080951369a648fb03df4f96263c", - "aUSDT": "0x3ed3b47dd13ec9a98b44e6204a523e766b225811", - "aWBTC": "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656", - "BADGER": "0x3472a5a71965499acd81997a54bba8d852c6e53d", - "BAL": "0xba100000625a3754423978a60c9317c58a424e3d", - "BalWeth8020": "0x5c6ee304399dbdb9c8ef030ab642b10820db8f56", - "bb_a_usd": "0xa13a9247ea42d743238089903570127dda72fe44", - "cDAI": "0x5d3a536e4d6dbd6114cc1ead35777bab948e3643", - "cETH": "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5", - "COMP": "0xc00e94cb662c3520282e6f5717214004a7f26888", - "CRV": "0xd533a949740bb3306d119cc777fa900ba034cd52", - "cUSDC": "0x39aa39c021dfbae8fac545936693ac917d5e7563", - "CVX": "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", - "cvxCRV": "0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7", - "DAI": "0x6b175474e89094c44da98b954eedeac495271d0f", - "DIGG": "0x798d1be841a82a273720ce31c822c61a67a601c3", - "DUSD": "0x5bc25f649fc4e26069ddf4cf4010f9f706c23831", - "ENS": "0xc18360217d8f7ab5e7c516566761ea12ce7f9d72", - "EURS": "0xdb25f211ab05b1c97d595516f45794528a807ad8", - "FARM": "0xa0246c9032bc3a600820415ae600c6388619a14d", - "FEI": "0x956f47f50a910163d8bf957cf5846d573e7f87ca", - "FRAX": "0x853d955acef822db058eb8505911ed77f175b99e", - "FTM": "0x4e15361fd6b4bb609fa63c81a2be19d873717870", - "FXS": "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", - "GEAR": "0xba3335588d9403515223f109edc4eb7269a9ab5d", - "GTC": "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f", - "LINK": "0x514910771af9ca656af840dff83e8264ecf986ca", - "MIM": "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", - "renBTC": "0xeb4c2781e4eba804ce9a9803c67d0893436bb27d", - "RETH": "0xae78736cd615f374d3085123a210448e74fc6393", - "sBTC": "0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6", - "SPELL": "0x090185f2135308bad17527004364ebcc2d37e5f6", - "stkAAVE": "0x4da27a545c0c5b758a6ba100e3a049001de870f5", - "SUSHI": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", - "USDC": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "USDT": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "WBTC": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "WETH": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "xSUSHI": "0x8798249c2e607446efb7ad49ec89dd1865ff4272" - } - }, - "4": { - "contracts": { - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "balancerHelpers": "0x5addcca35b7a0d07c74063c48700c8590e87864e", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x41b953164995c11c81da73d212ed8af25741b7ac", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8" - }, - "tokens": {} - }, - "5": { - "contracts": { - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0x5d90225de345ee24d1d2b6f45de90b056f5265a1", - "authorizerAdaptorEntrypoint": "0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c", - "authorizerWithAdaptorValidation": "0x8ea89804145c007e7d226001a96955ad53836087", - "bal": "0xfa8449189744799ad2ace7e0ebac8bb7575eff47", - "balancerHelpers": "0x5addcca35b7a0d07c74063c48700c8590e87864e", - "balancerMinter": "0xdf0399539a72e2689b8b2dd53c3c2a0883879fdd", - "balancerQueries": "0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5", - "balancerRelayer": "0x03f1ab8b19bce21eb06c364aec9e40322572a1e9", - "balancerTokenAdmin": "0x0f32d7d830e20809bcb9071581a696135dd472b7", - "balTokenHolderFactory": "0x45e617b07021b97407367624648d1a0a358a751a", - "batchRelayerLibrary": "0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b", - "childChainGauge": "0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e", - "childChainGaugeFactory": "0x7ba29fe8e83dd6097a7298075c4affdbda3121cc", - "childChainGaugeRewardHelper": "0xc128a9954e6c874ea3d62ce62b468ba073093f25", - "childChainGaugeTokenAdder": "0x55b18f514d7f0c6c886d0c23ac72df5d3b5f8850", - "childChainLiquidityGaugeFactory": "0x393b918cc2ffa238732e83dd4ee52343f57d767b", - "childChainStreamer": "0x5b5b72d76b68f4bb1d2a10ef0fc77711f8ec7ed0", - "circuitBreakerLib": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "composableStablePoolFactory": "0x1802953277fd955f9a254b80aa0582f193cf1d77", - "distributionScheduler": "0x05a0bf0540f346b6dac25550738343beb51c0f65", - "doubleEntrypointFixRelayer": "0xbe9458ab5b6f289e524410141c8d5e20a6b035fe", - "eulerLinearPoolFactory": "0x813ee7a840ce909e7fea2117a44a90b8063bd4fd", - "externalWeightedMath": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "feeDistributor": "0x42b67611b208e2e9b4cc975f6d74c87b865ae066", - "gaugeAdder": "0x3f170631ed9821ca51a59d996ab095162438dc10", - "gaugeController": "0xbb1ce49b16d55a1f2c6e88102f32144c7334b116", - "gaugeWorkingBalanceHelper": "0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48", - "l2BalancerPseudoMinter": "0x81cfae226343b24ba12ec6521db2c79e7aeeb310", - "l2LayerZeroBridgeForwarder": "0xef44d6786b2b4d544b7850fe67ce6381626bf2d6", - "liquidityGaugeFactory": "0x3b8ca519122cdd8efb272b0d3085453404b25bd0", - "liquidityGaugeV5": "0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647", - "managedPoolAddRemoveTokenLib": "0xacf05be5134d64d150d153818f8c67ee36996650", - "managedPoolAmmLib": "0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee", - "managedPoolFactory": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "merkleOrchard": "0x5cf4928a3205728bd12830e1840f7db85c62a4b9", - "mockComposableStablePool": "0x5d343d374a769d1ab102e0418a516dadb08a86e4", - "mockEulerLinearPool": "0x43fa2c00419f60e18966aa043debd4701cb91b6d", - "mockEulerToken": "0xb99edc4b289b0f2284fcf3f66884191bdce29624", - "mockManagedPool": "0xff79b51ec2934dd1810a8e0325e3b08708720b26", - "mockShareToken": "0xb8bdcbf8ccf443d055d5ffe1d8154fac8187fc94", - "mockSilo": "0xa7a7e22398622bf71ff31dae5355ec7843b13806", - "mockSiloLinearPool": "0xbbb66a4fff47701ec6c528db615f5e7bf1abdaaf", - "mockSiloRepository": "0x7153de1a6d71360f07017838c28deca0d6c03e2a", - "mockWeightedPool": "0x072ed560cc042d7ab1c080a9e4fa8c6f4858deb3", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a", - "nullVotingEscrow": "0xa523f47a933d5020b23629ddf689695aa94612dc", - "omniVotingEscrowAdaptor": "0x83e443ef4f9963c77bd860f94500075556668cb8", - "poolRecoveryHelper": "0x1cbbe6cea5e4fe7d69c586b4e362a646deef105d", - "preseededVotingEscrowDelegation": "0x7af980bdbc36d21ce228efabcca35707566a2be5", - "protocolFeePercentagesProvider": "0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0x85153b639a35d6e6cf8b291aca237fbe67377154", - "protocolIdRegistry": "0x4fb47126fa83a8734991e41b942ac29a3266c968", - "recoveryModeHelper": "0x300ab2038eac391f26d9f895dc61f8f66a548833", - "rewardsOnlyGauge": "0x40bd3faef4268ea40f4c372d7f0a44c3efaaa6b1", - "siloLinearPoolFactory": "0x30fd8a0f7009f50616afdab4af91a0a2ef4eae49", - "singleRecipientGauge": "0x0e9addc34f93bccb45d1f744b9f9301285c5b48f", - "singleRecipientGaugeFactory": "0xe3881627b8deebccf9c23b291430a549fc0be5f7", - "smartWalletChecker": "0x1b6df1ff5db99f8a8a04d38f7478bab056fa35a7", - "testBalancerToken": "0xfa8449189744799ad2ace7e0ebac8bb7575eff47", - "timelockAuthorizer": "0x70e26f740bad6a2cdd762e2478496268882c21d4", - "timelockAuthorizerMigrator": "0x7159c4b96bfcfca232355b55778e85cf9e245192", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0xd13afc362f619b840c8f4aac1d957ce219ef37ca", - "votingEscrow": "0x33a99dcc4c85c014cf12626959111d5898bbcabf", - "votingEscrowDelegation": "0xcff73979321788d59a6170ff012730db2087f31c", - "votingEscrowDelegationProxy": "0x6817149cb753bf529565b4d023d7507ed2ff4bc0", - "votingEscrowRemapper": "0x5dbad78818d4c8958eff2d5b95b28385a22113cd", - "weightedPoolFactory": "0x230a59f4d9adc147480f03b0d3fffecd56c3289a", - "weth": "0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1", - "wstEthRateProvider": "0x80a94f458491ca88f09767e58a92fd23cbf1196f" - }, - "tokens": {} - }, - "10": { - "contracts": { - "aaveLinearPoolFactory": "0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0x8f42adbba1b16eaae3bb5754915e0d06059add75", - "authorizerAdaptorEntrypoint": "0xed86ff0c507d3af5f35d3523b77c17415fcffacb", - "authorizerWithAdaptorValidation": "0xacf05be5134d64d150d153818f8c67ee36996650", - "bal": "0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921", - "balancerHelpers": "0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9", - "balancerQueries": "0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5", - "balancerRelayer": "0x03f1ab8b19bce21eb06c364aec9e40322572a1e9", - "batchRelayerLibrary": "0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b", - "childChainGauge": "0x81cfae226343b24ba12ec6521db2c79e7aeeb310", - "childChainGaugeFactory": "0xa523f47a933d5020b23629ddf689695aa94612dc", - "childChainGaugeRewardHelper": "0x8ab784368a1883da90d8513b48801e2db1cb2d5d", - "childChainGaugeTokenAdder": "0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0", - "childChainLiquidityGaugeFactory": "0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647", - "childChainStreamer": "0x239e55f427d44c3cc793f49bfb507ebe76638a2b", - "circuitBreakerLib": "0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95", - "composableStablePoolFactory": "0x1802953277fd955f9a254b80aa0582f193cf1d77", - "doubleEntrypointFixRelayer": "0x3b8ca519122cdd8efb272b0d3085453404b25bd0", - "erc4626LinearPoolFactory": "0x7adbdabaa80f654568421887c12f09e0c7bd9629", - "externalWeightedMath": "0x8df317a729fcaa260306d7de28888932cb579b88", - "gaugeWorkingBalanceHelper": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "l2BalancerPseudoMinter": "0x4fb47126fa83a8734991e41b942ac29a3266c968", - "l2LayerZeroBridgeForwarder": "0xbef13d1e54d0c79da8b0ad704883e1cea7eb2100", - "managedPoolAddRemoveTokenLib": "0x59562f93c447656f6e4799fc1fc7c3d977c3324f", - "managedPoolAmmLib": "0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d", - "managedPoolFactory": "0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4", - "mockAaveLendingPool": "0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a", - "mockAaveLinearPool": "0x45d37982784f022a9864748b4e8750e1e7019604", - "mockComposableStablePool": "0x11a4cf51bb0bb4d925cadfda61fcda952d64889c", - "mockErc4626LinearPool": "0x2da61ef3cdcb97efb0f7099c02527fabfe94dee5", - "mockErc4626Token": "0x4be0e4d6184348c5ba845a4010528cfc779610b8", - "mockManagedPool": "0xb4af4fdd49da2a2ba9522eadcf86d407a69f19c8", - "mockStaticAToken": "0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c", - "mockWeightedPool": "0x62f5f9a446d198e8e4c84ee56e5217416720edaf", - "mockYearnLinearPool": "0x34557ef500bfc060b8e3f2da58ef725bb7d32202", - "mockYearnTokenVault": "0xb15608d28eb43378a7e7780add3fe9bc132baf40", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0xf302f9f50958c5593770fdf4d4812309ff77414f", - "nullVotingEscrow": "0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68", - "poolRecoveryHelper": "0x26743984e3357efc59f2fd6c1afdc310335a61c9", - "protocolFeePercentagesProvider": "0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0xc128a9954e6c874ea3d62ce62b468ba073093f25", - "protocolIdRegistry": "0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102", - "recoveryModeHelper": "0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98", - "rewardsOnlyGauge": "0xc128468b7ce63ea702c1f104d55a2566b13d3abd", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0x6817149cb753bf529565b4d023d7507ed2ff4bc0", - "votingEscrowDelegationProxy": "0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c", - "weightedPoolFactory": "0x230a59f4d9adc147480f03b0d3fffecd56c3289a", - "weth": "0x4200000000000000000000000000000000000006", - "yearnLinearPoolFactory": "0x19dfef0a828eec0c85fbb335aa65437417390b85" - }, - "tokens": {} - }, - "42": { - "contracts": { - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a", - "balancerHelpers": "0x94905e703fead7f0fd0eee355d267ee909784e6d", - "balancerMinter": "0x1bbfa323155526f54eec458571bb5a75e0c41507", - "balancerTokenAdmin": "0xab093cd16e765b5b23d34030aafaf026558e0a19", - "balTokenHolderFactory": "0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13", - "childChainLiquidityGaugeFactory": "0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f", - "childChainStreamer": "0x4de578134995bea8480d7696946217f356339ab8", - "gaugeController": "0x35c425234dc42e7402f54cc54573f77842963a56", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x1b57f637ce3408f1f834b0b70f9a595b062daea7", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "rewardsOnlyGauge": "0x868543bb787317632f94fcfe8eb85406b123590c", - "testBalancerToken": "0xa2d801064652a269d92ee2a59f3261155ec66830", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "votingEscrow": "0x16ba924752ef283c7946db8a122a6742aa35c1dc", - "votingEscrowDelegation": "0xdc6d62ae091ea77331542042a72e5e38b188837c", - "votingEscrowDelegationProxy": "0x98d0d0a65cbeccaa647a5a95cf27cf2f00e1231c", - "wstEthRateProvider": "0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8" - }, - "tokens": {} - }, - "100": { - "contracts": { - "aaveLinearPoolFactory": "0x62aab12865d7281048c337d53a4dde9d770321e6", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0x5addcca35b7a0d07c74063c48700c8590e87864e", - "authorizerAdaptorEntrypoint": "0x8f42adbba1b16eaae3bb5754915e0d06059add75", - "authorizerWithAdaptorValidation": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "bal": "0x7ef541e2a22058048904fe5744f9c7e4c57af717", - "balancerHelpers": "0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9", - "balancerQueries": "0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e", - "balancerRelayer": "0x3536fd480ca495ac91e698a703248a8915c137a3", - "batchRelayerLibrary": "0xb9ad3466cdd42015cc05d4804dc68d562b6a2065", - "childChainGauge": "0x96484f2abf5e58b15176dbf1a799627b53f13b6d", - "childChainGaugeFactory": "0x83e443ef4f9963c77bd860f94500075556668cb8", - "childChainGaugeRewardHelper": "0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd", - "childChainGaugeTokenAdder": "0x1802953277fd955f9a254b80aa0582f193cf1d77", - "childChainLiquidityGaugeFactory": "0x809b79b53f18e9bc08a961ed4678b901ac93213a", - "childChainStreamer": "0x230a59f4d9adc147480f03b0d3fffecd56c3289a", - "circuitBreakerLib": "0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a", - "composableStablePoolFactory": "0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd", - "externalWeightedMath": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "gaugeWorkingBalanceHelper": "0x682f0ddbfd41d1272982f64a499fb62d80e27589", - "l2BalancerPseudoMinter": "0xa8920455934da4d853faac1f94fe7bef72943ef1", - "l2LayerZeroBridgeForwarder": "0xeb151668006cd04dadd098afd0a82e78f77076c3", - "managedPoolAddRemoveTokenLib": "0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4", - "managedPoolAmmLib": "0xacf05be5134d64d150d153818f8c67ee36996650", - "managedPoolFactory": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "mockAaveLendingPool": "0x040dba12bb3d5c0a73ddfe84c220be3ddba06966", - "mockAaveLinearPool": "0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2", - "mockComposableStablePool": "0xf3678a0b54c61ccd88ce321c2e07f87ac75f08b9", - "mockManagedPool": "0xc061361fda32ff5b65f7d98acc9a87349d3f0768", - "mockStaticAToken": "0x35d8f4a4c0e95f3d925cb4cbbbf513a0172ed8a4", - "mockWeightedPool": "0xd8752f9b0a2c2813796abd2be212a32ffd656ef1", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x85a80afee867adf27b50bdb7b76da70f1e853062", - "nullVotingEscrow": "0x013d4382f291be5688afbcc741ee8a24c66b2c92", - "poolRecoveryHelper": "0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68", - "protocolFeePercentagesProvider": "0x41b953164995c11c81da73d212ed8af25741b7ac", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0xdae7e32adc5d490a43ccba1f0c736033f2b4efca", - "protocolIdRegistry": "0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e", - "recoveryModeHelper": "0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee", - "rewardsOnlyGauge": "0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0x5dbad78818d4c8958eff2d5b95b28385a22113cd", - "votingEscrowDelegationProxy": "0x7a2535f5fb47b8e44c02ef5d9990588313fe8f05", - "weightedPoolFactory": "0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7", - "weth": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d" - }, - "tokens": {} - }, - "137": { - "contracts": { - "aaveLinearPoolFactory": "0xab2372275809e15198a7968c7f324053867cdb0c", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0xc128468b7ce63ea702c1f104d55a2566b13d3abd", - "authorizerAdaptorEntrypoint": "0xab093cd16e765b5b23d34030aafaf026558e0a19", - "authorizerWithAdaptorValidation": "0x020301b0a99efb6816b41007765fb577259ec418", - "bal": "0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3", - "balancerHelpers": "0x239e55f427d44c3cc793f49bfb507ebe76638a2b", - "balancerQueries": "0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5", - "balancerRelayer": "0xd18d5d377eb23362e54fa496597d7e962d56c554", - "batchRelayerLibrary": "0x4271de2595c3d85d2d455c5778adf2d7ad54322c", - "childChainGauge": "0xc9b36096f5201ea332db35d6d195774ea0d5988f", - "childChainGaugeFactory": "0x22625eedd92c81a219a83e1dc48f88d54786b017", - "childChainGaugeRewardHelper": "0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33", - "childChainGaugeTokenAdder": "0x1554ee754707d5c93b7934af404747aba521aaf2", - "childChainLiquidityGaugeFactory": "0x3b8ca519122cdd8efb272b0d3085453404b25bd0", - "childChainStreamer": "0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0", - "circuitBreakerLib": "0xedfd0a7005a7c72c44ff13bea370c86a9d11bee1", - "composableStablePoolFactory": "0x6ab5549bbd766a43afb687776ad8466f8b42f777", - "doubleEntrypointFixRelayer": "0x79d0011892fe558fc5a4ec7d4ca5db59069f460f", - "erc4626LinearPoolFactory": "0x5c5fcf8fbd4cd563ced27e7d066b88ee20e1867a", - "externalWeightedMath": "0x72ebafddc4c7d3eb702c81295d90a8b29f008a03", - "gaugeWorkingBalanceHelper": "0x08fd003d8f1892d4ec684e6c3ee0128081be461b", - "l2BalancerPseudoMinter": "0x47b489bf5836f83abd928c316f8e39bc0587b020", - "l2LayerZeroBridgeForwarder": "0xb98f54a74590a6e681ff664b2fa22ebffe1a929e", - "managedPoolAddRemoveTokenLib": "0xf553bf40db86c35f3058434039d51aad29c6180b", - "managedPoolAmmLib": "0xcefd59eedafa9ee8ccda1aaf944088e68b5bd890", - "managedPoolFactory": "0xb8dfa4fd0f083de2b7edc0d5eed5e684e54ba45d", - "merkleOrchard": "0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68", - "mockAaveLendingPool": "0x0df6bb26533eb86f371b1f70eecdd955420523c6", - "mockAaveLinearPool": "0x0889b240a5876aae745ac19f1771853671dc5d36", - "mockComposableStablePool": "0x0f25823cf786b78696b16536e2f2b9835289ab51", - "mockErc4626LinearPool": "0xc55ec796a4debe625d95436a3531f4950b11bdcf", - "mockErc4626Token": "0x19dfef0a828eec0c85fbb335aa65437417390b85", - "mockManagedPool": "0x074efd7806e6c28e8b6611075b1aa62c6c408090", - "mockStaticAToken": "0xe72b2780d3c57f781bd4e8572e200cd7e9a447c2", - "mockWeightedPool": "0xb77e03655ee894aade216a83d05511a9f9895126", - "mockYearnLinearPool": "0xdae301690004946424e41051ace1791083be42a1", - "mockYearnTokenVault": "0x28fa1e40011adf98898e8243b2a48bb21ebf0c29", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x41b953164995c11c81da73d212ed8af25741b7ac", - "nullVotingEscrow": "0x1311fbc9f60359639174c1e7cc2032dbdb5cc4d1", - "poolRecoveryHelper": "0x495f696430f4a51f7fcb98fbe68a9cb7a07fb1ba", - "protocolFeePercentagesProvider": "0x42ac0e6fa47385d55aff070d79ef0079868c48a6", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0xef44d6786b2b4d544b7850fe67ce6381626bf2d6", - "protocolIdRegistry": "0xa523f47a933d5020b23629ddf689695aa94612dc", - "recoveryModeHelper": "0x1eb79551ca0e83ec145608bc39a0c7f10ca21aa5", - "rewardsOnlyGauge": "0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0xd961e30156c2e0d0d925a0de45f931cb7815e970", - "votingEscrowDelegationProxy": "0x0f08eef2c785aa5e7539684af04755dec1347b7c", - "weightedPoolFactory": "0xfc8a407bba312ac761d8bfe04ce1201904842b76", - "weth": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - "yearnLinearPoolFactory": "0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9" - }, - "tokens": { - "BAL": "0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3", - "USDC": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "WBTC": "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", - "WETH": "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - "WMATIC": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270" - } - }, - "1101": { - "contracts": { - "aaveLinearPoolFactory": "0x4b7b369989e613ff2c65768b7cf930cc927f901e", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965", - "authorizerAdaptorEntrypoint": "0xb9ad3466cdd42015cc05d4804dc68d562b6a2065", - "authorizerWithAdaptorValidation": "0x8df317a729fcaa260306d7de28888932cb579b88", - "bal": "0x120ef59b80774f02211563834d8e3b72cb1649d6", - "balancerHelpers": "0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9", - "balancerQueries": "0x809b79b53f18e9bc08a961ed4678b901ac93213a", - "balancerRelayer": "0x4678731dc41142a902a114ac5b2f77b63f4a259d", - "batchRelayerLibrary": "0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a", - "childChainGauge": "0x59562f93c447656f6e4799fc1fc7c3d977c3324f", - "childChainGaugeFactory": "0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95", - "circuitBreakerLib": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "composableStablePoolFactory": "0x8ea89804145c007e7d226001a96955ad53836087", - "erc4626LinearPoolFactory": "0x6b1da720be2d11d95177ccfc40a917c2688f396c", - "externalWeightedMath": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "gaugeWorkingBalanceHelper": "0xef454a7b3f965d3f6723e462405246f8cd865425", - "gearboxLinearPoolFactory": "0x687b8c9b41e01be8b591725fac5d5f52d0564d79", - "l2BalancerPseudoMinter": "0x475d18169be8a89357a9ee3ab00ca386d20fa229", - "l2LayerZeroBridgeForwarder": "0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d", - "managedPoolAddRemoveTokenLib": "0xacf05be5134d64d150d153818f8c67ee36996650", - "managedPoolAmmLib": "0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee", - "managedPoolFactory": "0xaf779e58dafb4307b998c7b3c9d3f788dfc80632", - "mockAaveLendingPool": "0x161f4014c27773840ccb4ec1957113e6dd028846", - "mockAaveLinearPool": "0xbfd65c6160cfd638a85c645e6e6d8acac5dac935", - "mockComposableStablePool": "0x6f5f794a3cef904b8517c4c311de2fa837ff24a0", - "mockErc4626LinearPool": "0xac4b72c01072a52b73ca71105504f1372efcce0d", - "mockErc4626Token": "0x0c6052254551eae3ecac77b01dfcf1025418828f", - "mockGearboxDieselToken": "0x698caed853be9cea96c268f565e2b61d3b2bcda4", - "mockGearboxLinearPool": "0x32f03464fdf909fdf3798f87ff3712b10c59bd86", - "mockGearboxVault": "0x88ed12a90142fdbfe2a28f7d5b48927254c7e760", - "mockLiquidityBootstrappingPool": "0x3c87ff3e9307dbebfae720e04c6439e49f79bf9b", - "mockManagedPool": "0x522ee506a2f63d0ae1d79d6f5dbd9d0bca32c866", - "mockStaticAToken": "0x4638ab64022927c9bd5947607459d13f57f1551c", - "mockWeightedPool": "0x78385153d2f356c87001f09bb5424137c618d38b", - "mockYearnLinearPool": "0x02c9dcb975262719a61f9b40bdf0987ead9add3a", - "mockYearnTokenVault": "0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98", - "nullVotingEscrow": "0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd", - "poolRecoveryHelper": "0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd", - "protocolFeePercentagesProvider": "0x1802953277fd955f9a254b80aa0582f193cf1d77", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0x230a59f4d9adc147480f03b0d3fffecd56c3289a", - "protocolIdRegistry": "0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7", - "recoveryModeHelper": "0x300ab2038eac391f26d9f895dc61f8f66a548833", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "votingEscrowDelegationProxy": "0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7", - "weightedPoolFactory": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "weth": "0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9", - "yearnLinearPoolFactory": "0x44d33798dddcdabc93fe6a40c80588033dc502d3" - }, - "tokens": {} - }, - "8453": { - "contracts": { - "aaveLinearPoolFactory": "0x687b8c9b41e01be8b591725fac5d5f52d0564d79", - "authorizer": "0x809b79b53f18e9bc08a961ed4678b901ac93213a", - "authorizerAdaptor": "0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7", - "authorizerAdaptorEntrypoint": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "authorizerWithAdaptorValidation": "0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee", - "bal": "0x7c6b91d9be155a6db01f749217d76ff02a7227f2", - "balancerHelpers": "0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9", - "balancerQueries": "0x300ab2038eac391f26d9f895dc61f8f66a548833", - "balancerRelayer": "0x76f7204b62f554b79d444588edac9dfa7032c71a", - "batchRelayerLibrary": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "childChainGauge": "0x59562f93c447656f6e4799fc1fc7c3d977c3324f", - "childChainGaugeFactory": "0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95", - "circuitBreakerLib": "0xef454a7b3f965d3f6723e462405246f8cd865425", - "composableStablePoolFactory": "0x8df317a729fcaa260306d7de28888932cb579b88", - "erc4626LinearPoolFactory": "0x161f4014c27773840ccb4ec1957113e6dd028846", - "externalWeightedMath": "0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd", - "gaugeWorkingBalanceHelper": "0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48", - "gearboxLinearPoolFactory": "0x9dd32684176638d977883448a4c914311c07bd62", - "l2BalancerPseudoMinter": "0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7", - "l2LayerZeroBridgeForwarder": "0x8ea89804145c007e7d226001a96955ad53836087", - "managedPoolAddRemoveTokenLib": "0xb19382073c7a0addbb56ac6af1808fa49e377b75", - "managedPoolAmmLib": "0x7d2248f194755dca9a1887099394f39476d28c9a", - "managedPoolFactory": "0x9a62c91626d39d0216b3959112f9d4678e20134d", - "mockAaveLendingPool": "0x88ed12a90142fdbfe2a28f7d5b48927254c7e760", - "mockAaveLinearPool": "0x712e23a9b91aa30ee7997d1c7a1a285d4c7912d1", - "mockComposableStablePool": "0x7f6e9d6a4093af9d09bae92d24bfe42fc5369ae6", - "mockErc4626LinearPool": "0x1cc2e10c486ffb7228810b9c7c183d0cd92cdf44", - "mockErc4626Token": "0x4638ab64022927c9bd5947607459d13f57f1551c", - "mockGearboxDieselToken": "0xb521dd5c8e13fe202626cac98873fea2b7760ce4", - "mockGearboxLinearPool": "0x3c28a59356b473847aaa5e0b6f561636079213a6", - "mockGearboxVault": "0x79e435875ccee3cd9e8da23fe34f9a011d05ea6c", - "mockLiquidityBootstrappingPool": "", - "mockManagedPool": "0xe50ad96af9370d05d3c1ce85f17c31557b29c4ee", - "mockStaticAToken": "0x698caed853be9cea96c268f565e2b61d3b2bcda4", - "mockWeightedPool": "0xd9dbbfaa703f3c33838365ae00fe4eb22cdf8d46", - "mockYearnLinearPool": "0x369877467fc3b6774de4e11e0c0abbde70eb40fd", - "mockYearnTokenVault": "0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x0c6052254551eae3ecac77b01dfcf1025418828f", - "nullVotingEscrow": "0x475d18169be8a89357a9ee3ab00ca386d20fa229", - "poolRecoveryHelper": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "protocolFeePercentagesProvider": "0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0xacf05be5134d64d150d153818f8c67ee36996650", - "protocolIdRegistry": "0x682f0ddbfd41d1272982f64a499fb62d80e27589", - "recoveryModeHelper": "0x313a8d36b1d90a4cba3a505fdc3480c3870be053", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "votingEscrowDelegationProxy": "0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd", - "weightedPoolFactory": "0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4", - "weth": "0x4200000000000000000000000000000000000006", - "yearnLinearPoolFactory": "0x44d33798dddcdabc93fe6a40c80588033dc502d3" - }, - "tokens": {} - }, - "42161": { - "contracts": { - "aaveLinearPoolFactory": "0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e", - "authorizerAdaptorEntrypoint": "0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a", - "authorizerWithAdaptorValidation": "0x6b1da720be2d11d95177ccfc40a917c2688f396c", - "bal": "0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8", - "balancerHelpers": "0x77d46184d22ca6a3726a2f500c776767b6a3d6ab", - "balancerQueries": "0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5", - "balancerRelayer": "0x598ce0f1ab64b27256759ef99d883ee51138b9bd", - "batchRelayerLibrary": "0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd", - "childChainGauge": "0xa523f47a933d5020b23629ddf689695aa94612dc", - "childChainGaugeFactory": "0x6817149cb753bf529565b4d023d7507ed2ff4bc0", - "childChainGaugeRewardHelper": "0xa0dabebaad1b243bbb243f933013d560819eb66f", - "childChainGaugeTokenAdder": "0xbfd9769b061e57e478690299011a028194d66e3c", - "childChainLiquidityGaugeFactory": "0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2", - "childChainStreamer": "0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8", - "circuitBreakerLib": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "composableStablePoolFactory": "0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95", - "doubleEntrypointFixRelayer": "0x8e5698dc4897dc12243c8642e77b4f21349db97c", - "erc4626LinearPoolFactory": "0x7adbdabaa80f654568421887c12f09e0c7bd9629", - "externalWeightedMath": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "gaugeWorkingBalanceHelper": "0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b", - "l2BalancerPseudoMinter": "0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68", - "l2LayerZeroBridgeForwarder": "0x12ca9de662a7bf5dc89e034a5083ef751b08ede7", - "managedPoolAddRemoveTokenLib": "0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee", - "managedPoolAmmLib": "0x300ab2038eac391f26d9f895dc61f8f66a548833", - "managedPoolFactory": "0x8ea89804145c007e7d226001a96955ad53836087", - "merkleOrchard": "0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102", - "mockAaveLendingPool": "0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a", - "mockAaveLinearPool": "0x19b1c92631405a0a9495ccba0becf4f2e8e908bd", - "mockComposableStablePool": "0xff7e6b102516e071dcda763ee9d02c1515481db5", - "mockErc4626LinearPool": "0x3f53a862919ccfa023cb6ace91378a79fb0f6bf5", - "mockErc4626Token": "0x4be0e4d6184348c5ba845a4010528cfc779610b8", - "mockManagedPool": "0xf5a71257b331c02da1eae52151c3d600f16b76f0", - "mockStaticAToken": "0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c", - "mockWeightedPool": "0x129c6402ff88611aa59bf2e14b39e091822e2c9c", - "mockYearnLinearPool": "0x1fa7f727934226aedab636d62a084931b97d366b", - "mockYearnTokenVault": "0xb15608d28eb43378a7e7780add3fe9bc132baf40", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x1802953277fd955f9a254b80aa0582f193cf1d77", - "nullVotingEscrow": "0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c", - "poolRecoveryHelper": "0xb5e56cc3d2e38e53b1166175c59e921a37cdc1e2", - "protocolFeePercentagesProvider": "0x5ef4c5352882b10893b70dbcaa0c000965bd23c5", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0x70bbd023481788e443472e123ab963e5ebf58d06", - "protocolIdRegistry": "0x5cf4928a3205728bd12830e1840f7db85c62a4b9", - "recoveryModeHelper": "0x682f0ddbfd41d1272982f64a499fb62d80e27589", - "rewardsOnlyGauge": "0x41b953164995c11c81da73d212ed8af25741b7ac", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e", - "votingEscrowDelegationProxy": "0x81cfae226343b24ba12ec6521db2c79e7aeeb310", - "weightedPoolFactory": "0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7", - "weth": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", - "yearnLinearPoolFactory": "0x19dfef0a828eec0c85fbb335aa65437417390b85" - }, - "tokens": { - "BADGER": "0xbfa641051ba0a0ad1b0acf549a89536a0d76472e", - "CRV": "0x11cdb42b0eb46d95f990bedd4695a6e3fa034978", - "LDO": "0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60", - "renBTC": "0xdbf31df14b66535af65aac99c32e9ea844e14501", - "SUSHI": "0xd4d42f0b6def4ce0383636770ef773390d85c61a", - "USDC": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", - "USDT": "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", - "WBTC": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", - "WETH": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1" - } - }, - "43114": { - "contracts": { - "aaveLinearPoolFactory": "0x6caf662b573f577de01165d2d38d1910bba41f8a", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0xdae7e32adc5d490a43ccba1f0c736033f2b4efca", - "authorizerAdaptorEntrypoint": "0x4e7bbd911cf1efa442bc1b2e9ea01ffe785412ec", - "authorizerWithAdaptorValidation": "0x8df317a729fcaa260306d7de28888932cb579b88", - "bal": "0xe15bcb9e0ea69e6ab9fa080c4c4a5632896298c3", - "balancerHelpers": "0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9", - "balancerQueries": "0xc128468b7ce63ea702c1f104d55a2566b13d3abd", - "balancerRelayer": "0x03f1ab8b19bce21eb06c364aec9e40322572a1e9", - "batchRelayerLibrary": "0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b", - "childChainGauge": "0x4b7b369989e613ff2c65768b7cf930cc927f901e", - "childChainGaugeFactory": "0x161f4014c27773840ccb4ec1957113e6dd028846", - "childChainGaugeRewardHelper": "0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647", - "childChainGaugeTokenAdder": "0xf302f9f50958c5593770fdf4d4812309ff77414f", - "childChainLiquidityGaugeFactory": "0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2", - "childChainStreamer": "0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8", - "circuitBreakerLib": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "composableStablePoolFactory": "0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98", - "distributionScheduler": "0xc128a9954e6c874ea3d62ce62b468ba073093f25", - "erc4626LinearPoolFactory": "0x4507d91cd2c0d51d9b4f30bf0b93afc938a70ba5", - "externalWeightedMath": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "gaugeWorkingBalanceHelper": "0x687b8c9b41e01be8b591725fac5d5f52d0564d79", - "l2BalancerPseudoMinter": "0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b", - "l2LayerZeroBridgeForwarder": "0x4638ab64022927c9bd5947607459d13f57f1551c", - "managedPoolAddRemoveTokenLib": "0xacf05be5134d64d150d153818f8c67ee36996650", - "managedPoolAmmLib": "0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee", - "managedPoolFactory": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "mockAaveLendingPool": "0x57ea28a99394978d060e483477c0fd9fb9afa96c", - "mockAaveLinearPool": "0xa826a114b0c7db4d1ff4a4be845a78998c64564c", - "mockComposableStablePool": "0xea4643102dfc03d5e382e7827bf767f6587e9965", - "mockErc4626LinearPool": "0xed3e2f496cbcd8e212192fb8d1499842f04a0d19", - "mockErc4626Token": "0x2ebe41e1aa44d61c206a94474932dadc7d3fd9e3", - "mockManagedPool": "0x3fb81f6fb0dd94c6fc7e138887f1ca4cdb5e2999", - "mockStaticAToken": "0xd8b6b96c88ad626eb6209c4876e3b14f45f8803a", - "mockWeightedPool": "0xb2b5b452d53401391155ea48c4451f6e9b0dd058", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e", - "nullVotingEscrow": "0x6b1da720be2d11d95177ccfc40a917c2688f396c", - "poolRecoveryHelper": "0x3b8ca519122cdd8efb272b0d3085453404b25bd0", - "protocolFeePercentagesProvider": "0x239e55f427d44c3cc793f49bfb507ebe76638a2b", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0x8f42adbba1b16eaae3bb5754915e0d06059add75", - "recoveryModeHelper": "0x300ab2038eac391f26d9f895dc61f8f66a548833", - "rewardsOnlyGauge": "0x41b953164995c11c81da73d212ed8af25741b7ac", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "votingEscrowDelegationProxy": "0x0c6052254551eae3ecac77b01dfcf1025418828f", - "weightedPoolFactory": "0x230a59f4d9adc147480f03b0d3fffecd56c3289a", - "weth": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" - }, - "tokens": {} - }, - "11155111": { - "contracts": { - "aaveLinearPoolFactory": "0xdf9b5b00ef9bca66e9902bd813db14e4343be025", - "authorizer": "0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6", - "authorizerAdaptor": "0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965", - "authorizerAdaptorEntrypoint": "0xb9ad3466cdd42015cc05d4804dc68d562b6a2065", - "authorizerWithAdaptorValidation": "0xb521dd5c8e13fe202626cac98873fea2b7760ce4", - "bal": "0xb19382073c7a0addbb56ac6af1808fa49e377b75", - "balancerHelpers": "0xdae7e32adc5d490a43ccba1f0c736033f2b4efca", - "balancerMinter": "0x1783cd84b3d01854a96b4ed5843753c2ccbd574a", - "balancerQueries": "0x1802953277fd955f9a254b80aa0582f193cf1d77", - "balancerRelayer": "0x6d5342d716c13d9a3f072a2b11498624ade27f90", - "balancerTokenAdmin": "0x7d2248f194755dca9a1887099394f39476d28c9a", - "balTokenHolderFactory": "0xef454a7b3f965d3f6723e462405246f8cd865425", - "batchRelayerLibrary": "0x5f6848976c2914403b425f18b589a65772f082e3", - "childChainGauge": "0xc49ca921c4cd1117162eaeec0ee969649997950c", - "childChainGaugeFactory": "0xc370cd86d5488c1788b62f11b09adb0c47f47440", - "circuitBreakerLib": "0x4c0c450bedb9282a7a54fcb316c285e85a8c0265", - "composableStablePoolFactory": "0xa3fd20e29358c056b727657e83dfd139abbc9924", - "erc4626LinearPoolFactory": "0x59562f93c447656f6e4799fc1fc7c3d977c3324f", - "externalWeightedMath": "0x8246e571d88acd1346179cc3641de87fe3544d7a", - "feeDistributor": "0xa6971317fb06c76ef731601c64433a4846fca707", - "gaugeAdder": "0xe42ffa682a26ef8f25891db4882932711d42e467", - "gaugeController": "0x577e5993b9cc480f07f98b5ebd055604bd9071c4", - "gaugeWorkingBalanceHelper": "0x2e4abed3362a622c5f712bb183005a476b146bd3", - "gearboxLinearPoolFactory": "0x8df317a729fcaa260306d7de28888932cb579b88", - "l2BalancerPseudoMinter": "0xb51f7ffc97cedfb6922e8b9bbf3ef7575fafd630", - "l2LayerZeroBridgeForwarder": "0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7", - "liquidityGaugeFactory": "0x2ff226cd12c80511a641a6101f071d853a4e5363", - "liquidityGaugeV5": "0x82416ce6ea7dd4923d4a3ed70a79b4a432a382c4", - "managedPoolAddRemoveTokenLib": "0xc7416e4f3715467ddcf28dc409a9483b2e4d4f43", - "managedPoolAmmLib": "0xa30ade89e6af5b0ca515cd78e44f9ad0c63989b2", - "managedPoolFactory": "0x63e179c5b6d54b2c2e36b9ce4085ef5a8c86d50c", - "mockAaveLendingPool": "0x300ab2038eac391f26d9f895dc61f8f66a548833", - "mockAaveLinearPool": "0xe4efd99f3c03778ba913eb578c599329634e2bd7", - "mockComposableStablePool": "0xa8d865fe1d68a405b29f884358468c9b52d4841d", - "mockErc4626LinearPool": "0x0c2ead6f2dc2a9385187023f4cec5925337b330f", - "mockErc4626Token": "0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95", - "mockGearboxDieselToken": "0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4", - "mockGearboxLinearPool": "0x112a7b7ca66e6963c49bc523a415f7d8cdb806b9", - "mockGearboxVault": "0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98", - "mockLiquidityBootstrappingPool": "0xe90472ffc41d7ddf8e3b456bba748e3f22c59c6f", - "mockManagedPool": "0xe458224ca8d6605c87b73e92aa5cb7a4e77770f3", - "mockShareToken": "0x0c6052254551eae3ecac77b01dfcf1025418828f", - "mockSilo": "0x6b1da720be2d11d95177ccfc40a917c2688f396c", - "mockSiloLinearPool": "0xa149cf2d795aab83a15673f5beade9361e4e3f65", - "mockSiloRepository": "0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48", - "mockStaticAToken": "0x03f3fb107e74f2eac9358862e91ad3c692712054", - "mockWeightedPool": "0xf7a7e1f48fa43cb7919ff4eb362c5be78092df4a", - "mockYearnLinearPool": "0x016b7366f76aa2794097798b90cf239796aeff8d", - "mockYearnTokenVault": "0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc", - "noProtocolFeeLiquidityBootstrappingPoolFactory": "0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b", - "nullVotingEscrow": "0x475d18169be8a89357a9ee3ab00ca386d20fa229", - "omniVotingEscrowAdaptor": "0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5", - "poolRecoveryHelper": "0x1b6f057520b4e826271d47b8bdab98e35af17e59", - "preseededVotingEscrowDelegation": "0xb1a4fe1c6d25a0ddab47431a92a723dd71d9021f", - "protocolFeePercentagesProvider": "0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd", - "protocolFeesCollector": "0xce88686553686da562ce7cea497ce749da109f9f", - "protocolFeesWithdrawer": "0x809b79b53f18e9bc08a961ed4678b901ac93213a", - "protocolIdRegistry": "0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7", - "recoveryModeHelper": "0x5419e785b83ad3539d3a8741c0abb77d90d8784e", - "siloLinearPoolFactory": "0x8ea89804145c007e7d226001a96955ad53836087", - "singleRecipientGauge": "0x9a5ddde7056ceffb03d9962c4549ac1c4ad1f985", - "singleRecipientGaugeFactory": "0x7ee4d172ae50c627a1bfa9a99e1260c54da26fdf", - "smartWalletChecker": "0x230a59f4d9adc147480f03b0d3fffecd56c3289a", - "testBalancerToken": "0xb19382073c7a0addbb56ac6af1808fa49e377b75", - "vault": "0xba12222222228d8ba445958a75a0704d566bf2c8", - "veBoostV2": "0x927906bbac747c13c75f6447fe8abb490eab456c", - "votingEscrow": "0x150a72e4d4d81bbf045565e232c50ed0931ad795", - "votingEscrowDelegation": "0x0c5538098ebe88175078972f514c9e101d325d4f", - "votingEscrowDelegationProxy": "0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd", - "votingEscrowRemapper": "0xf24917fb88261a37cc57f686ebc831a5c0b9fd39", - "weightedPoolFactory": "0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd", - "weth": "0x7b79995e5f793a07bc00c21412e50ecae098e7f9", - "yearnLinearPoolFactory": "0xacf05be5134d64d150d153818f8c67ee36996650" - }, - "tokens": {} - } -} \ No newline at end of file diff --git a/balancer-js/src/lib/constants/config.ts b/balancer-js/src/lib/constants/config.ts index 4357dba75..4655a6992 100644 --- a/balancer-js/src/lib/constants/config.ts +++ b/balancer-js/src/lib/constants/config.ts @@ -1,6 +1,5 @@ import { Network } from './network'; -import { BalancerNetworkConfig } from '@/types'; -import addressesByNetwork from './addresses.json'; +import type { BalancerNetworkConfig } from '@/types'; export const balancerVault = '0xBA12222222228d8Ba445958a75a0704d566BF2C8'; @@ -22,12 +21,27 @@ export const BALANCER_NETWORK_CONFIG: Record = { '0x8e5698dc4897dc12243c8642e77b4f21349db97c', veBalProxy: '0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0', gyroConfigProxy: '0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6', - ...addressesByNetwork[Network.MAINNET].contracts, + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerHelpers: '0x5addcca35b7a0d07c74063c48700c8590e87864e', + balancerMinter: '0x239e55f427d44c3cc793f49bfb507ebe76638a2b', + balancerRelayer: '0xfea793aa415061c483d2390414275ad314b3f621', + gaugeController: '0xc128468b7ce63ea702c1f104d55a2566b13d3abd', + feeDistributor: '0xd3cf852898b21fc233251427c2dc93d3d604f3bb', + protocolFeePercentagesProvider: + '0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a', + weightedPoolFactory: '0x897888115ada5773e02aa29f775430bfb5f34c51', + composableStablePoolFactory: + '0xfada0f4547ab2de89d1304a668c39b3e09aa7c76', + aaveLinearPoolFactory: '0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9', + erc4626LinearPoolFactory: '0x813ee7a840ce909e7fea2117a44a90b8063bd4fd', + eulerLinearPoolFactory: '0x5f43fba61f63fa6bff101a0a0458cea917f6b347', + gearboxLinearPoolFactory: '0x39a79eb449fc05c92c39aa6f0e9bfac03be8de5b', + yearnLinearPoolFactory: '0x5f5222ffa40f2aed6380d022184d6ea67c776ee0', }, tokens: { - bal: addressesByNetwork[Network.MAINNET].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.MAINNET].contracts.weth, - bbaUsd: addressesByNetwork[Network.MAINNET].tokens.bb_a_usd, + bal: '0xba100000625a3754423978a60c9317c58a424e3d', + wrappedNativeAsset: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + bbaUsd: '0xa13a9247ea42d743238089903570127dda72fe44', lbpRaisingTokens: [ '0x6b175474e89094c44da98b954eedeac495271d0f', // DAI '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC @@ -36,16 +50,15 @@ export const BALANCER_NETWORK_CONFIG: Record = { stETH: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84', wstETH: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25', - ...addressesByNetwork[Network.MAINNET].tokens, }, }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2', + 'https://api.studio.thegraph.com/query/75376/balancer-v2/version/latest', gaugesSubgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges', + 'https://api.studio.thegraph.com/query/75376/balancer-gauges/version/latest', blockNumberSubgraph: - 'https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks', + 'https://api.studio.thegraph.com/query/48427/ethereum-blocks/version/latest⁠', }, thirdParty: { coingecko: { @@ -60,10 +73,10 @@ export const BALANCER_NETWORK_CONFIG: Record = { }, }, poolsToIgnore: [ - '0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee', // a pool made by an external dev who was playing with a novel rate provider mechanism in production. - '0x0afbd58beca09545e4fb67772faf3858e610bcd0', - '0xf22ff21e17157340575158ad7394e068048dd98b', - '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa', + '0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6', // a pool made by an external dev who was playing with a novel rate provider mechanism in production. + '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9', + '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8', + '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e', ], sorConnectingTokens: [ { @@ -78,6 +91,17 @@ export const BALANCER_NETWORK_CONFIG: Record = { symbol: 'DOLA', address: '0x865377367054516e17014CcdED1e7d814EDC9ce4', }, + { + symbol: 'rEth', + address: '0xae78736cd615f374d3085123a210448e74fc6393', + }, + { + symbol: 'ETHx', + address: '0xa35b1b31ce002fbf2058d22f30f95d405200a15b', + }, + ], + sorTriPathMidPoolIds: [ + '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // rETH/WETH ], }, [Network.POLYGON]: { @@ -89,26 +113,36 @@ export const BALANCER_NETWORK_CONFIG: Record = { poolDataQueries: '0x84813aA3e079A665C0B80F944427eE83cBA63617', gaugeClaimHelper: '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33', gyroConfigProxy: '0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67', - ...addressesByNetwork[Network.POLYGON].contracts, + + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerHelpers: '0x239e55f427d44c3cc793f49bfb507ebe76638a2b', + balancerRelayer: '0xd18d5d377eb23362e54fa496597d7e962d56c554', + protocolFeePercentagesProvider: + '0x42ac0e6fa47385d55aff070d79ef0079868c48a6', + weightedPoolFactory: '0xfc8a407bba312ac761d8bfe04ce1201904842b76', + composableStablePoolFactory: + '0x6ab5549bbd766a43afb687776ad8466f8b42f777', + aaveLinearPoolFactory: '0xab2372275809e15198a7968c7f324053867cdb0c', + erc4626LinearPoolFactory: '0x5c5fcf8fbd4cd563ced27e7d066b88ee20e1867a', + yearnLinearPoolFactory: '0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9', }, tokens: { - bal: addressesByNetwork[Network.POLYGON].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.POLYGON].contracts.weth, + bal: '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3', + wrappedNativeAsset: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', lbpRaisingTokens: [ '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC ], - ...addressesByNetwork[Network.POLYGON].tokens, }, }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2', + 'https://api.studio.thegraph.com/query/75376/balancer-polygon-v2/version/latest', gaugesSubgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon', + 'https://api.studio.thegraph.com/query/75376/balancer-gauges-polygon/version/latest', blockNumberSubgraph: - 'https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks', + 'https://api.studio.thegraph.com/query/48427/polygon-blocks/version/latest', }, thirdParty: { coingecko: { @@ -118,8 +152,8 @@ export const BALANCER_NETWORK_CONFIG: Record = { }, pools: {}, poolsToIgnore: [ - '0x600bd01b6526611079e12e1ff93aba7a3e34226f', // This pool has rateProviders with incorrect scaling - '0xc31a37105b94ab4efca1954a14f059af11fcd9bb', // Stable pool with Convergence issues + '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4', // This pool has rateProviders with incorrect scaling + '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // Stable pool with Convergence issues ], sorConnectingTokens: [ { @@ -140,26 +174,36 @@ export const BALANCER_NETWORK_CONFIG: Record = { multicall: '0x269ff446d9892c9e19082564df3f5e8741e190a1', poolDataQueries: '0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC', gaugeClaimHelper: '0xa0dabebaad1b243bbb243f933013d560819eb66f', - ...addressesByNetwork[Network.ARBITRUM].contracts, + gyroConfigProxy: '0x9b683ca24b0e013512e2566b68704dbe9677413c', + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerHelpers: '0x77d46184d22ca6a3726a2f500c776767b6a3d6ab', + balancerRelayer: '0x598ce0f1ab64b27256759ef99d883ee51138b9bd', + protocolFeePercentagesProvider: + '0x5ef4c5352882b10893b70dbcaa0c000965bd23c5', + weightedPoolFactory: '0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7', + composableStablePoolFactory: + '0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95', + aaveLinearPoolFactory: '0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b', + erc4626LinearPoolFactory: '0x7adbdabaa80f654568421887c12f09e0c7bd9629', + yearnLinearPoolFactory: '0x19dfef0a828eec0c85fbb335aa65437417390b85', }, tokens: { - bal: addressesByNetwork[Network.ARBITRUM].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.ARBITRUM].contracts.weth, + bal: '0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8', + wrappedNativeAsset: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', lbpRaisingTokens: [ '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH ], - ...addressesByNetwork[Network.ARBITRUM].tokens, }, }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2', + 'https://api.studio.thegraph.com/query/75376/balancer-arbitrum-v2/version/latest', gaugesSubgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum', + 'https://api.studio.thegraph.com/query/75376/balancer-gauges-arbitrum/version/latest', blockNumberSubgraph: - 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks', + 'https://api.studio.thegraph.com/query/48427/arbitrum-blocks/version/latest', }, thirdParty: { coingecko: { @@ -177,6 +221,8 @@ export const BALANCER_NETWORK_CONFIG: Record = { sorTriPathMidPoolIds: [ '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158', // wstEth/USDC.e to open up auraBAL/USDC '0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1', // arb/USDC.e to open up aura/USDC + '0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4', // wstEth/Stable4Pool + '0x125bc5a031b2db6733bfa35d914ffa428095978b000200000000000000000514', // Gyro Rehype aUSDC/aUSDT ], }, [Network.GOERLI]: { @@ -190,16 +236,25 @@ export const BALANCER_NETWORK_CONFIG: Record = { veBalProxy: '0xA1F107D1cD709514AE8A914eCB757E95f9cedB31', erc4626LinearPoolFactory: '0xba240c856498e2d7a70af4911aafae0d6b565a5b', aaveLinearPoolFactory: '0x76578ecf9a141296ec657847fb45b0585bcda3a6', - ...addressesByNetwork[Network.GOERLI].contracts, + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerHelpers: '0x5addcca35b7a0d07c74063c48700c8590e87864e', + balancerRelayer: '0x03f1ab8b19bce21eb06c364aec9e40322572a1e9', + gaugeController: '0xbb1ce49b16d55a1f2c6e88102f32144c7334b116', + feeDistributor: '0x42b67611b208e2e9b4cc975f6d74c87b865ae066', + protocolFeePercentagesProvider: + '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e', + weightedPoolFactory: '0x230a59f4d9adc147480f03b0d', + composableStablePoolFactory: + '0x1802953277fd955f9a254b80aa0582f193cf1d77', }, tokens: { - bal: addressesByNetwork[Network.GOERLI].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.GOERLI].contracts.weth, + bal: '', + wrappedNativeAsset: '', }, }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2', + 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2', // TODO: there's no new subgraph for Goerli - should we drop support and remove it entirely? gaugesSubgraph: 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli', blockNumberSubgraph: @@ -227,17 +282,26 @@ export const BALANCER_NETWORK_CONFIG: Record = { multicall: '0x2dc0e2aa608532da689e89e237df582b783e552c', poolDataQueries: '0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e', gyroConfigProxy: '0x32acb44fc929339b9f16f0449525cc590d2a23f3', - ...addressesByNetwork[Network.OPTIMISM].contracts, + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerHelpers: '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9', + balancerRelayer: '0x03f1ab8b19bce21eb06c364aec9e40322572a1e9', + protocolFeePercentagesProvider: + '0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c', + weightedPoolFactory: '0x230a59f4d9adc147480f03b0d3fffecd56c3289a', + composableStablePoolFactory: + '0x1802953277fd955f9a254b80aa0582f193cf1d77', + aaveLinearPoolFactory: '0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b', + erc4626LinearPoolFactory: '0x7adbdabaa80f654568421887c12f09e0c7bd9629', + yearnLinearPoolFactory: '0x19dfef0a828eec0c85fbb335aa65437417390b85', }, tokens: { bal: '0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921', - wrappedNativeAsset: addressesByNetwork[Network.OPTIMISM].contracts.weth, + wrappedNativeAsset: '0x4200000000000000000000000000000000000006', lbpRaisingTokens: [ '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // USDC '0x4200000000000000000000000000000000000006', // WETH ], - ...addressesByNetwork[Network.OPTIMISM].tokens, }, }, thirdParty: { @@ -248,11 +312,11 @@ export const BALANCER_NETWORK_CONFIG: Record = { }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism', + 'https://api.studio.thegraph.com/query/75376/balancer-optimism-v2/version/latest', gaugesSubgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism', + 'https://api.studio.thegraph.com/query/75376/balancer-gauges-optimism/version/latest', blockNumberSubgraph: - 'https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks', + 'https://api.studio.thegraph.com/query/48427/optimism-blocks/version/latest', }, pools: {}, sorConnectingTokens: [ @@ -269,19 +333,30 @@ export const BALANCER_NETWORK_CONFIG: Record = { contracts: { multicall: '0xbb6fab6b627947dae0a75808250d8b2652952cb5', poolDataQueries: '0x3f170631ed9821Ca51A59D996aB095162438DC10', - ...addressesByNetwork[Network.GNOSIS].contracts, + aaveLinearPoolFactory: '0x62aab12865d7281048c337d53a4dde9d770321e6', + balancerHelpers: '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9', + balancerRelayer: '0x3536fd480ca495ac91e698a703248a8915c137a3', + protocolFeePercentagesProvider: + '0x41b953164995c11c81da73d212ed8af25741b7ac', + weightedPoolFactory: '0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7', + composableStablePoolFactory: + '0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd', + yearnLinearPoolFactory: '0x19dfef0a828eec0c85fbb335aa65437417390b85', + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', }, tokens: { - wrappedNativeAsset: addressesByNetwork[Network.GNOSIS].contracts.weth, - bal: addressesByNetwork[Network.GNOSIS].contracts.bal, - ...addressesByNetwork[Network.GNOSIS].tokens, + wrappedNativeAsset: '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', + bal: '0x7eF541E2a22058048904fE5744f9c7E4C57AF717', + wstETH: '0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6', }, }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2', + 'https://api.studio.thegraph.com/query/75376/balancer-gnosis-chain-v2/version/latest', gaugesSubgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain', + 'https://api.studio.thegraph.com/query/75376/balancer-gauges-gnosis-chain/version/latest', + blockNumberSubgraph: + 'https://api.studio.thegraph.com/query/48427/gnosis-blocks/version/latest', }, thirdParty: { coingecko: { @@ -303,6 +378,7 @@ export const BALANCER_NETWORK_CONFIG: Record = { ], sorTriPathMidPoolIds: [ '0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059', // 3POOL_BPT/wstETH + '0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066', // sBAL3 ], }, [Network.FANTOM]: { @@ -333,10 +409,10 @@ export const BALANCER_NETWORK_CONFIG: Record = { }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom', + 'https://api.studio.thegraph.com/query/73674/beethovenx-v2-fantom/version/latest', gaugesSubgraph: '', // no guages on fantom blockNumberSubgraph: - 'https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks', + 'https://api.studio.thegraph.com/query/48427/fantom-blocks/version/latest', }, thirdParty: { coingecko: { @@ -359,12 +435,23 @@ export const BALANCER_NETWORK_CONFIG: Record = { contracts: { multicall: '0xcA11bde05977b3631167028862bE2a173976CA11', poolDataQueries: '0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102', - ...addressesByNetwork[Network.SEPOLIA].contracts, + aaveLinearPoolFactory: '0xdf9b5b00ef9bca66e9902bd813db14e4343be025', + balancerHelpers: '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca', + balancerMinter: '0x1783cd84b3d01854a96b4ed5843753c2ccbd574a', + balancerRelayer: '0x6d5342d716c13d9a3f072a2b11498624ade27f90', + gaugeController: '0x577e5993b9cc480f07f98b5ebd055604bd9071c4', + feeDistributor: '0xa6971317fb06c76ef731601c64433a4846fca707', + protocolFeePercentagesProvider: + '0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd', + weightedPoolFactory: '0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd', + composableStablePoolFactory: + '0xa3fd20e29358c056b727657e83dfd139abbc9924', + yearnLinearPoolFactory: '0xacf05be5134d64d150d153818f8c67ee36996650', + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', }, tokens: { - bal: addressesByNetwork[Network.SEPOLIA].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.SEPOLIA].contracts.weth, - ...addressesByNetwork[Network.SEPOLIA].tokens, + bal: '0xb19382073c7a0addbb56ac6af1808fa49e377b75', + wrappedNativeAsset: '0x7b79995e5f793a07bc00c21412e50ecae098e7f9', }, }, urls: { @@ -388,12 +475,19 @@ export const BALANCER_NETWORK_CONFIG: Record = { balancerMinter: '0x475D18169BE8a89357A9ee3Ab00ca386d20fA229', multicall: '0xcA11bde05977b3631167028862bE2a173976CA11', poolDataQueries: '0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39', - ...addressesByNetwork[Network.ZKEVM].contracts, + aaveLinearPoolFactory: '0x4b7b369989e613ff2c65768b7cf930cc927f901e', + protocolFeePercentagesProvider: + '0x1802953277fd955f9a254b80aa0582f193cf1d77', + weightedPoolFactory: '0x03f3fb107e74f2eac9358862e91ad3c692712054', + yearnLinearPoolFactory: '0x44d33798dddcdabc93fe6a40c80588033dc502d3', + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerHelpers: '', // TODO + balancerRelayer: '', // TODO }, tokens: { - bal: addressesByNetwork[Network.ZKEVM].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.ZKEVM].contracts.weth, - ...addressesByNetwork[Network.ZKEVM].tokens, + bal: '0x120ef59b80774f02211563834d8e3b72cb1649d6', + wrappedNativeAsset: '0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9', + wstETH: '0x5d8cff95d7a57c0bf50b30b43c7cc0d52825d4a9', }, }, urls: { @@ -409,6 +503,7 @@ export const BALANCER_NETWORK_CONFIG: Record = { }, }, averageBlockTime: 4, + multicallBatchSize: 128, pools: {}, poolsToIgnore: [], sorConnectingTokens: [ @@ -426,25 +521,35 @@ export const BALANCER_NETWORK_CONFIG: Record = { chainId: Network.AVALANCHE, //43114 addresses: { contracts: { + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', balancerMinter: '0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B', multicall: '0xcA11bde05977b3631167028862bE2a173976CA11', poolDataQueries: '0x67af5D428d38C5176a286a2371Df691cDD914Fb8', - ...addressesByNetwork[Network.AVALANCHE].contracts, + aaveLinearPoolFactory: '0x6caf662b573f577de01165d2d38d1910bba41f8a', + balancerHelpers: '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9', + balancerRelayer: '0x03f1ab8b19bce21eb06c364aec9e40322572a1e9', + protocolFeePercentagesProvider: + '0x239e55f427d44c3cc793f49bfb507ebe76638a2b', + weightedPoolFactory: '0x230a59f4d9adc147480f03b0d3fffecd56c3289a', + composableStablePoolFactory: + '0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98', + erc4626LinearPoolFactory: '0x4507d91cd2c0d51d9b4f30bf0b93afc938a70ba5', + eulerLinearPoolFactory: '', + gearboxLinearPoolFactory: '', + yearnLinearPoolFactory: '', }, tokens: { - bal: addressesByNetwork[Network.AVALANCHE].contracts.bal, - wrappedNativeAsset: - addressesByNetwork[Network.AVALANCHE].contracts.weth, - ...addressesByNetwork[Network.AVALANCHE].tokens, + bal: '0xe15bcb9e0ea69e6ab9fa080c4c4a5632896298c3', + wrappedNativeAsset: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', }, }, urls: { subgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2', + 'https://api.studio.thegraph.com/query/75376/balancer-avalanche-v2/version/latest', gaugesSubgraph: - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche', + 'https://api.studio.thegraph.com/query/75376/balancer-gauges-avalanche/version/latest', blockNumberSubgraph: - 'https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks', + 'https://api.studio.thegraph.com/query/48427/avalanche-blocks/version/latest', }, thirdParty: { coingecko: { @@ -472,12 +577,21 @@ export const BALANCER_NETWORK_CONFIG: Record = { balancerMinter: '0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7', multicall: '0xcA11bde05977b3631167028862bE2a173976CA11', poolDataQueries: '', - ...addressesByNetwork[Network.BASE].contracts, + balancerHelpers: '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9', + balancerRelayer: '0x76f7204b62f554b79d444588edac9dfa7032c71a', + protocolFeePercentagesProvider: + '0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d', + weightedPoolFactory: '0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4', + composableStablePoolFactory: + '0x8df317a729fcaa260306d7de28888932cb579b88', + aaveLinearPoolFactory: '0x687b8c9b41e01be8b591725fac5d5f52d0564d79', + erc4626LinearPoolFactory: '0x161f4014c27773840ccb4ec1957113e6dd028846', + yearnLinearPoolFactory: '0x44d33798dddcdabc93fe6a40c80588033dc502d3', + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', }, tokens: { - bal: addressesByNetwork[Network.BASE].contracts.bal, - wrappedNativeAsset: addressesByNetwork[Network.BASE].contracts.weth, - ...addressesByNetwork[Network.BASE].tokens, + bal: '0x4158734d47fc9692176b5085e0f52ee0da5d47f1', + wrappedNativeAsset: '0x4200000000000000000000000000000000000006', }, }, urls: { @@ -507,6 +621,94 @@ export const BALANCER_NETWORK_CONFIG: Record = { '0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d', // weth/staBal ], }, + [Network.FRAXTAL]: { + chainId: Network.FRAXTAL, // 252 + addresses: { + contracts: { + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerMinter: '0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102', + multicall: '0xca11bde05977b3631167028862be2a173976ca11', + poolDataQueries: '0x5dbad78818d4c8958eff2d5b95b28385a22113cd', + balancerHelpers: '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9', + balancerRelayer: '0xb541765f540447646a9545e0a4800a0bacf9e13d', + protocolFeePercentagesProvider: + '0xf23b4db826dba14c0e857029dff076b1c0264843', + weightedPoolFactory: '0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c', + composableStablePoolFactory: + '0x4bdcc2fb18aeb9e2d281b0278d946445070eada7', + aaveLinearPoolFactory: '', + erc4626LinearPoolFactory: '', + yearnLinearPoolFactory: '', + }, + tokens: { + bal: '0x2fc7447f6cf71f9aa9e7ff8814b37e55b268ec91', + wrappedNativeAsset: '0xfc00000000000000000000000000000000000006', + }, + }, + urls: { + subgraph: + 'https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/balancer-fraxtal-v2/1.0.0/gn', + gaugesSubgraph: + 'https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/balancer-gauges-fraxtal/1.0.0/gn', + blockNumberSubgraph: + 'https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/fraxtal-blocks/1.0.0/gn', + }, + thirdParty: { + coingecko: { + nativeAssetId: 'fraxtal', + platformId: 'fraxtal', + }, + }, + averageBlockTime: 2, + pools: {}, + poolsToIgnore: [], + sorConnectingTokens: [], + sorTriPathMidPoolIds: [], + }, + [Network.MODE]: { + chainId: Network.MODE, // 34443 + addresses: { + contracts: { + vault: '0xba12222222228d8ba445958a75a0704d566bf2c8', + balancerMinter: '0x5cf4928a3205728bd12830e1840f7db85c62a4b9', + multicall: '0xca11bde05977b3631167028862be2a173976ca11', + poolDataQueries: '0x7a2535f5fb47b8e44c02ef5d9990588313fe8f05', + balancerHelpers: '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9', + balancerRelayer: '0xb541765f540447646a9545e0a4800a0bacf9e13d', + protocolFeePercentagesProvider: + '0x85a80afee867adf27b50bdb7b76da70f1e853062', + weightedPoolFactory: '0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68', + composableStablePoolFactory: + '0x5dbad78818d4c8958eff2d5b95b28385a22113cd', + aaveLinearPoolFactory: '', + erc4626LinearPoolFactory: '', + yearnLinearPoolFactory: '', + }, + tokens: { + bal: '0xd08a2917653d4e460893203471f0000826fb4034', + wrappedNativeAsset: '0x4200000000000000000000000000000000000006', + }, + }, + urls: { + subgraph: + 'https://api.studio.thegraph.com/query/75376/balancer-mode-v2/version/latest', + gaugesSubgraph: + 'https://api.studio.thegraph.com/query/75376/balancer-gauges-mode/version/latest', + blockNumberSubgraph: + 'https://api.studio.thegraph.com/query/48427/bleu-mode-blocks/version/latest', + }, + thirdParty: { + coingecko: { + nativeAssetId: 'mode', + platformId: 'mode', + }, + }, + averageBlockTime: 2, + pools: {}, + poolsToIgnore: [], + sorConnectingTokens: [], + sorTriPathMidPoolIds: [], + }, }; export const networkAddresses = ( diff --git a/balancer-js/src/lib/constants/network.ts b/balancer-js/src/lib/constants/network.ts index b26c025e9..bd4ace2c8 100644 --- a/balancer-js/src/lib/constants/network.ts +++ b/balancer-js/src/lib/constants/network.ts @@ -11,4 +11,6 @@ export enum Network { ARBITRUM = 42161, AVALANCHE = 43114, SEPOLIA = 11155111, + FRAXTAL = 252, + MODE = 34443, } diff --git a/balancer-js/src/lib/constants/poolsToIgnore.ts b/balancer-js/src/lib/constants/poolsToIgnore.ts index 774f3b5cc..9e89f446a 100644 --- a/balancer-js/src/lib/constants/poolsToIgnore.ts +++ b/balancer-js/src/lib/constants/poolsToIgnore.ts @@ -1,4 +1,4 @@ -export const poolsToIgnore = [ +export const POOLS_TO_IGNORE = [ '0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477', '0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e', '0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e', diff --git a/balancer-js/src/lib/utils/coingecko-api.ts b/balancer-js/src/lib/utils/coingecko-api.ts new file mode 100644 index 000000000..b56c42ab8 --- /dev/null +++ b/balancer-js/src/lib/utils/coingecko-api.ts @@ -0,0 +1,13 @@ +export function getCoingeckoApiBaseUrl(isDemoApi = true): string { + if (isDemoApi) { + return 'https://api.coingecko.com/api/v3/'; + } + return 'https://pro-api.coingecko.com/api/v3/'; +} + +export function getCoingeckoApiKeyHeaderName(isDemoApi = true): string { + if (isDemoApi) { + return 'x-cg-demo-api-key'; + } + return 'x-cg-pro-api-key'; +} diff --git a/balancer-js/src/lib/utils/generate-address-books.ts b/balancer-js/src/lib/utils/generate-address-books.ts deleted file mode 100644 index c10b23f07..000000000 --- a/balancer-js/src/lib/utils/generate-address-books.ts +++ /dev/null @@ -1,179 +0,0 @@ -import axios from 'axios'; -import { Network } from '@/types'; -import _ from 'lodash'; -import * as fs from 'fs'; - -type AddressDictByNetwork = { - [key: string]: { - contracts: AddressDict; - tokens: AddressDict; - }; -}; - -type AddressDict = { - [key: string]: string; -}; - -const addressBookUrl = - 'https://raw.githubusercontent.com/BalancerMaxis/bal_addresses/main/outputs/addressbook.json'; - -const developAddressBookOutputUrl = - 'https://raw.githubusercontent.com/balancer/balancer-sdk/develop/balancer-js/src/lib/constants/address.json'; -const generateAddressesFile = async () => { - //Fetching the addresses - const addressBook = (await axios.get(addressBookUrl)).data; - //creating output empty object - let output: AddressDictByNetwork = {}; - //Getting the current addressBook from develop branch - let data; - try { - const response = await axios.get(developAddressBookOutputUrl); - data = response.data; - } catch (e) { - console.log( - 'Error fetching develop address book, will not provide log of changes' - ); - } - const developAddressBook = data; - - //Filtering the addressBook to get active addresses by network - Object.entries(Network) - .filter(([key]) => { - //removing number keys like '1', '42', '137', etc - return Number.isNaN(parseInt(key)); - }) - .map(([key, value]) => { - const networkActiveAddressBook = - addressBook['active'][key.toLowerCase()] ?? undefined; - if (!networkActiveAddressBook) { - return; - } - //Getting tokens from addressBook - const tokens = - typeof networkActiveAddressBook.tokens === 'object' - ? Object.entries( - networkActiveAddressBook.tokens as { [key: string]: string } - ) - .sort(sortEntriesAlphabetically) - //For the tokens it's not being applied the camelCase for the token names - .reduce(reduceWithLowerCaseAddress, {}) - : {}; - - const deploymentKeys = Object.keys(networkActiveAddressBook).filter( - (key) => { - //Getting keys from deployments by verifying if the first 8 digits are numbers - return key.match(/^[0-9]{8}/g); - } - ); - let contracts: { [key: string]: string } = {}; - deploymentKeys.map((dKey) => { - contracts = { - ...contracts, - ...(networkActiveAddressBook[dKey] as { [key: string]: string }), - }; - }); - output = { - ...output, - [value]: { - contracts: Object.entries(contracts) - .sort(sortEntriesAlphabetically) - .reduce(reduceWithCamelCaseKeyAndLowerCaseAddress, {}), - tokens, - }, - }; - if (developAddressBook) { - compareOutputWithDevelop(output[value], developAddressBook[value], key); - } - }); - //Writing the output to the file - fs.writeFile( - 'src/lib/constants/addresses.json', - JSON.stringify(output), - (err) => console.error(err) - ); - return 'Success! Address file generated on src/lib/constants/addresses.json'; -}; - -const reduceWithCamelCaseKeyAndLowerCaseAddress = ( - acc: Record | Record, - [key, value]: [string, string] -) => { - return { - ...acc, - [_.camelCase(key)]: value.toLocaleLowerCase(), - }; -}; - -const reduceWithLowerCaseAddress = ( - acc: Record | Record, - [key, value]: [string, string] -) => { - return { - ...acc, - [key]: value.toLocaleLowerCase(), - }; -}; -const sortEntriesAlphabetically = ( - [a]: [string, unknown], - [b]: [string, unknown] -) => { - return a.localeCompare(b); -}; - -const compareOutputWithDevelop = ( - output: { - contracts: AddressDict; - tokens: AddressDict; - }, - develop: { - contracts: AddressDict; - tokens: AddressDict; - }, - network: string -) => { - console.log('Comparing Contracts of network: ', network); - if (!develop?.contracts) { - console.log('New network: ' + network); - return; - } - const outputContractsKeys = Object.keys(output.contracts); - const developContractsKeys = Object.keys(develop.contracts); - outputContractsKeys.map((key) => { - if (developContractsKeys.includes(key)) { - if ( - output.contracts[key].toLowerCase() !== - develop.contracts[key].toLowerCase() - ) { - console.log( - `Contract ${key} has different addresses in develop and active` - ); - console.log('Develop: ', develop.contracts[key]); - console.log('Active: ', output.contracts[key]); - } - } else { - console.log(`Contract ${key} is new, not present in develop`); - console.log('Address: ', output.contracts[key]); - } - }); - //Do the same for output.tokens - const outputTokensKeys = Object.keys(output.tokens); - const developTokensKeys = Object.keys(develop.tokens); - outputTokensKeys.map((key) => { - if (developTokensKeys.includes(key)) { - if ( - output.tokens[key].toLowerCase() !== develop.tokens[key].toLowerCase() - ) { - console.log( - `Token ${key} has different addresses in develop and active` - ); - console.log('Develop: ', develop.tokens[key]); - console.log('Active: ', output.tokens[key]); - } - } else { - console.log(`Token ${key} is new, not present in develop`); - console.log('Address: ', output.tokens[key]); - } - }); -}; - -generateAddressesFile().then((r) => console.log(r)); diff --git a/balancer-js/src/modules/data/index.ts b/balancer-js/src/modules/data/index.ts index 246873ab4..a4f506e68 100644 --- a/balancer-js/src/modules/data/index.ts +++ b/balancer-js/src/modules/data/index.ts @@ -20,6 +20,7 @@ import { BalancerNetworkConfig, BalancerDataRepositories, GraphQLQuery, + CoingeckoConfig, } from '@/types'; import { PoolsSubgraphRepository } from './pool/subgraph'; import { SubgraphPoolDataService } from '../sor/pool-data/subgraphPoolDataService'; @@ -75,7 +76,8 @@ export class Data implements BalancerDataRepositories { networkConfig: BalancerNetworkConfig, provider: Provider, contracts: Contracts, - subgraphQuery?: GraphQLQuery + subgraphQuery?: GraphQLQuery, + coingecko?: CoingeckoConfig ) { this.pools = new PoolsSubgraphRepository({ url: networkConfig.urls.subgraph, @@ -99,7 +101,8 @@ export class Data implements BalancerDataRepositories { multicall: networkConfig.addresses.contracts.multicall, vault: networkConfig.addresses.contracts.vault, }, - networkConfig.poolsToIgnore + networkConfig.poolsToIgnore, + networkConfig.multicallBatchSize ); this.poolShares = new PoolSharesRepository( @@ -166,7 +169,8 @@ export class Data implements BalancerDataRepositories { const coingeckoRepository = new CoingeckoPriceRepository( tokenAddresses, - networkConfig.chainId + networkConfig.chainId, + coingecko ); const subgraphPriceRepository = new SubgraphPriceRepository( @@ -186,7 +190,7 @@ export class Data implements BalancerDataRepositories { ); const coingeckoHistoricalRepository = - new CoingeckoHistoricalPriceRepository(networkConfig.chainId); + new CoingeckoHistoricalPriceRepository(networkConfig.chainId, coingecko); this.tokenHistoricalPrices = new HistoricalPriceProvider( coingeckoHistoricalRepository, diff --git a/balancer-js/src/modules/data/liquidity-gauges/multicall.spec.ts b/balancer-js/src/modules/data/liquidity-gauges/multicall.spec.ts index 08738d6a6..d91ad8cb5 100644 --- a/balancer-js/src/modules/data/liquidity-gauges/multicall.spec.ts +++ b/balancer-js/src/modules/data/liquidity-gauges/multicall.spec.ts @@ -1,3 +1,4 @@ +// yarn test:only ./src/modules/data/liquidity-gauges/multicall.spec.ts import { expect } from 'chai'; import { JsonRpcProvider } from '@ethersproject/providers'; import { Zero } from '@ethersproject/constants'; @@ -65,7 +66,7 @@ describe('Liquidity gauge multicall', () => { const fetcher = new LiquidityGaugesMulticallRepository(multicall, 1); const gauges = new LiquidityGaugesSubgraphRepository( - 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges' + 'https://api.studio.thegraph.com/query/75376/balancer-gauges/version/latest' ); let gaugeAddresses: string[]; diff --git a/balancer-js/src/modules/data/liquidity-gauges/provider.ts b/balancer-js/src/modules/data/liquidity-gauges/provider.ts index 3ef53e75b..2c589506a 100644 --- a/balancer-js/src/modules/data/liquidity-gauges/provider.ts +++ b/balancer-js/src/modules/data/liquidity-gauges/provider.ts @@ -86,6 +86,11 @@ export class LiquidityGaugeSubgraphRPCProvider childGaugeAddresses ); console.timeEnd('Fetching multicall.inflationRates'); + console.time('Fetching multicall.getWorkingSupplies'); + this.workingSupplies = await this.multicall.getWorkingSupplies( + childGaugeAddresses + ); + console.timeEnd('Fetching multicall.getWorkingSupplies'); } } if (this.gaugeController) { diff --git a/balancer-js/src/modules/data/liquidity-gauges/subgraph.ts b/balancer-js/src/modules/data/liquidity-gauges/subgraph.ts index fe0faef02..e1bbd358e 100644 --- a/balancer-js/src/modules/data/liquidity-gauges/subgraph.ts +++ b/balancer-js/src/modules/data/liquidity-gauges/subgraph.ts @@ -23,6 +23,7 @@ export class LiquidityGaugesSubgraphRepository async fetch(): Promise { console.time('fetching liquidity gauges'); const queryResult = await this.client.Pools({ + first: 1000, where: { preferentialGauge_not: null, }, diff --git a/balancer-js/src/modules/data/pool/onchain-data.ts b/balancer-js/src/modules/data/pool/onchain-data.ts index cd168be7c..32405656e 100644 --- a/balancer-js/src/modules/data/pool/onchain-data.ts +++ b/balancer-js/src/modules/data/pool/onchain-data.ts @@ -3,6 +3,7 @@ import { SubgraphPoolBase } from '@/.'; import { Provider } from '@ethersproject/providers'; import { formatFixed } from '@ethersproject/bignumber'; import { SubgraphToken } from '@balancer-labs/sor'; +import { PoolToken, Pool } from '@/types'; const abi = [ 'function getSwapFeePercentage() view returns (uint256)', @@ -43,6 +44,11 @@ const getSwapFeeFn = (poolType: string) => { } }; +type GenericToken = SubgraphToken | PoolToken; +type GenericPool = Omit & { + tokens: GenericToken[]; +}; + interface OnchainData { poolTokens: [string[], string[]]; totalShares: string; @@ -122,6 +128,13 @@ const poolTypeCalls = (poolType: string, poolTypeVersion = 1) => { } else { return do_nothing; } + case 'Gyro2': + if (poolTypeVersion === 2) { + // Gyro2 V2 has tokenRates same as GyroE V2 + return gyroECalls; + } else { + return do_nothing; + } case 'AaveLinear': if (poolTypeVersion === 1) { return linearCalls; @@ -133,32 +146,36 @@ const poolTypeCalls = (poolType: string, poolTypeVersion = 1) => { } }; -const merge = (pool: SubgraphPoolBase, result: OnchainData) => ({ +const merge = (pool: T, result: OnchainData) => ({ ...pool, - tokens: pool.tokens.map((token) => { - const idx = result.poolTokens[0] - .map((t) => t.toLowerCase()) - .indexOf(token.address); - const wrappedToken = - pool.wrappedIndex && pool.tokensList[pool.wrappedIndex]; - return { - ...token, - balance: formatFixed(result.poolTokens[1][idx], token.decimals || 18), - weight: - (result.weights && formatFixed(result.weights[idx], 18)) || - token.weight, - priceRate: - (result.wrappedTokenRate && - wrappedToken && - wrappedToken.toLowerCase() === token.address.toLowerCase() && - formatFixed(result.wrappedTokenRate, 18)) || - token.priceRate, - } as SubgraphToken; - }), + tokens: result.poolTokens + ? pool.tokens.map((token) => { + const idx = result.poolTokens[0] + .map((t) => t.toLowerCase()) + .indexOf(token.address); + const wrappedToken = + pool.wrappedIndex && pool.tokensList[pool.wrappedIndex]; + const tokenDecimals = + token.decimals === undefined ? 18 : token.decimals; + return { + ...token, + balance: formatFixed(result.poolTokens[1][idx], tokenDecimals), + weight: + (result.weights && formatFixed(result.weights[idx], 18)) || + token.weight, + priceRate: + (result.wrappedTokenRate && + wrappedToken && + wrappedToken.toLowerCase() === token.address.toLowerCase() && + formatFixed(result.wrappedTokenRate, 18)) || + token.priceRate, + } as SubgraphToken; + }) + : pool.tokens, totalShares: result.totalShares ? formatFixed(result.totalShares, 18) : pool.totalShares, - swapFee: formatFixed(result.swapFee, 18), + swapFee: result.swapFee ? formatFixed(result.swapFee, 18) : pool.swapFee, amp: (result.amp && result.amp[0] && @@ -186,7 +203,8 @@ export const fetchOnChainPoolData = async ( poolTypeVersion?: number; }[], vaultAddress: string, - provider: Provider + provider: Provider, + batchSize = 1024 ): Promise<{ [id: string]: OnchainData }> => { if (pools.length === 0) { return {}; @@ -199,28 +217,29 @@ export const fetchOnChainPoolData = async ( poolTypeCalls(poolType, poolTypeVersion)(id, address, multicaller); }); - // ZkEVM needs a smaller batch size - const results = (await multicaller.execute({}, 128)) as { + const results = (await multicaller.execute({}, batchSize)) as { [id: string]: OnchainData; }; return results; }; -export async function getOnChainBalances( - subgraphPoolsOriginal: SubgraphPoolBase[], +export async function getOnChainBalances( + subgraphPoolsOriginal: T[], _multiAddress: string, vaultAddress: string, - provider: Provider -): Promise { + provider: Provider, + batchSize = 1024 +): Promise { if (subgraphPoolsOriginal.length === 0) return subgraphPoolsOriginal; - const poolsWithOnchainData: SubgraphPoolBase[] = []; + const poolsWithOnchainData: T[] = []; const onchainData = (await fetchOnChainPoolData( subgraphPoolsOriginal, vaultAddress, - provider + provider, + batchSize )) as { [id: string]: OnchainData }; subgraphPoolsOriginal.forEach((pool) => { diff --git a/balancer-js/src/modules/data/pool/subgraph.ts b/balancer-js/src/modules/data/pool/subgraph.ts index f0492ea8a..6644501c9 100644 --- a/balancer-js/src/modules/data/pool/subgraph.ts +++ b/balancer-js/src/modules/data/pool/subgraph.ts @@ -38,6 +38,7 @@ export class PoolsSubgraphRepository public skip = 0; private blockHeight: undefined | (() => Promise); private query: GraphQLQuery; + private isCustomQuery: boolean; /** * Repository with optional lazy loaded blockHeight @@ -60,7 +61,7 @@ export class PoolsSubgraphRepository }, }, }; - + this.isCustomQuery = !!options.query; const args = Object.assign({}, options.query?.args || defaultArgs); const attrs = Object.assign({}, options.query?.attrs || {}); @@ -121,8 +122,43 @@ export class PoolsSubgraphRepository return pools.map((pool) => mapType(pool, this.chainId)); } - async find(id: string): Promise { - return await this.findBy('id', id); + /** + * Find pool data for id + * @param id + * @param refresh If true will refetch from SG and update cache + * @returns + */ + async find(id: string, refresh = false): Promise { + if (this.isCustomQuery) return await this.findBy('id', id); + // If we're not refreshing and the pool exists in caches then return + if (!refresh && this.pools) { + const cachedPool = (await this.pools).find((pool) => pool.id === id); + if (cachedPool) return cachedPool; + } + + // Fetch pool data from SG, update cache and return + const logger = Logger.getInstance(); + + // SG fetch + logger.time(`fetching pool ${id}`); + const poolQuery = await this.client.Pool({ id }); + logger.timeEnd(`fetching pool ${id}`); + + if (!poolQuery.pool) return undefined; + + const pool = mapType(poolQuery.pool, this.chainId); + // If the pool is already cached, replace it with the new one + logger.time(`updating cache`); + const pools = await this.pools; + if (pools) { + const index = pools.findIndex((p) => p.address === pool.address); + if (index !== -1) { + this.pools = Promise.resolve([...pools.splice(index, 1), pool]); + } else this.pools = Promise.resolve([...pools, pool]); + } else this.pools = Promise.resolve([pool]); + logger.timeEnd(`updating cache`); + + return pool; } async findBy(param: PoolAttribute, value: string): Promise { diff --git a/balancer-js/src/modules/data/pool/subgraphOnChain.ts b/balancer-js/src/modules/data/pool/subgraphOnChain.ts index b74c752dc..5f54e9ecd 100644 --- a/balancer-js/src/modules/data/pool/subgraphOnChain.ts +++ b/balancer-js/src/modules/data/pool/subgraphOnChain.ts @@ -2,9 +2,8 @@ import { Cacheable, Findable, Searchable } from '../types'; import { Provider } from '@ethersproject/providers'; import { PoolAttribute, PoolsRepositoryFetchOptions } from './types'; import { Pool } from '@/types'; -import { getOnChainBalances } from '../../../modules/sor/pool-data/onChainData'; +import { getOnChainBalances } from '../../../modules/sor/pool-data/onChainData3'; import { PoolsSubgraphRepository } from './subgraph'; -import { isSameAddress } from '@/lib/utils'; import { Logger } from '@/lib/utils/logger'; interface PoolsSubgraphOnChainRepositoryOptions { @@ -34,7 +33,8 @@ export class PoolsSubgraphOnChainRepository constructor( private poolsSubgraph: PoolsSubgraphRepository, options: PoolsSubgraphOnChainRepositoryOptions, - private readonly poolsToIgnore: string[] | undefined + private readonly poolsToIgnore: string[] | undefined, + private batchSize?: number ) { this.provider = options.provider; this.multicall = options.multicall; @@ -45,8 +45,8 @@ export class PoolsSubgraphOnChainRepository const filteredPools = pools.filter((p) => { if (p.swapEnabled === false) return false; if (!this.poolsToIgnore) return true; - const index = this.poolsToIgnore.findIndex((addr) => - isSameAddress(addr, p.address) + const index = this.poolsToIgnore.findIndex( + (id) => id.toLowerCase() === p.id.toLowerCase() ); return index === -1; }); @@ -70,7 +70,8 @@ export class PoolsSubgraphOnChainRepository filteredPools, this.multicall, this.vault, - this.provider + this.provider, + this.batchSize ); logger.timeEnd(`fetching onchain ${filteredPools.length} pools`); @@ -89,7 +90,8 @@ export class PoolsSubgraphOnChainRepository filteredPools, this.multicall, this.vault, - this.provider + this.provider, + this.batchSize ); logger.timeEnd(`fetching onchain ${filteredPools.length} pools`); diff --git a/balancer-js/src/modules/data/token-prices/coingecko-historical.ts b/balancer-js/src/modules/data/token-prices/coingecko-historical.ts index 5b4a25cd4..5ef94b1bf 100644 --- a/balancer-js/src/modules/data/token-prices/coingecko-historical.ts +++ b/balancer-js/src/modules/data/token-prices/coingecko-historical.ts @@ -5,9 +5,14 @@ import { TokenPrices, Network, HistoricalPrices, + CoingeckoConfig, } from '@/types'; -import axios from 'axios'; +import axios, { AxiosError } from 'axios'; import { tokenAddressForPricing } from '@/lib/utils'; +import { + getCoingeckoApiBaseUrl, + getCoingeckoApiKeyHeaderName, +} from '@/lib/utils/coingecko-api'; const HOUR = 60 * 60; @@ -17,42 +22,48 @@ const HOUR = 60 * 60; export class CoingeckoHistoricalPriceRepository implements Findable { prices: TokenPrices = {}; nativePrice?: Promise; - urlBase: string; - - constructor(private chainId: Network = 1) { - this.urlBase = `https://api.coingecko.com/api/v3/coins/${this.platform( + private readonly urlBase: string; + private readonly apiKey?: string; + private readonly coingeckoApiKeyHeaderName: string; + constructor(private chainId: Network = 1, coingecko?: CoingeckoConfig) { + this.urlBase = `${getCoingeckoApiBaseUrl( + coingecko?.isDemoApiKey + )}coins/${this.platform( chainId )}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`; + this.apiKey = coingecko?.coingeckoApiKey; + this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName( + coingecko?.isDemoApiKey + ); } - private fetch( + private async fetch( address: string, timestamp: number, { signal }: { signal?: AbortSignal } = {} ): Promise { - console.time(`fetching coingecko historical for ${address}`); const url = this.urlRange(address, timestamp); - return axios - .get(url, { signal }) - .then(({ data }) => { - return data; - }) - .catch((error) => { - const message = [ - 'Error fetching historical token prices from coingecko', - ]; - if (error.isAxiosError) { - if (error.response?.status) { - message.push(`with status ${error.response.status}`); - } - } else { - message.push(error); - } - return Promise.reject(message.join(' ')); - }) - .finally(() => { - console.timeEnd(`fetching coingecko historical for ${address}`); + console.time(`fetching coingecko historical for ${address}`); + try { + const { data } = await axios.get(url, { + signal, + headers: { [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '' }, }); + console.timeEnd(`fetching coingecko historical for ${address}`); + console.log(data); + return data; + } catch (error) { + console.timeEnd(`fetching coingecko historical for ${address}`); + if ((error as AxiosError).isAxiosError) { + throw new Error( + 'Error fetching historical token prices from coingecko - ' + + (error as AxiosError).message + + ' - ' + + (error as AxiosError).response?.statusText + ); + } + throw new Error('Unknown Error: ' + error); + } } /* eslint-disable @typescript-eslint/no-unused-vars */ diff --git a/balancer-js/src/modules/data/token-prices/coingecko.ts b/balancer-js/src/modules/data/token-prices/coingecko.ts index e3bf971e7..ec3c6a0d9 100644 --- a/balancer-js/src/modules/data/token-prices/coingecko.ts +++ b/balancer-js/src/modules/data/token-prices/coingecko.ts @@ -1,8 +1,18 @@ /* eslint-disable @typescript-eslint/no-empty-function */ -import { Price, Findable, TokenPrices, Network } from '@/types'; -import axios from 'axios'; +import { + CoingeckoConfig, + Findable, + Network, + Price, + TokenPrices, +} from '@/types'; +import axios, { AxiosError } from 'axios'; import { TOKENS } from '@/lib/constants/tokens'; import { Debouncer, tokenAddressForPricing } from '@/lib/utils'; +import { + getCoingeckoApiBaseUrl, + getCoingeckoApiKeyHeaderName, +} from '@/lib/utils/coingecko-api'; /** * Simple coingecko price source implementation. Configurable by network and token addresses. @@ -10,45 +20,62 @@ import { Debouncer, tokenAddressForPricing } from '@/lib/utils'; export class CoingeckoPriceRepository implements Findable { prices: { [key: string]: Promise } = {}; nativePrice?: Promise; - urlBase: string; + private readonly url: string; + private readonly urlNative: string; + private readonly coingeckoApiKeyHeaderName: string; baseTokenAddresses: string[]; debouncer: Debouncer; + apiKey?: string; - constructor(tokenAddresses: string[], private chainId: Network = 1) { + constructor( + tokenAddresses: string[], + private chainId: Network = 1, + coingecko?: CoingeckoConfig + ) { this.baseTokenAddresses = tokenAddresses.map(tokenAddressForPricing); - this.urlBase = `https://api.coingecko.com/api/v3/simple/token_price/${this.platform( - chainId - )}?vs_currencies=usd,eth`; + this.url = `${getCoingeckoApiBaseUrl( + coingecko?.isDemoApiKey + )}simple/token_price/${this.platform(chainId)}?vs_currencies=usd,eth`; + this.urlNative = `${getCoingeckoApiBaseUrl( + coingecko?.isDemoApiKey + )}simple/price/?vs_currencies=eth,usd&ids=`; + this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName( + coingecko?.isDemoApiKey + ); + this.apiKey = coingecko?.coingeckoApiKey; this.debouncer = new Debouncer( this.fetch.bind(this), - 200 + 200, + coingecko?.tokensPerPriceRequest ?? 10 ); } - private fetch( + private async fetch( addresses: string[], { signal }: { signal?: AbortSignal } = {} ): Promise { - console.time(`fetching coingecko for ${addresses.length} tokens`); - return axios - .get(this.url(addresses), { signal }) - .then(({ data }) => { - return data; - }) - .catch((error) => { - const message = ['Error fetching token prices from coingecko']; - if (error.isAxiosError) { - if (error.response?.status) { - message.push(`with status ${error.response.status}`); - } - } else { - message.push(error); + try { + const { data } = await axios.get( + `${this.url}&contract_addresses=${addresses.join(',')}`, + { + signal, + headers: { + [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '', + }, } - return Promise.reject(message.join(' ')); - }) - .finally(() => { - console.timeEnd(`fetching coingecko for ${addresses.length} tokens`); - }); + ); + return data; + } catch (error) { + const message = ['Error fetching token prices from coingecko']; + if ((error as AxiosError).isAxiosError) { + if ((error as AxiosError).response?.status !== undefined) { + message.push(`with status ${(error as AxiosError).response?.status}`); + } + } else { + message.push(error as string); + } + return Promise.reject(message.join(' ')); + } } private fetchNative({ @@ -64,10 +91,12 @@ export class CoingeckoPriceRepository implements Findable { if (this.chainId === 137) assetId = Assets.MATIC; if (this.chainId === 100) assetId = Assets.XDAI; return axios - .get<{ [key in Assets]: Price }>( - `https://api.coingecko.com/api/v3/simple/price/?vs_currencies=eth,usd&ids=${assetId}`, - { signal } - ) + .get<{ [key in Assets]: Price }>(`${this.urlNative}${assetId}`, { + signal, + headers: { + [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '', + }, + }) .then(({ data }) => { return data[assetId]; }) @@ -141,6 +170,8 @@ export class CoingeckoPriceRepository implements Findable { return 'fantom'; case 1101: return 'polygon-zkevm'; + case 8453: + return 'base'; case 42161: return 'arbitrum-one'; case 43114: @@ -149,8 +180,4 @@ export class CoingeckoPriceRepository implements Findable { return '2'; } - - private url(addresses: string[]): string { - return `${this.urlBase}&contract_addresses=${addresses.join(',')}`; - } } diff --git a/balancer-js/src/modules/data/types.ts b/balancer-js/src/modules/data/types.ts index 96ae3cb8f..3ed1040ae 100644 --- a/balancer-js/src/modules/data/types.ts +++ b/balancer-js/src/modules/data/types.ts @@ -10,7 +10,7 @@ export * from './pool-shares/types'; export * from './gauge-shares/types'; export interface Findable { - find: (id: string) => Promise; + find: (id: string, refresh?: boolean) => Promise; findBy: (attribute: P, value: V) => Promise; } diff --git a/balancer-js/src/modules/exits/exits.module.integration.spec.ts b/balancer-js/src/modules/exits/exits.module.integration.spec.ts index bd35a25c9..0cbf58891 100644 --- a/balancer-js/src/modules/exits/exits.module.integration.spec.ts +++ b/balancer-js/src/modules/exits/exits.module.integration.spec.ts @@ -25,7 +25,7 @@ const poolAddresses = Object.values(ADDRESSES[network]).map( ); const addresses = ADDRESSES[network]; -describe('generalised exit execution', async function () { +describe.skip('generalised exit execution', async function () { this.timeout(120000); // Sets timeout for all tests within this scope to 2 minutes /* diff --git a/balancer-js/src/modules/liquidity-managment/migrations.integrations.spec.ts b/balancer-js/src/modules/liquidity-managment/migrations.integrations.spec.ts index 34da4e549..48d41dace 100644 --- a/balancer-js/src/modules/liquidity-managment/migrations.integrations.spec.ts +++ b/balancer-js/src/modules/liquidity-managment/migrations.integrations.spec.ts @@ -30,8 +30,8 @@ const migrations = (network: 1 | 137) => { }; const remoteRpcUrls = { - [Network.MAINNET]: 'https://rpc.ankr.com/eth', - [Network.POLYGON]: 'https://rpc.ankr.com/polygon', + [Network.MAINNET]: process.env.ALCHEMY_URL, + [Network.POLYGON]: process.env.ALCHEMY_URL_POLYGON, }; const blockNumbers = { @@ -301,29 +301,29 @@ describe('Migrations', function () { }); }); }); + }); - context('polygon', () => { - const { approveRelayer, impersonate, runPool2Pool } = migrations( - Network.POLYGON - ); + context('polygon', () => { + const { approveRelayer, impersonate, runPool2Pool } = migrations( + Network.POLYGON + ); - beforeEach(() => approveRelayer()); + beforeEach(() => approveRelayer()); - context('ComposableStable to ComposableStable', () => { - before(() => impersonate('0xe80a6a7b4fdadf0aa59f3f669a8d394d1d4da86b')); + context('ComposableStable to ComposableStable', () => { + before(() => impersonate('0xe80a6a7b4fdadf0aa59f3f669a8d394d1d4da86b')); - it('should build a migration using exit / join', async () => { - const { balanceAfter, minBptOut } = await runPool2Pool( - polygonComposableStable, - polygonComposableStable - ); + it('should build a migration using exit / join', async () => { + const { balanceAfter, minBptOut } = await runPool2Pool( + polygonComposableStable, + polygonComposableStable + ); - // NOTICE: We don't know the exact amount of BPT that will be minted, - // because swaps from the linear pool are not deterministic due to external rates - expect(BigInt(balanceAfter)).to.satisfy( - (v: bigint) => v > BigInt(minBptOut) - ); - }); + // NOTICE: We don't know the exact amount of BPT that will be minted, + // because swaps from the linear pool are not deterministic due to external rates + expect(BigInt(balanceAfter)).to.satisfy( + (v: bigint) => v > BigInt(minBptOut) + ); }); }); }); diff --git a/balancer-js/src/modules/pools/apr/apr.integration.spec.ts b/balancer-js/src/modules/pools/apr/apr.integration.spec.ts index b48099287..f88d4759d 100644 --- a/balancer-js/src/modules/pools/apr/apr.integration.spec.ts +++ b/balancer-js/src/modules/pools/apr/apr.integration.spec.ts @@ -23,7 +23,8 @@ const usdStable = const auraBALveBAL = '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249'; -describe('APR tests', () => { +// APRs are offered via API now +describe.skip('APR tests', () => { describe('pool with yield tokens', () => { it('has tokenAprs', async () => { const pool = await pools.find(ethStEth); diff --git a/balancer-js/src/modules/pools/apr/apr.ts b/balancer-js/src/modules/pools/apr/apr.ts index 679dac80d..f639625f9 100644 --- a/balancer-js/src/modules/pools/apr/apr.ts +++ b/balancer-js/src/modules/pools/apr/apr.ts @@ -20,7 +20,7 @@ import { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config'; import { BigNumber } from '@ethersproject/bignumber'; import { Logger } from '@/lib/utils/logger'; import { GyroConfigRepository } from '@/modules/data/gyro-config/repository'; -import { poolsToIgnore } from '@/lib/constants/poolsToIgnore'; +import { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore'; export interface AprBreakdown { swapFees: number; @@ -276,14 +276,15 @@ export class PoolApr { throw 'Missing BAL price'; } + const gaugeSupply = (gauge.workingSupply + 0.4) / 0.4; // Only 40% of LP token staked accrue emissions, totalSupply = workingSupply * 2.5 + const gaugeSupplyUsd = gaugeSupply * bptPriceUsd; + // Handle child chain gauges with inflation_rate // balInflationRate - amount of BAL tokens per second as a float if (gauge.balInflationRate) { const reward = gauge.balInflationRate * 86400 * 365 * parseFloat(balPrice.usd); - const totalSupplyUsd = gauge.totalSupply * bptPriceUsd; - const rewardValue = reward / totalSupplyUsd; - return Math.round(boost * 10000 * rewardValue); + return Math.round((boost * 10000 * reward) / gaugeSupplyUsd); } else if (pool.chainId > 1) { // TODO: remove after all gauges are migrated (around 01-07-2023), Subgraph is returning BAL staking rewards as reward tokens for L2 gauges. if (!gauge.rewardTokens) { @@ -292,10 +293,15 @@ export class PoolApr { const balReward = bal && gauge.rewardTokens[bal]; if (balReward) { - const reward = await this.rewardTokenApr(bal, balReward); - const totalSupplyUsd = gauge.totalSupply * bptPriceUsd; - const rewardValue = reward.value / totalSupplyUsd; - return Math.round(10000 * rewardValue); + let reward: { address: string; value: number }; + try { + reward = await this.rewardTokenApr(bal, balReward); + const totalSupplyUsd = gauge.totalSupply * bptPriceUsd; + const rewardValue = reward.value / totalSupplyUsd; + return Math.round(10000 * rewardValue); + } catch (e) { + return 0; + } } else { return 0; } @@ -307,8 +313,6 @@ export class PoolApr { const totalBalEmissions = (emissions.weekly(now) / 7) * 365; const gaugeBalEmissions = totalBalEmissions * gauge.relativeWeight; const gaugeBalEmissionsUsd = gaugeBalEmissions * balPriceUsd; - const gaugeSupply = (gauge.workingSupply + 0.4) / 0.4; // Only 40% of LP token staked accrue emissions, totalSupply = workingSupply * 2.5 - const gaugeSupplyUsd = gaugeSupply * bptPriceUsd; const gaugeBalAprBps = Math.round( (boost * 10000 * gaugeBalEmissionsUsd) / gaugeSupplyUsd ); @@ -348,7 +352,12 @@ export class PoolApr { const rewards = rewardTokenAddresses.map(async (tAddress) => { /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ const data = gauge!.rewardTokens![tAddress]; - return this.rewardTokenApr(tAddress, data); + try { + const reward = await this.rewardTokenApr(tAddress, data); + return reward; + } catch (e) { + return { address: tAddress, value: 0 }; + } }); // Get the gauge totalSupplyUsd @@ -413,7 +422,7 @@ export class PoolApr { * @returns pool APR split [bsp] */ async apr(pool: Pool): Promise { - if (poolsToIgnore.includes(pool.id)) { + if (POOLS_TO_IGNORE.includes(pool.id)) { return { swapFees: 0, tokenAprs: { @@ -505,18 +514,13 @@ export class PoolApr { } private async protocolSwapFeePercentage(pool: Pool) { - let fee; - if ( - pool.poolType == 'ComposableStable' || - (pool.poolType == 'Weighted' && pool.poolTypeVersion == 2) - ) { - fee = 0; - } else if (pool.poolType.includes('Gyro') && this.gyroConfigRepository) { + let fee = 0.5; + if (pool.poolType.includes('Gyro') && this.gyroConfigRepository) { fee = await this.gyroConfigRepository.getGyroProtocolFee(pool.address); } else if (pool.protocolSwapFeeCache) { fee = parseFloat(pool.protocolSwapFeeCache); } else { - fee = (await this.feeCollector.find('')) || 0; + fee = (await this.feeCollector.find('')) || 0.5; } return fee; } diff --git a/balancer-js/src/modules/pools/impermanentLoss/impermanentLoss.integration.spec.ts b/balancer-js/src/modules/pools/impermanentLoss/impermanentLoss.integration.spec.ts index d7c35bbca..3f8d6feb9 100644 --- a/balancer-js/src/modules/pools/impermanentLoss/impermanentLoss.integration.spec.ts +++ b/balancer-js/src/modules/pools/impermanentLoss/impermanentLoss.integration.spec.ts @@ -42,7 +42,7 @@ const service = new ImpermanentLossService( describe('ImpermanentLossService', function () { this.timeout(60000); context('when queried for Composable Stable Pool', () => { - it('should return an IL gte 0', async () => { + it.skip('should return an IL gte 0', async () => { const testData = TEST_DATA.ComposableStablePool; const pool = await getPoolFromFile(testData.poolId, network); const timestamp = 1666601608; @@ -51,7 +51,7 @@ describe('ImpermanentLossService', function () { }); }); context('when queried for Weighted Pool', () => { - it('should return an IL gte 0', async () => { + it.skip('should return an IL gte 0', async () => { const testData = TEST_DATA.WeightedPool; const pool = await getPoolFromFile(testData.poolId, network); const timestamp = 1666601608; diff --git a/balancer-js/src/modules/pools/index.ts b/balancer-js/src/modules/pools/index.ts index d81a6b598..c6606b4bd 100644 --- a/balancer-js/src/modules/pools/index.ts +++ b/balancer-js/src/modules/pools/index.ts @@ -285,6 +285,18 @@ export class Pools implements Findable { return this.repositories.pools; } + /** + * Fetches new data from subgraph for pool + * (Will update PoolsSubgraphRepository cache) + * @param pool + * @returns + */ + async refresh(poolId: string): Promise { + const poolRefreshed = await this.repositories.pools.find(poolId, true); + if (!poolRefreshed) return poolRefreshed; + return Pools.wrap(poolRefreshed, this.networkConfig); + } + /** * Calculates APR on any pool data * diff --git a/balancer-js/src/modules/pools/pool-types/concerns/composableStable/recovery.integration.spec.ts b/balancer-js/src/modules/pools/pool-types/concerns/composableStable/recovery.integration.spec.ts index 6f41625a7..c5df8408e 100644 --- a/balancer-js/src/modules/pools/pool-types/concerns/composableStable/recovery.integration.spec.ts +++ b/balancer-js/src/modules/pools/pool-types/concerns/composableStable/recovery.integration.spec.ts @@ -1,370 +1,76 @@ // yarn test:only ./src/modules/pools/pool-types/concerns/composableStable/recovery.integration.spec.ts -import dotenv from 'dotenv'; import { ethers } from 'hardhat'; import { parseFixed } from '@ethersproject/bignumber'; -import { - BalancerSDK, - getPoolAddress, - Network, - GraphQLArgs, - GraphQLQuery, -} from '@/.'; +import { BalancerSDK, PoolWithMethods, getPoolAddress } from '@/.'; import { forkSetup } from '@/test/lib/utils'; import { assertRecoveryExit } from '@/test/lib/exitHelper'; -dotenv.config(); - -const network = Network.POLYGON; -const { ALCHEMY_URL_POLYGON: jsonRpcUrl } = process.env; +const network = 137; // POLYGON; +const jsonRpcUrl = 'https://rpc.ankr.com/polygon'; const rpcUrl = 'http://127.0.0.1:8137'; const provider = new ethers.providers.JsonRpcProvider(rpcUrl, network); const signer = provider.getSigner(); -const blockNumber = 47427007; + let balancer: BalancerSDK; -describe('ComposableStable - recovery', () => { - context('V1', async () => { - const poolId = - '0x02d2e2d7a89d6c5cb3681cfcb6f7dac02a55eda400000000000000000000088f'; - // We have to reset the fork between each test as pool value changes after tx is submitted - beforeEach(async () => { - // Setup forked network, set initial token balances and allowances - await forkSetup( - signer, - [getPoolAddress(poolId)], - [0], - [parseFixed('10000', 18).toString()], - jsonRpcUrl as string, - blockNumber - ); - const subgraphArgs: GraphQLArgs = { - where: { - id: { - in: [poolId], - }, - }, - block: { number: blockNumber }, - }; +const poolIds = [ + '0x02d2e2d7a89d6c5cb3681cfcb6f7dac02a55eda400000000000000000000088f', // V1 + '0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa', // V2 + '0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11', // V3 + '0xa2ccad543fbe9332b87910beabd941b86dd5f762000000000000000000000b5c', // V4 +]; - const subgraphQuery: GraphQLQuery = { args: subgraphArgs, attrs: {} }; - balancer = new BalancerSDK({ - network, - rpcUrl, - subgraphQuery, - }); - }); +describe.skip('ComposableStable - recovery', () => { + before(async () => { + await forkSetup( + signer, + poolIds.map((id) => getPoolAddress(id)), + Array(poolIds.length).fill(0), + Array(poolIds.length).fill(parseFixed('10000', 18).toString()), + jsonRpcUrl as string + ); - context('buildRecoveryExit', async () => { - context('PoolWithMethods', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('1.34', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - const pool = await balancer.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - const { to, data, minAmountsOut, expectedAmountsOut, priceImpact } = - pool.buildRecoveryExit(signerAddr, bptAmount, slippage); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); - context('Pool & refresh', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('1.34', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - let pool = await balancer.data.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - pool = await balancer.data.poolsOnChain.refresh(pool); - const { to, data, expectedAmountsOut, minAmountsOut, priceImpact } = - balancer.pools.buildRecoveryExit({ - pool, - bptAmount, - userAddress: signerAddr, - slippage, - }); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); - }); - }); - context('V2', async () => { - const poolId = - '0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa'; - // We have to reset the fork between each test as pool value changes after tx is submitted - beforeEach(async () => { - // Setup forked network, set initial token balances and allowances - await forkSetup( - signer, - [getPoolAddress(poolId)], - [0], - [parseFixed('10000', 18).toString()], - jsonRpcUrl as string, - blockNumber - ); - const subgraphArgs: GraphQLArgs = { - where: { - id: { - in: [poolId], - }, + const subgraphArgs = { + where: { + id: { + in: poolIds, }, - block: { number: blockNumber }, - }; + }, + }; - const subgraphQuery: GraphQLQuery = { args: subgraphArgs, attrs: {} }; - balancer = new BalancerSDK({ - network, - rpcUrl, - subgraphQuery, - }); - }); + const subgraphQuery = { args: subgraphArgs, attrs: {} }; - context('buildRecoveryExit', async () => { - context('PoolWithMethods', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('1.34', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - const pool = await balancer.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - const { to, data, minAmountsOut, expectedAmountsOut, priceImpact } = - pool.buildRecoveryExit(signerAddr, bptAmount, slippage); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); - context('Pool & refresh', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('1.34', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - let pool = await balancer.data.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - pool = await balancer.data.poolsOnChain.refresh(pool); - const { to, data, expectedAmountsOut, minAmountsOut, priceImpact } = - balancer.pools.buildRecoveryExit({ - pool, - bptAmount, - userAddress: signerAddr, - slippage, - }); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); + balancer = new BalancerSDK({ + network, + rpcUrl, + subgraphQuery, }); }); - context('V3', async () => { - const poolId = - '0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11'; - // We have to reset the fork between each test as pool value changes after tx is submitted - beforeEach(async () => { - // Setup forked network, set initial token balances and allowances - await forkSetup( - signer, - [getPoolAddress(poolId)], - [0], - [parseFixed('10000', 18).toString()], - jsonRpcUrl as string, - blockNumber - ); - const subgraphArgs: GraphQLArgs = { - where: { - id: { - in: [poolId], - }, - }, - block: { number: blockNumber }, - }; - const subgraphQuery: GraphQLQuery = { args: subgraphArgs, attrs: {} }; - balancer = new BalancerSDK({ - network, - rpcUrl, - subgraphQuery, - }); - }); + context('Recovery exit', async () => { + for (const [i, poolId] of poolIds.entries()) { + it(`works for V${i + 1}`, async () => { + const pool = (await balancer.pools.find(poolId)) as PoolWithMethods; + const bptAmount = parseFixed('0.00001', 18).toString(); + const slippage = '10'; // 10 bps = 0.1% + const signerAddr = await signer.getAddress(); - context('buildRecoveryExit', async () => { - context('PoolWithMethods', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('0.001', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - const pool = await balancer.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - const { to, data, minAmountsOut, expectedAmountsOut, priceImpact } = - pool.buildRecoveryExit(signerAddr, bptAmount, slippage); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); - context('Pool & refresh', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('0.00001', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - let pool = await balancer.data.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - pool = await balancer.data.poolsOnChain.refresh(pool); - const { to, data, expectedAmountsOut, minAmountsOut, priceImpact } = - balancer.pools.buildRecoveryExit({ - pool, - bptAmount, - userAddress: signerAddr, - slippage, - }); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); - }); - }); - context('V4', async () => { - const poolId = - '0xa2ccad543fbe9332b87910beabd941b86dd5f762000000000000000000000b5c'; - // We have to reset the fork between each test as pool value changes after tx is submitted - beforeEach(async () => { - // Setup forked network, set initial token balances and allowances - await forkSetup( - signer, - [getPoolAddress(poolId)], - [0], - [parseFixed('10000', 18).toString()], - jsonRpcUrl as string, - blockNumber - ); - const subgraphArgs: GraphQLArgs = { - where: { - id: { - in: [poolId], - }, - }, - block: { number: blockNumber }, - }; - - const subgraphQuery: GraphQLQuery = { args: subgraphArgs, attrs: {} }; - balancer = new BalancerSDK({ - network, - rpcUrl, - subgraphQuery, - }); - }); + const { to, data, minAmountsOut, expectedAmountsOut, priceImpact } = + pool.buildRecoveryExit(signerAddr, bptAmount, slippage); - context('buildRecoveryExit', async () => { - context('PoolWithMethods', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('0.34', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - const pool = await balancer.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - const { to, data, minAmountsOut, expectedAmountsOut, priceImpact } = - pool.buildRecoveryExit(signerAddr, bptAmount, slippage); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); - }); - context('Pool & refresh', async () => { - it('should recovery exit', async () => { - const bptAmount = parseFixed('0.34', 18).toString(); - const slippage = '10'; // 10 bps = 0.1% - let pool = await balancer.data.pools.find(poolId); - if (!pool) throw Error('Pool not found'); - const signerAddr = await signer.getAddress(); - pool = await balancer.data.poolsOnChain.refresh(pool); - const { to, data, expectedAmountsOut, minAmountsOut, priceImpact } = - balancer.pools.buildRecoveryExit({ - pool, - bptAmount, - userAddress: signerAddr, - slippage, - }); - await assertRecoveryExit( - signerAddr, - slippage, - to, - data, - minAmountsOut, - expectedAmountsOut, - priceImpact, - pool, - signer, - bptAmount - ); - }); + await assertRecoveryExit( + signerAddr, + slippage, + to, + data, + minAmountsOut, + expectedAmountsOut, + priceImpact, + pool, + signer, + bptAmount + ); }); - }); + } }); }); diff --git a/balancer-js/src/modules/pools/queries/queries.integration.spec.ts b/balancer-js/src/modules/pools/queries/queries.integration.spec.ts index e4773efde..eae591c1f 100644 --- a/balancer-js/src/modules/pools/queries/queries.integration.spec.ts +++ b/balancer-js/src/modules/pools/queries/queries.integration.spec.ts @@ -30,12 +30,12 @@ const balPool = { }; const composableStablePool = { - id: '0x4edcb2b46377530bc18bb4d2c7fe46a992c73e100000000000000000000003ec', + id: '0x05ff47afada98a98982113758878f9a8b9fdda0a000000000000000000000645', poolType: PoolType.ComposableStable, tokensList: [ - '0x4edcb2b46377530bc18bb4d2c7fe46a992c73e10', - '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', - '0xbe9895146f7af43049ca1c1ae358b0541ea49704', + '0x05ff47afada98a98982113758878f9a8b9fdda0a', + '0xae78736cd615f374d3085123a210448e74fc6393', + '0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee', ], }; diff --git a/balancer-js/src/modules/sdk.module.ts b/balancer-js/src/modules/sdk.module.ts index a99c6b9f9..30418c46d 100644 --- a/balancer-js/src/modules/sdk.module.ts +++ b/balancer-js/src/modules/sdk.module.ts @@ -59,7 +59,8 @@ export class BalancerSDK implements BalancerSDKRoot { this.networkConfig, sor.provider, this.balancerContracts, - config.subgraphQuery + config.subgraphQuery, + config.coingecko ); this.swaps = new Swaps(this.config); diff --git a/balancer-js/src/modules/sor/pool-data/subgraphPoolDataService.ts b/balancer-js/src/modules/sor/pool-data/subgraphPoolDataService.ts index 94c0b1af7..3cd48f793 100644 --- a/balancer-js/src/modules/sor/pool-data/subgraphPoolDataService.ts +++ b/balancer-js/src/modules/sor/pool-data/subgraphPoolDataService.ts @@ -19,7 +19,6 @@ import { SubgraphArgsFormatter, } from '@/lib/graphql/args-builder'; -import { isSameAddress } from '@/lib/utils'; import { Logger } from '@/lib/utils/logger'; // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -76,8 +75,8 @@ export class SubgraphPoolDataService implements PoolDataService { const filteredPools = pools.filter((p) => { if (!this.network.poolsToIgnore) return true; - const index = this.network.poolsToIgnore.findIndex((addr) => - isSameAddress(addr, p.address) + const index = this.network.poolsToIgnore.findIndex( + (id) => id.toLowerCase() === p.id.toLowerCase() ); return index === -1; }); @@ -95,7 +94,8 @@ export class SubgraphPoolDataService implements PoolDataService { mapped, this.network.addresses.contracts.multicall, this.network.addresses.contracts.vault, - this.provider + this.provider, + this.network.multicallBatchSize ); logger.timeEnd(`fetching on-chain balances for ${mapped.length} pools`); diff --git a/balancer-js/src/modules/sor/sor.module.ts b/balancer-js/src/modules/sor/sor.module.ts index a99ad5605..a656b4134 100644 --- a/balancer-js/src/modules/sor/sor.module.ts +++ b/balancer-js/src/modules/sor/sor.module.ts @@ -1,7 +1,6 @@ import { SOR, SorConfig, TokenPriceService } from '@balancer-labs/sor'; import { Provider, JsonRpcProvider } from '@ethersproject/providers'; import { SubgraphPoolDataService } from './pool-data/subgraphPoolDataService'; -import { CoingeckoTokenPriceService } from './token-price/coingeckoTokenPriceService'; import { SubgraphClient, createSubgraphClient, @@ -10,11 +9,13 @@ import { BalancerNetworkConfig, BalancerSdkConfig, BalancerSdkSorConfig, + CoingeckoConfig, } from '@/types'; import { SubgraphTokenPriceService } from './token-price/subgraphTokenPriceService'; import { getNetworkConfig } from '@/modules/sdk.helpers'; -import { poolsToIgnore } from '@/lib/constants/poolsToIgnore'; -import { getPoolAddress } from '@/pool-utils'; +import { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore'; +import { ApiTokenPriceService } from '@/modules/sor/token-price/apiTokenPriceService'; +import { CoingeckoTokenPriceService } from '@/modules/sor/token-price/coingeckoTokenPriceService'; export class Sor extends SOR { constructor(sdkConfig: BalancerSdkConfig) { @@ -37,7 +38,8 @@ export class Sor extends SOR { const tokenPriceService = Sor.getTokenPriceService( network, sorConfig, - subgraphClient + subgraphClient, + sdkConfig.coingecko ); super(provider, sorNetworkConfig, poolDataService, tokenPriceService); @@ -45,7 +47,7 @@ export class Sor extends SOR { private static getSorConfig(config: BalancerSdkConfig): BalancerSdkSorConfig { return { - tokenPriceService: 'coingecko', + tokenPriceService: 'api', poolDataService: 'subgraph', fetchOnChainBalances: true, ...config.sor, @@ -72,11 +74,11 @@ export class Sor extends SOR { provider: Provider, subgraphClient: SubgraphClient ) { - const poolsToIgnoreAddr = poolsToIgnore.map((id) => getPoolAddress(id)); // For SOR we want to ignore all configured pools (for Vault/Simulation we don't) - const allPoolsToIgnore = network.poolsToIgnore - ? [...network.poolsToIgnore, ...poolsToIgnoreAddr] - : poolsToIgnoreAddr; + const allPoolsToIgnore = [ + ...(network.poolsToIgnore ?? []), + ...POOLS_TO_IGNORE, + ]; return typeof sorConfig.poolDataService === 'object' ? sorConfig.poolDataService : new SubgraphPoolDataService( @@ -90,17 +92,20 @@ export class Sor extends SOR { private static getTokenPriceService( network: BalancerNetworkConfig, sorConfig: BalancerSdkSorConfig, - subgraphClient: SubgraphClient + subgraphClient: SubgraphClient, + coingeckoConfig?: CoingeckoConfig ): TokenPriceService { + if (sorConfig.tokenPriceService === 'coingecko' && coingeckoConfig) { + return new CoingeckoTokenPriceService(network.chainId, coingeckoConfig); + } if (typeof sorConfig.tokenPriceService === 'object') { return sorConfig.tokenPriceService; } else if (sorConfig.tokenPriceService === 'subgraph') { - new SubgraphTokenPriceService( + return new SubgraphTokenPriceService( subgraphClient, network.addresses.tokens.wrappedNativeAsset ); } - - return new CoingeckoTokenPriceService(network.chainId); + return new ApiTokenPriceService(network.chainId); } } diff --git a/balancer-js/src/modules/sor/token-price/apiTokenPriceService.ts b/balancer-js/src/modules/sor/token-price/apiTokenPriceService.ts new file mode 100644 index 000000000..821332c6d --- /dev/null +++ b/balancer-js/src/modules/sor/token-price/apiTokenPriceService.ts @@ -0,0 +1,64 @@ +import { TokenPriceService } from '@balancer-labs/sor'; +import { gql, request } from 'graphql-request'; +import { Network } from '@/types'; + +export class ApiTokenPriceService implements TokenPriceService { + private chainKey: string; + + private balancerApiUrl = 'https://api-v3.balancer.fi/'; + + private tokenPriceQuery = gql` + query queryTokenPrices($chainKey: GqlChain!) { + tokenGetCurrentPrices(chains: [$chainKey]) { + address + price + } + } + `; + + constructor(private readonly chainId: number) { + this.chainKey = Network[chainId]; + } + async getNativeAssetPriceInToken(tokenAddress: string): Promise { + const { tokenGetCurrentPrices: tokenPrices } = await request( + this.balancerApiUrl, + this.tokenPriceQuery, + { + chainKey: this.chainKey, + } + ); + const tokenPriceUsd = ( + tokenPrices as { address: string; price: number }[] + ).find( + ({ address }) => address.toLowerCase() === tokenAddress.toLowerCase() + ); + if (!tokenPriceUsd) { + throw new Error('Token Price not found in the API'); + } + const nativeAssetPriceUsd = ( + tokenPrices as { address: string; price: number }[] + ).find( + ({ address }) => + address.toLowerCase() === + NativeAssetAddress[this.chainKey as keyof typeof NativeAssetAddress] + ); + if (!nativeAssetPriceUsd) { + throw new Error('Native Token Price not found in the API'); + } + const tokenPriceInNativeAsset = + tokenPriceUsd.price / nativeAssetPriceUsd.price; + return String(tokenPriceInNativeAsset); + } +} + +enum NativeAssetAddress { + MAINNET = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + POLYGON = '0x0000000000000000000000000000000000001010', + ARBITRUM = '0x912ce59144191c1204e64559fe8253a0e49e6548', + AVALANCHE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + BASE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + FANTOM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + GNOSIS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + OPTIMISM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + ZKEVM = '0xa2036f0538221a77a3937f1379699f44945018d0', +} diff --git a/balancer-js/src/modules/sor/token-price/coingeckoTokenPriceService.ts b/balancer-js/src/modules/sor/token-price/coingeckoTokenPriceService.ts index 4a9de1c0e..ef455d054 100644 --- a/balancer-js/src/modules/sor/token-price/coingeckoTokenPriceService.ts +++ b/balancer-js/src/modules/sor/token-price/coingeckoTokenPriceService.ts @@ -1,10 +1,27 @@ import { TokenPriceService } from '@balancer-labs/sor'; import axios from 'axios'; import { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config'; -import { Network, BalancerNetworkConfig } from '@/types'; +import { Network, BalancerNetworkConfig, CoingeckoConfig } from '@/types'; +import { + getCoingeckoApiBaseUrl, + getCoingeckoApiKeyHeaderName, +} from '@/lib/utils/coingecko-api'; export class CoingeckoTokenPriceService implements TokenPriceService { - constructor(private readonly chainId: number) {} + private readonly urlBase: string; + private readonly apiKey: string; + private readonly coingeckoApiKeyHeaderName: string; + constructor(private readonly chainId: number, coingecko: CoingeckoConfig) { + this.urlBase = `${getCoingeckoApiBaseUrl( + coingecko?.isDemoApiKey + )}simple/token_price/${this.platformId}?vs_currencies=${ + this.nativeAssetId + }`; + this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName( + coingecko?.isDemoApiKey + ); + this.apiKey = coingecko.coingeckoApiKey; + } public async getNativeAssetPriceInToken( tokenAddress: string @@ -22,12 +39,13 @@ export class CoingeckoTokenPriceService implements TokenPriceService { * @returns the price of 1 ETH in terms of the token base units */ async getTokenPriceInNativeAsset(tokenAddress: string): Promise { - const endpoint = `https://api.coingecko.com/api/v3/simple/token_price/${this.platformId}?contract_addresses=${tokenAddress}&vs_currencies=${this.nativeAssetId}`; + const endpoint = `${this.urlBase}&contract_addresses=${tokenAddress}`; const { data } = await axios.get(endpoint, { headers: { Accept: 'application/json', 'Content-Type': 'application/json', + [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '', }, }); diff --git a/balancer-js/src/modules/subgraph/codegen.yml b/balancer-js/src/modules/subgraph/codegen.yml index 1e06d6c7a..2f4189a0c 100644 --- a/balancer-js/src/modules/subgraph/codegen.yml +++ b/balancer-js/src/modules/subgraph/codegen.yml @@ -1,7 +1,7 @@ overwrite: true generates: src/modules/subgraph/generated/balancer-subgraph-types.ts: - schema: ${BALANCER_SUBGRAPH_URL:https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2} + schema: ${BALANCER_SUBGRAPH_URL:https://api.studio.thegraph.com/query/75376/balancer-v2/version/latest} documents: 'src/modules/subgraph/balancer-v2/**/*.graphql' plugins: - typescript @@ -13,11 +13,11 @@ generates: Bytes: string BigDecimal: string src/modules/subgraph/generated/balancer-subgraph-schema.graphql: - schema: ${BALANCER_SUBGRAPH_URL:https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2} + schema: ${BALANCER_SUBGRAPH_URL:https://api.studio.thegraph.com/query/75376/balancer-v2/version/latest} plugins: - schema-ast src/modules/subgraph/generated/balancer-gauges.ts: - schema: ${BALANCER_GAUGES_URL:https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges} + schema: ${BALANCER_GAUGES_URL:https://api.studio.thegraph.com/query/75376/balancer-gauges/version/latest} documents: 'src/modules/subgraph/balancer-gauges/**/*.graphql' plugins: - typescript @@ -31,7 +31,7 @@ generates: namingConvention: enumValues: keep src/modules/subgraph/generated/balancer-gauges.graphql: - schema: ${BALANCER_GAUGES_URL:https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges} + schema: ${BALANCER_GAUGES_URL:https://api.studio.thegraph.com/query/75376/balancer-gauges/version/latest} plugins: - schema-ast hooks: diff --git a/balancer-js/src/modules/subgraph/generated/balancer-gauges.graphql b/balancer-js/src/modules/subgraph/generated/balancer-gauges.graphql index 87feffe01..6bd4c0f6f 100644 --- a/balancer-js/src/modules/subgraph/generated/balancer-gauges.graphql +++ b/balancer-js/src/modules/subgraph/generated/balancer-gauges.graphql @@ -11,6 +11,11 @@ directive @entity on OBJECT """Defined a Subgraph ID for an object type""" directive @subgraphId(id: String!) on OBJECT +enum Aggregation_interval { + day + hour +} + scalar BigDecimal scalar BigInt @@ -29,9 +34,13 @@ scalar Bytes enum Chain { Arbitrum + Avalanche + Base + Fraxtal Gnosis Optimism Polygon + PolygonZkEvm } type Gauge { @@ -96,6 +105,30 @@ enum GaugeFactory_orderBy { numGauges } +type GaugeInjector { + """ GaugeInjector contract address """ + id: ID! +} + +input GaugeInjector_filter { + """Filter for the block changed event.""" + _change_block: BlockChangedFilter + and: [GaugeInjector_filter] + id: ID + id_gt: ID + id_gte: ID + id_in: [ID!] + id_lt: ID + id_lte: ID + id_not: ID + id_not_in: [ID!] + or: [GaugeInjector_filter] +} + +enum GaugeInjector_orderBy { + id +} + type GaugeShare { """ User's balance of gauge deposit tokens """ balance: BigDecimal! @@ -463,6 +496,12 @@ enum Gauge_orderBy { type__name } +""" +8 bytes signed integer + +""" +scalar Int8 + type LiquidityGauge { """ Factory contract address """ factory: GaugeFactory! @@ -493,6 +532,10 @@ type LiquidityGauge { """ Relative weight cap of the gauge (0.01 = 1%) - V2 factories only """ relativeWeightCap: BigDecimal + """ List of reward tokens depositted in the gauge - ChildChainLiquidityGauge only + """ + rewardTokensList: [Bytes!] + """ List of user shares """ shares(first: Int = 100, orderBy: GaugeShare_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: GaugeShare_filter): [GaugeShare!] @@ -622,6 +665,12 @@ input LiquidityGauge_filter { relativeWeightCap_lte: BigDecimal relativeWeightCap_not: BigDecimal relativeWeightCap_not_in: [BigDecimal!] + rewardTokensList: [Bytes!] + rewardTokensList_contains: [Bytes!] + rewardTokensList_contains_nocase: [Bytes!] + rewardTokensList_not: [Bytes!] + rewardTokensList_not_contains: [Bytes!] + rewardTokensList_not_contains_nocase: [Bytes!] shares_: GaugeShare_filter streamer: Bytes streamer_contains: Bytes @@ -682,6 +731,7 @@ enum LiquidityGauge_orderBy { pool__id pool__poolId relativeWeightCap + rewardTokensList shares streamer symbol @@ -689,6 +739,231 @@ enum LiquidityGauge_orderBy { totalSupply } +type LockSnapshot { + """ veBAL balance at the moment user locks """ + bias: BigDecimal! + + """ Equal to - """ + id: ID! + + """ veBAL decay rate (per second) """ + slope: BigDecimal! + + """ Timestamp at which the snapshot was taken [seconds] """ + timestamp: Int! + + """ Reference to User entity """ + user: User! +} + +input LockSnapshot_filter { + """Filter for the block changed event.""" + _change_block: BlockChangedFilter + and: [LockSnapshot_filter] + bias: BigDecimal + bias_gt: BigDecimal + bias_gte: BigDecimal + bias_in: [BigDecimal!] + bias_lt: BigDecimal + bias_lte: BigDecimal + bias_not: BigDecimal + bias_not_in: [BigDecimal!] + id: ID + id_gt: ID + id_gte: ID + id_in: [ID!] + id_lt: ID + id_lte: ID + id_not: ID + id_not_in: [ID!] + or: [LockSnapshot_filter] + slope: BigDecimal + slope_gt: BigDecimal + slope_gte: BigDecimal + slope_in: [BigDecimal!] + slope_lt: BigDecimal + slope_lte: BigDecimal + slope_not: BigDecimal + slope_not_in: [BigDecimal!] + timestamp: Int + timestamp_gt: Int + timestamp_gte: Int + timestamp_in: [Int!] + timestamp_lt: Int + timestamp_lte: Int + timestamp_not: Int + timestamp_not_in: [Int!] + user: String + user_: User_filter + user_contains: String + user_contains_nocase: String + user_ends_with: String + user_ends_with_nocase: String + user_gt: String + user_gte: String + user_in: [String!] + user_lt: String + user_lte: String + user_not: String + user_not_contains: String + user_not_contains_nocase: String + user_not_ends_with: String + user_not_ends_with_nocase: String + user_not_in: [String!] + user_not_starts_with: String + user_not_starts_with_nocase: String + user_starts_with: String + user_starts_with_nocase: String +} + +enum LockSnapshot_orderBy { + bias + id + slope + timestamp + user + user__id +} + +type OmniVotingEscrowLock { + """ veBAL balance at the moment user locks """ + bias: BigDecimal! + + """ Chain where the lock was bridged to """ + dstChainId: Int! + + """ Equal to: - """ + id: ID! + + """ User on the local chain (reference to User entity) """ + localUser: User! + + """ User address on the remote chain """ + remoteUser: Bytes! + + """ veBAL decay rate (per second) """ + slope: BigDecimal! + + """ Timestamp the lock was created [seconds] """ + timestamp: Int! + + """ Reference to VotingEscrow entity """ + votingEscrowID: VotingEscrow! +} + +input OmniVotingEscrowLock_filter { + """Filter for the block changed event.""" + _change_block: BlockChangedFilter + and: [OmniVotingEscrowLock_filter] + bias: BigDecimal + bias_gt: BigDecimal + bias_gte: BigDecimal + bias_in: [BigDecimal!] + bias_lt: BigDecimal + bias_lte: BigDecimal + bias_not: BigDecimal + bias_not_in: [BigDecimal!] + dstChainId: Int + dstChainId_gt: Int + dstChainId_gte: Int + dstChainId_in: [Int!] + dstChainId_lt: Int + dstChainId_lte: Int + dstChainId_not: Int + dstChainId_not_in: [Int!] + id: ID + id_gt: ID + id_gte: ID + id_in: [ID!] + id_lt: ID + id_lte: ID + id_not: ID + id_not_in: [ID!] + localUser: String + localUser_: User_filter + localUser_contains: String + localUser_contains_nocase: String + localUser_ends_with: String + localUser_ends_with_nocase: String + localUser_gt: String + localUser_gte: String + localUser_in: [String!] + localUser_lt: String + localUser_lte: String + localUser_not: String + localUser_not_contains: String + localUser_not_contains_nocase: String + localUser_not_ends_with: String + localUser_not_ends_with_nocase: String + localUser_not_in: [String!] + localUser_not_starts_with: String + localUser_not_starts_with_nocase: String + localUser_starts_with: String + localUser_starts_with_nocase: String + or: [OmniVotingEscrowLock_filter] + remoteUser: Bytes + remoteUser_contains: Bytes + remoteUser_gt: Bytes + remoteUser_gte: Bytes + remoteUser_in: [Bytes!] + remoteUser_lt: Bytes + remoteUser_lte: Bytes + remoteUser_not: Bytes + remoteUser_not_contains: Bytes + remoteUser_not_in: [Bytes!] + slope: BigDecimal + slope_gt: BigDecimal + slope_gte: BigDecimal + slope_in: [BigDecimal!] + slope_lt: BigDecimal + slope_lte: BigDecimal + slope_not: BigDecimal + slope_not_in: [BigDecimal!] + timestamp: Int + timestamp_gt: Int + timestamp_gte: Int + timestamp_in: [Int!] + timestamp_lt: Int + timestamp_lte: Int + timestamp_not: Int + timestamp_not_in: [Int!] + votingEscrowID: String + votingEscrowID_: VotingEscrow_filter + votingEscrowID_contains: String + votingEscrowID_contains_nocase: String + votingEscrowID_ends_with: String + votingEscrowID_ends_with_nocase: String + votingEscrowID_gt: String + votingEscrowID_gte: String + votingEscrowID_in: [String!] + votingEscrowID_lt: String + votingEscrowID_lte: String + votingEscrowID_not: String + votingEscrowID_not_contains: String + votingEscrowID_not_contains_nocase: String + votingEscrowID_not_ends_with: String + votingEscrowID_not_ends_with_nocase: String + votingEscrowID_not_in: [String!] + votingEscrowID_not_starts_with: String + votingEscrowID_not_starts_with_nocase: String + votingEscrowID_starts_with: String + votingEscrowID_starts_with_nocase: String +} + +enum OmniVotingEscrowLock_orderBy { + bias + dstChainId + id + localUser + localUser__id + remoteUser + slope + timestamp + votingEscrowID + votingEscrowID__id + votingEscrowID__stakedSupply +} + """Defines the order direction, either ascending or descending""" enum OrderDirection { asc @@ -839,6 +1114,34 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): GaugeFactory + gaugeInjector( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): GaugeInjector + gaugeInjectors( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: GaugeInjector_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: GaugeInjector_filter + ): [GaugeInjector!]! gaugeShare( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -967,6 +1270,62 @@ type Query { subgraphError: _SubgraphErrorPolicy_! = deny where: LiquidityGauge_filter ): [LiquidityGauge!]! + lockSnapshot( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): LockSnapshot + lockSnapshots( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: LockSnapshot_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: LockSnapshot_filter + ): [LockSnapshot!]! + omniVotingEscrowLock( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): OmniVotingEscrowLock + omniVotingEscrowLocks( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: OmniVotingEscrowLock_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: OmniVotingEscrowLock_filter + ): [OmniVotingEscrowLock!]! pool( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -1051,6 +1410,34 @@ type Query { subgraphError: _SubgraphErrorPolicy_! = deny where: RootGauge_filter ): [RootGauge!]! + singleRecipientGauge( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): SingleRecipientGauge + singleRecipientGauges( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: SingleRecipientGauge_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: SingleRecipientGauge_filter + ): [SingleRecipientGauge!]! user( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -1389,6 +1776,120 @@ enum RootGauge_orderBy { relativeWeightCap } +type SingleRecipientGauge { + """ Factory contract address """ + factory: GaugeFactory! + + """ Reference to Gauge entity - created when SingleRecipientGauge is added to GaugeController + """ + gauge: Gauge + + """ SingleRecipientGauge contract address""" + id: ID! + + """ Whether Balancer DAO killed the gauge """ + isKilled: Boolean! + + """ Address where emissions for this gauge will be sent to """ + recipient: Bytes! + + """ Relative weight cap of the gauge (0.01 = 1%) - V2 factories only """ + relativeWeightCap: BigDecimal +} + +input SingleRecipientGauge_filter { + """Filter for the block changed event.""" + _change_block: BlockChangedFilter + and: [SingleRecipientGauge_filter] + factory: String + factory_: GaugeFactory_filter + factory_contains: String + factory_contains_nocase: String + factory_ends_with: String + factory_ends_with_nocase: String + factory_gt: String + factory_gte: String + factory_in: [String!] + factory_lt: String + factory_lte: String + factory_not: String + factory_not_contains: String + factory_not_contains_nocase: String + factory_not_ends_with: String + factory_not_ends_with_nocase: String + factory_not_in: [String!] + factory_not_starts_with: String + factory_not_starts_with_nocase: String + factory_starts_with: String + factory_starts_with_nocase: String + gauge: String + gauge_: Gauge_filter + gauge_contains: String + gauge_contains_nocase: String + gauge_ends_with: String + gauge_ends_with_nocase: String + gauge_gt: String + gauge_gte: String + gauge_in: [String!] + gauge_lt: String + gauge_lte: String + gauge_not: String + gauge_not_contains: String + gauge_not_contains_nocase: String + gauge_not_ends_with: String + gauge_not_ends_with_nocase: String + gauge_not_in: [String!] + gauge_not_starts_with: String + gauge_not_starts_with_nocase: String + gauge_starts_with: String + gauge_starts_with_nocase: String + id: ID + id_gt: ID + id_gte: ID + id_in: [ID!] + id_lt: ID + id_lte: ID + id_not: ID + id_not_in: [ID!] + isKilled: Boolean + isKilled_in: [Boolean!] + isKilled_not: Boolean + isKilled_not_in: [Boolean!] + or: [SingleRecipientGauge_filter] + recipient: Bytes + recipient_contains: Bytes + recipient_gt: Bytes + recipient_gte: Bytes + recipient_in: [Bytes!] + recipient_lt: Bytes + recipient_lte: Bytes + recipient_not: Bytes + recipient_not_contains: Bytes + recipient_not_in: [Bytes!] + relativeWeightCap: BigDecimal + relativeWeightCap_gt: BigDecimal + relativeWeightCap_gte: BigDecimal + relativeWeightCap_in: [BigDecimal!] + relativeWeightCap_lt: BigDecimal + relativeWeightCap_lte: BigDecimal + relativeWeightCap_not: BigDecimal + relativeWeightCap_not_in: [BigDecimal!] +} + +enum SingleRecipientGauge_orderBy { + factory + factory__id + factory__numGauges + gauge + gauge__addedTimestamp + gauge__address + gauge__id + id + isKilled + recipient + relativeWeightCap +} + type Subscription { """Access to subgraph metadata""" _meta(block: Block_height): _Meta_ @@ -1432,6 +1933,34 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): GaugeFactory + gaugeInjector( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): GaugeInjector + gaugeInjectors( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: GaugeInjector_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: GaugeInjector_filter + ): [GaugeInjector!]! gaugeShare( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -1560,6 +2089,62 @@ type Subscription { subgraphError: _SubgraphErrorPolicy_! = deny where: LiquidityGauge_filter ): [LiquidityGauge!]! + lockSnapshot( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): LockSnapshot + lockSnapshots( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: LockSnapshot_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: LockSnapshot_filter + ): [LockSnapshot!]! + omniVotingEscrowLock( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): OmniVotingEscrowLock + omniVotingEscrowLocks( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: OmniVotingEscrowLock_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: OmniVotingEscrowLock_filter + ): [OmniVotingEscrowLock!]! pool( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -1644,6 +2229,34 @@ type Subscription { subgraphError: _SubgraphErrorPolicy_! = deny where: RootGauge_filter ): [RootGauge!]! + singleRecipientGauge( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): SingleRecipientGauge + singleRecipientGauges( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: SingleRecipientGauge_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: SingleRecipientGauge_filter + ): [SingleRecipientGauge!]! user( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -1730,6 +2343,12 @@ type Subscription { ): [VotingEscrow!]! } +""" +A string representation of microseconds UNIX timestamp (16 digits) + +""" +scalar Timestamp + type User { """ List of gauge the user has shares """ gaugeShares(first: Int = 100, orderBy: GaugeShare_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: GaugeShare_filter): [GaugeShare!] @@ -1740,6 +2359,9 @@ type User { """ User address """ id: ID! + """ List of omni locks the user created """ + omniVotingLocks(first: Int = 100, orderBy: OmniVotingEscrowLock_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: OmniVotingEscrowLock_filter): [OmniVotingEscrowLock!] + """ List of locks the user created """ votingLocks(first: Int = 100, orderBy: VotingEscrowLock_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: VotingEscrowLock_filter): [VotingEscrowLock!] } @@ -1758,6 +2380,7 @@ input User_filter { id_lte: ID id_not: ID id_not_in: [ID!] + omniVotingLocks_: OmniVotingEscrowLock_filter or: [User_filter] votingLocks_: VotingEscrowLock_filter } @@ -1766,6 +2389,7 @@ enum User_orderBy { gaugeShares gaugeVotes id + omniVotingLocks votingLocks } @@ -1776,20 +2400,34 @@ type VotingEscrow { """ List of veBAL locks created """ locks(first: Int = 100, orderBy: VotingEscrowLock_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: VotingEscrowLock_filter): [VotingEscrowLock!] - """ Amount of B-80BAL-20WETH BPT locked """ - stakedSupply: BigDecimal! + """ List of veBAL locks created """ + omniLocks(first: Int = 100, orderBy: OmniVotingEscrowLock_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: OmniVotingEscrowLock_filter): [OmniVotingEscrowLock!] + + """ Amount of B-80BAL-20WETH BPT locked, only applies on mainnet """ + stakedSupply: BigDecimal } type VotingEscrowLock { + """ veBAL balance at the moment user locks """ + bias: BigDecimal! + """ Equal to: - """ id: ID! """ Amount of B-80BAL-20WETH BPT the user has locked """ lockedBalance: BigDecimal! + """ veBAL decay rate (per second) """ + slope: BigDecimal! + + """ Timestamp at which the lock was created [seconds] """ + timestamp: Int! + """ Timestamp at which B-80BAL-20WETH BPT can be unlocked by user [seconds] """ - unlockTime: BigInt + unlockTime: BigInt! + + """ Timestamp at which the lcok was created [seconds]. Same as timestamp """ updatedAt: Int! """ Reference to User entity """ @@ -1803,6 +2441,14 @@ input VotingEscrowLock_filter { """Filter for the block changed event.""" _change_block: BlockChangedFilter and: [VotingEscrowLock_filter] + bias: BigDecimal + bias_gt: BigDecimal + bias_gte: BigDecimal + bias_in: [BigDecimal!] + bias_lt: BigDecimal + bias_lte: BigDecimal + bias_not: BigDecimal + bias_not_in: [BigDecimal!] id: ID id_gt: ID id_gte: ID @@ -1820,6 +2466,22 @@ input VotingEscrowLock_filter { lockedBalance_not: BigDecimal lockedBalance_not_in: [BigDecimal!] or: [VotingEscrowLock_filter] + slope: BigDecimal + slope_gt: BigDecimal + slope_gte: BigDecimal + slope_in: [BigDecimal!] + slope_lt: BigDecimal + slope_lte: BigDecimal + slope_not: BigDecimal + slope_not_in: [BigDecimal!] + timestamp: Int + timestamp_gt: Int + timestamp_gte: Int + timestamp_in: [Int!] + timestamp_lt: Int + timestamp_lte: Int + timestamp_not: Int + timestamp_not_in: [Int!] unlockTime: BigInt unlockTime_gt: BigInt unlockTime_gte: BigInt @@ -1881,8 +2543,11 @@ input VotingEscrowLock_filter { } enum VotingEscrowLock_orderBy { + bias id lockedBalance + slope + timestamp unlockTime updatedAt user @@ -1905,6 +2570,7 @@ input VotingEscrow_filter { id_not: ID id_not_in: [ID!] locks_: VotingEscrowLock_filter + omniLocks_: OmniVotingEscrowLock_filter or: [VotingEscrow_filter] stakedSupply: BigDecimal stakedSupply_gt: BigDecimal @@ -1919,6 +2585,7 @@ input VotingEscrow_filter { enum VotingEscrow_orderBy { id locks + omniLocks stakedSupply } @@ -1929,6 +2596,9 @@ type _Block_ { """The block number""" number: Int! + """The hash of the parent block""" + parentHash: Bytes + """Integer representation of the timestamp stored in blocks for the chain""" timestamp: Int } diff --git a/balancer-js/src/modules/subgraph/generated/balancer-gauges.ts b/balancer-js/src/modules/subgraph/generated/balancer-gauges.ts index 0ae57502c..e5a504cd9 100644 --- a/balancer-js/src/modules/subgraph/generated/balancer-gauges.ts +++ b/balancer-js/src/modules/subgraph/generated/balancer-gauges.ts @@ -16,8 +16,15 @@ export type Scalars = { BigDecimal: string; BigInt: string; Bytes: string; + Int8: any; + Timestamp: any; }; +export enum Aggregation_Interval { + day = 'day', + hour = 'hour' +} + export type BlockChangedFilter = { number_gte: Scalars['Int']; }; @@ -30,9 +37,13 @@ export type Block_Height = { export enum Chain { Arbitrum = 'Arbitrum', + Avalanche = 'Avalanche', + Base = 'Base', + Fraxtal = 'Fraxtal', Gnosis = 'Gnosis', Optimism = 'Optimism', - Polygon = 'Polygon' + Polygon = 'Polygon', + PolygonZkEvm = 'PolygonZkEvm' } export type Gauge = { @@ -100,6 +111,31 @@ export enum GaugeFactory_OrderBy { numGauges = 'numGauges' } +export type GaugeInjector = { + __typename?: 'GaugeInjector'; + /** GaugeInjector contract address */ + id: Scalars['ID']; +}; + +export type GaugeInjector_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; +}; + +export enum GaugeInjector_OrderBy { + id = 'id' +} + export type GaugeShare = { __typename?: 'GaugeShare'; /** User's balance of gauge deposit tokens */ @@ -482,6 +518,8 @@ export type LiquidityGauge = { poolId?: Maybe; /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */ relativeWeightCap?: Maybe; + /** List of reward tokens depositted in the gauge - ChildChainLiquidityGauge only */ + rewardTokensList?: Maybe>; /** List of user shares */ shares?: Maybe>; /** Address of the contract that streams reward tokens to the gauge - ChildChainLiquidityGauge only */ @@ -624,6 +662,12 @@ export type LiquidityGauge_Filter = { relativeWeightCap_lte?: InputMaybe; relativeWeightCap_not?: InputMaybe; relativeWeightCap_not_in?: InputMaybe>; + rewardTokensList?: InputMaybe>; + rewardTokensList_contains?: InputMaybe>; + rewardTokensList_contains_nocase?: InputMaybe>; + rewardTokensList_not?: InputMaybe>; + rewardTokensList_not_contains?: InputMaybe>; + rewardTokensList_not_contains_nocase?: InputMaybe>; shares_?: InputMaybe; streamer?: InputMaybe; streamer_contains?: InputMaybe; @@ -684,6 +728,7 @@ export enum LiquidityGauge_OrderBy { pool__id = 'pool__id', pool__poolId = 'pool__poolId', relativeWeightCap = 'relativeWeightCap', + rewardTokensList = 'rewardTokensList', shares = 'shares', streamer = 'streamer', symbol = 'symbol', @@ -691,6 +736,222 @@ export enum LiquidityGauge_OrderBy { totalSupply = 'totalSupply' } +export type LockSnapshot = { + __typename?: 'LockSnapshot'; + /** veBAL balance at the moment user locks */ + bias: Scalars['BigDecimal']; + /** Equal to - */ + id: Scalars['ID']; + /** veBAL decay rate (per second) */ + slope: Scalars['BigDecimal']; + /** Timestamp at which the snapshot was taken [seconds] */ + timestamp: Scalars['Int']; + /** Reference to User entity */ + user: User; +}; + +export type LockSnapshot_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + bias?: InputMaybe; + bias_gt?: InputMaybe; + bias_gte?: InputMaybe; + bias_in?: InputMaybe>; + bias_lt?: InputMaybe; + bias_lte?: InputMaybe; + bias_not?: InputMaybe; + bias_not_in?: InputMaybe>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + slope?: InputMaybe; + slope_gt?: InputMaybe; + slope_gte?: InputMaybe; + slope_in?: InputMaybe>; + slope_lt?: InputMaybe; + slope_lte?: InputMaybe; + slope_not?: InputMaybe; + slope_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; + user?: InputMaybe; + user_?: InputMaybe; + user_contains?: InputMaybe; + user_contains_nocase?: InputMaybe; + user_ends_with?: InputMaybe; + user_ends_with_nocase?: InputMaybe; + user_gt?: InputMaybe; + user_gte?: InputMaybe; + user_in?: InputMaybe>; + user_lt?: InputMaybe; + user_lte?: InputMaybe; + user_not?: InputMaybe; + user_not_contains?: InputMaybe; + user_not_contains_nocase?: InputMaybe; + user_not_ends_with?: InputMaybe; + user_not_ends_with_nocase?: InputMaybe; + user_not_in?: InputMaybe>; + user_not_starts_with?: InputMaybe; + user_not_starts_with_nocase?: InputMaybe; + user_starts_with?: InputMaybe; + user_starts_with_nocase?: InputMaybe; +}; + +export enum LockSnapshot_OrderBy { + bias = 'bias', + id = 'id', + slope = 'slope', + timestamp = 'timestamp', + user = 'user', + user__id = 'user__id' +} + +export type OmniVotingEscrowLock = { + __typename?: 'OmniVotingEscrowLock'; + /** veBAL balance at the moment user locks */ + bias: Scalars['BigDecimal']; + /** Chain where the lock was bridged to */ + dstChainId: Scalars['Int']; + /** Equal to: - */ + id: Scalars['ID']; + /** User on the local chain (reference to User entity) */ + localUser: User; + /** User address on the remote chain */ + remoteUser: Scalars['Bytes']; + /** veBAL decay rate (per second) */ + slope: Scalars['BigDecimal']; + /** Timestamp the lock was created [seconds] */ + timestamp: Scalars['Int']; + /** Reference to VotingEscrow entity */ + votingEscrowID: VotingEscrow; +}; + +export type OmniVotingEscrowLock_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + bias?: InputMaybe; + bias_gt?: InputMaybe; + bias_gte?: InputMaybe; + bias_in?: InputMaybe>; + bias_lt?: InputMaybe; + bias_lte?: InputMaybe; + bias_not?: InputMaybe; + bias_not_in?: InputMaybe>; + dstChainId?: InputMaybe; + dstChainId_gt?: InputMaybe; + dstChainId_gte?: InputMaybe; + dstChainId_in?: InputMaybe>; + dstChainId_lt?: InputMaybe; + dstChainId_lte?: InputMaybe; + dstChainId_not?: InputMaybe; + dstChainId_not_in?: InputMaybe>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + localUser?: InputMaybe; + localUser_?: InputMaybe; + localUser_contains?: InputMaybe; + localUser_contains_nocase?: InputMaybe; + localUser_ends_with?: InputMaybe; + localUser_ends_with_nocase?: InputMaybe; + localUser_gt?: InputMaybe; + localUser_gte?: InputMaybe; + localUser_in?: InputMaybe>; + localUser_lt?: InputMaybe; + localUser_lte?: InputMaybe; + localUser_not?: InputMaybe; + localUser_not_contains?: InputMaybe; + localUser_not_contains_nocase?: InputMaybe; + localUser_not_ends_with?: InputMaybe; + localUser_not_ends_with_nocase?: InputMaybe; + localUser_not_in?: InputMaybe>; + localUser_not_starts_with?: InputMaybe; + localUser_not_starts_with_nocase?: InputMaybe; + localUser_starts_with?: InputMaybe; + localUser_starts_with_nocase?: InputMaybe; + or?: InputMaybe>>; + remoteUser?: InputMaybe; + remoteUser_contains?: InputMaybe; + remoteUser_gt?: InputMaybe; + remoteUser_gte?: InputMaybe; + remoteUser_in?: InputMaybe>; + remoteUser_lt?: InputMaybe; + remoteUser_lte?: InputMaybe; + remoteUser_not?: InputMaybe; + remoteUser_not_contains?: InputMaybe; + remoteUser_not_in?: InputMaybe>; + slope?: InputMaybe; + slope_gt?: InputMaybe; + slope_gte?: InputMaybe; + slope_in?: InputMaybe>; + slope_lt?: InputMaybe; + slope_lte?: InputMaybe; + slope_not?: InputMaybe; + slope_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; + votingEscrowID?: InputMaybe; + votingEscrowID_?: InputMaybe; + votingEscrowID_contains?: InputMaybe; + votingEscrowID_contains_nocase?: InputMaybe; + votingEscrowID_ends_with?: InputMaybe; + votingEscrowID_ends_with_nocase?: InputMaybe; + votingEscrowID_gt?: InputMaybe; + votingEscrowID_gte?: InputMaybe; + votingEscrowID_in?: InputMaybe>; + votingEscrowID_lt?: InputMaybe; + votingEscrowID_lte?: InputMaybe; + votingEscrowID_not?: InputMaybe; + votingEscrowID_not_contains?: InputMaybe; + votingEscrowID_not_contains_nocase?: InputMaybe; + votingEscrowID_not_ends_with?: InputMaybe; + votingEscrowID_not_ends_with_nocase?: InputMaybe; + votingEscrowID_not_in?: InputMaybe>; + votingEscrowID_not_starts_with?: InputMaybe; + votingEscrowID_not_starts_with_nocase?: InputMaybe; + votingEscrowID_starts_with?: InputMaybe; + votingEscrowID_starts_with_nocase?: InputMaybe; +}; + +export enum OmniVotingEscrowLock_OrderBy { + bias = 'bias', + dstChainId = 'dstChainId', + id = 'id', + localUser = 'localUser', + localUser__id = 'localUser__id', + remoteUser = 'remoteUser', + slope = 'slope', + timestamp = 'timestamp', + votingEscrowID = 'votingEscrowID', + votingEscrowID__id = 'votingEscrowID__id', + votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply' +} + /** Defines the order direction, either ascending or descending */ export enum OrderDirection { asc = 'asc', @@ -810,6 +1071,8 @@ export type Query = { gauge?: Maybe; gaugeFactories: Array; gaugeFactory?: Maybe; + gaugeInjector?: Maybe; + gaugeInjectors: Array; gaugeShare?: Maybe; gaugeShares: Array; gaugeType?: Maybe; @@ -819,12 +1082,18 @@ export type Query = { gauges: Array; liquidityGauge?: Maybe; liquidityGauges: Array; + lockSnapshot?: Maybe; + lockSnapshots: Array; + omniVotingEscrowLock?: Maybe; + omniVotingEscrowLocks: Array; pool?: Maybe; pools: Array; rewardToken?: Maybe; rewardTokens: Array; rootGauge?: Maybe; rootGauges: Array; + singleRecipientGauge?: Maybe; + singleRecipientGauges: Array; user?: Maybe; users: Array; votingEscrow?: Maybe; @@ -864,6 +1133,24 @@ export type QueryGaugeFactoryArgs = { }; +export type QueryGaugeInjectorArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryGaugeInjectorsArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type QueryGaugeShareArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -947,6 +1234,42 @@ export type QueryLiquidityGaugesArgs = { }; +export type QueryLockSnapshotArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryLockSnapshotsArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + +export type QueryOmniVotingEscrowLockArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryOmniVotingEscrowLocksArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type QueryPoolArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -1001,6 +1324,24 @@ export type QueryRootGaugesArgs = { }; +export type QuerySingleRecipientGaugeArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerySingleRecipientGaugesArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type QueryUserArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -1295,6 +1636,115 @@ export enum RootGauge_OrderBy { relativeWeightCap = 'relativeWeightCap' } +export type SingleRecipientGauge = { + __typename?: 'SingleRecipientGauge'; + /** Factory contract address */ + factory: GaugeFactory; + /** Reference to Gauge entity - created when SingleRecipientGauge is added to GaugeController */ + gauge?: Maybe; + /** SingleRecipientGauge contract address */ + id: Scalars['ID']; + /** Whether Balancer DAO killed the gauge */ + isKilled: Scalars['Boolean']; + /** Address where emissions for this gauge will be sent to */ + recipient: Scalars['Bytes']; + /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */ + relativeWeightCap?: Maybe; +}; + +export type SingleRecipientGauge_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + factory?: InputMaybe; + factory_?: InputMaybe; + factory_contains?: InputMaybe; + factory_contains_nocase?: InputMaybe; + factory_ends_with?: InputMaybe; + factory_ends_with_nocase?: InputMaybe; + factory_gt?: InputMaybe; + factory_gte?: InputMaybe; + factory_in?: InputMaybe>; + factory_lt?: InputMaybe; + factory_lte?: InputMaybe; + factory_not?: InputMaybe; + factory_not_contains?: InputMaybe; + factory_not_contains_nocase?: InputMaybe; + factory_not_ends_with?: InputMaybe; + factory_not_ends_with_nocase?: InputMaybe; + factory_not_in?: InputMaybe>; + factory_not_starts_with?: InputMaybe; + factory_not_starts_with_nocase?: InputMaybe; + factory_starts_with?: InputMaybe; + factory_starts_with_nocase?: InputMaybe; + gauge?: InputMaybe; + gauge_?: InputMaybe; + gauge_contains?: InputMaybe; + gauge_contains_nocase?: InputMaybe; + gauge_ends_with?: InputMaybe; + gauge_ends_with_nocase?: InputMaybe; + gauge_gt?: InputMaybe; + gauge_gte?: InputMaybe; + gauge_in?: InputMaybe>; + gauge_lt?: InputMaybe; + gauge_lte?: InputMaybe; + gauge_not?: InputMaybe; + gauge_not_contains?: InputMaybe; + gauge_not_contains_nocase?: InputMaybe; + gauge_not_ends_with?: InputMaybe; + gauge_not_ends_with_nocase?: InputMaybe; + gauge_not_in?: InputMaybe>; + gauge_not_starts_with?: InputMaybe; + gauge_not_starts_with_nocase?: InputMaybe; + gauge_starts_with?: InputMaybe; + gauge_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + isKilled?: InputMaybe; + isKilled_in?: InputMaybe>; + isKilled_not?: InputMaybe; + isKilled_not_in?: InputMaybe>; + or?: InputMaybe>>; + recipient?: InputMaybe; + recipient_contains?: InputMaybe; + recipient_gt?: InputMaybe; + recipient_gte?: InputMaybe; + recipient_in?: InputMaybe>; + recipient_lt?: InputMaybe; + recipient_lte?: InputMaybe; + recipient_not?: InputMaybe; + recipient_not_contains?: InputMaybe; + recipient_not_in?: InputMaybe>; + relativeWeightCap?: InputMaybe; + relativeWeightCap_gt?: InputMaybe; + relativeWeightCap_gte?: InputMaybe; + relativeWeightCap_in?: InputMaybe>; + relativeWeightCap_lt?: InputMaybe; + relativeWeightCap_lte?: InputMaybe; + relativeWeightCap_not?: InputMaybe; + relativeWeightCap_not_in?: InputMaybe>; +}; + +export enum SingleRecipientGauge_OrderBy { + factory = 'factory', + factory__id = 'factory__id', + factory__numGauges = 'factory__numGauges', + gauge = 'gauge', + gauge__addedTimestamp = 'gauge__addedTimestamp', + gauge__address = 'gauge__address', + gauge__id = 'gauge__id', + id = 'id', + isKilled = 'isKilled', + recipient = 'recipient', + relativeWeightCap = 'relativeWeightCap' +} + export type Subscription = { __typename?: 'Subscription'; /** Access to subgraph metadata */ @@ -1302,6 +1752,8 @@ export type Subscription = { gauge?: Maybe; gaugeFactories: Array; gaugeFactory?: Maybe; + gaugeInjector?: Maybe; + gaugeInjectors: Array; gaugeShare?: Maybe; gaugeShares: Array; gaugeType?: Maybe; @@ -1311,12 +1763,18 @@ export type Subscription = { gauges: Array; liquidityGauge?: Maybe; liquidityGauges: Array; + lockSnapshot?: Maybe; + lockSnapshots: Array; + omniVotingEscrowLock?: Maybe; + omniVotingEscrowLocks: Array; pool?: Maybe; pools: Array; rewardToken?: Maybe; rewardTokens: Array; rootGauge?: Maybe; rootGauges: Array; + singleRecipientGauge?: Maybe; + singleRecipientGauges: Array; user?: Maybe; users: Array; votingEscrow?: Maybe; @@ -1356,6 +1814,24 @@ export type SubscriptionGaugeFactoryArgs = { }; +export type SubscriptionGaugeInjectorArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionGaugeInjectorsArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type SubscriptionGaugeShareArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -1439,6 +1915,42 @@ export type SubscriptionLiquidityGaugesArgs = { }; +export type SubscriptionLockSnapshotArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionLockSnapshotsArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + +export type SubscriptionOmniVotingEscrowLockArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionOmniVotingEscrowLocksArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type SubscriptionPoolArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -1493,6 +2005,24 @@ export type SubscriptionRootGaugesArgs = { }; +export type SubscriptionSingleRecipientGaugeArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionSingleRecipientGaugesArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type SubscriptionUserArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -1554,6 +2084,8 @@ export type User = { gaugeVotes?: Maybe>; /** User address */ id: Scalars['ID']; + /** List of omni locks the user created */ + omniVotingLocks?: Maybe>; /** List of locks the user created */ votingLocks?: Maybe>; }; @@ -1577,6 +2109,15 @@ export type UserGaugeVotesArgs = { }; +export type UserOmniVotingLocksArgs = { + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; +}; + + export type UserVotingLocksArgs = { first?: InputMaybe; orderBy?: InputMaybe; @@ -1599,6 +2140,7 @@ export type User_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; + omniVotingLocks_?: InputMaybe; or?: InputMaybe>>; votingLocks_?: InputMaybe; }; @@ -1607,6 +2149,7 @@ export enum User_OrderBy { gaugeShares = 'gaugeShares', gaugeVotes = 'gaugeVotes', id = 'id', + omniVotingLocks = 'omniVotingLocks', votingLocks = 'votingLocks' } @@ -1616,8 +2159,10 @@ export type VotingEscrow = { id: Scalars['ID']; /** List of veBAL locks created */ locks?: Maybe>; - /** Amount of B-80BAL-20WETH BPT locked */ - stakedSupply: Scalars['BigDecimal']; + /** List of veBAL locks created */ + omniLocks?: Maybe>; + /** Amount of B-80BAL-20WETH BPT locked, only applies on mainnet */ + stakedSupply?: Maybe; }; @@ -1629,14 +2174,30 @@ export type VotingEscrowLocksArgs = { where?: InputMaybe; }; + +export type VotingEscrowOmniLocksArgs = { + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; +}; + export type VotingEscrowLock = { __typename?: 'VotingEscrowLock'; + /** veBAL balance at the moment user locks */ + bias: Scalars['BigDecimal']; /** Equal to: - */ id: Scalars['ID']; /** Amount of B-80BAL-20WETH BPT the user has locked */ lockedBalance: Scalars['BigDecimal']; + /** veBAL decay rate (per second) */ + slope: Scalars['BigDecimal']; + /** Timestamp at which the lock was created [seconds] */ + timestamp: Scalars['Int']; /** Timestamp at which B-80BAL-20WETH BPT can be unlocked by user [seconds] */ - unlockTime?: Maybe; + unlockTime: Scalars['BigInt']; + /** Timestamp at which the lcok was created [seconds]. Same as timestamp */ updatedAt: Scalars['Int']; /** Reference to User entity */ user: User; @@ -1648,6 +2209,14 @@ export type VotingEscrowLock_Filter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; and?: InputMaybe>>; + bias?: InputMaybe; + bias_gt?: InputMaybe; + bias_gte?: InputMaybe; + bias_in?: InputMaybe>; + bias_lt?: InputMaybe; + bias_lte?: InputMaybe; + bias_not?: InputMaybe; + bias_not_in?: InputMaybe>; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -1665,6 +2234,22 @@ export type VotingEscrowLock_Filter = { lockedBalance_not?: InputMaybe; lockedBalance_not_in?: InputMaybe>; or?: InputMaybe>>; + slope?: InputMaybe; + slope_gt?: InputMaybe; + slope_gte?: InputMaybe; + slope_in?: InputMaybe>; + slope_lt?: InputMaybe; + slope_lte?: InputMaybe; + slope_not?: InputMaybe; + slope_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; unlockTime?: InputMaybe; unlockTime_gt?: InputMaybe; unlockTime_gte?: InputMaybe; @@ -1726,8 +2311,11 @@ export type VotingEscrowLock_Filter = { }; export enum VotingEscrowLock_OrderBy { + bias = 'bias', id = 'id', lockedBalance = 'lockedBalance', + slope = 'slope', + timestamp = 'timestamp', unlockTime = 'unlockTime', updatedAt = 'updatedAt', user = 'user', @@ -1750,6 +2338,7 @@ export type VotingEscrow_Filter = { id_not?: InputMaybe; id_not_in?: InputMaybe>; locks_?: InputMaybe; + omniLocks_?: InputMaybe; or?: InputMaybe>>; stakedSupply?: InputMaybe; stakedSupply_gt?: InputMaybe; @@ -1764,6 +2353,7 @@ export type VotingEscrow_Filter = { export enum VotingEscrow_OrderBy { id = 'id', locks = 'locks', + omniLocks = 'omniLocks', stakedSupply = 'stakedSupply' } @@ -1773,6 +2363,8 @@ export type _Block_ = { hash?: Maybe; /** The block number */ number: Scalars['Int']; + /** The hash of the parent block */ + parentHash?: Maybe; /** Integer representation of the timestamp stored in blocks for the chain */ timestamp?: Maybe; }; diff --git a/balancer-js/src/modules/subgraph/generated/balancer-subgraph-schema.graphql b/balancer-js/src/modules/subgraph/generated/balancer-subgraph-schema.graphql index 65662aee4..52f2f2542 100644 --- a/balancer-js/src/modules/subgraph/generated/balancer-subgraph-schema.graphql +++ b/balancer-js/src/modules/subgraph/generated/balancer-subgraph-schema.graphql @@ -11,6 +11,11 @@ directive @entity on OBJECT """Defined a Subgraph ID for an object type""" directive @subgraphId(id: String!) on OBJECT +enum Aggregation_interval { + day + hour +} + type AmpUpdate { endAmp: BigInt! endTimestamp: BigInt! @@ -118,11 +123,15 @@ enum AmpUpdate_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -139,6 +148,8 @@ enum AmpUpdate_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -146,7 +157,11 @@ enum AmpUpdate_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -168,7 +183,10 @@ type Balancer { id: ID! poolCount: Int! pools(first: Int = 100, orderBy: Pool_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: Pool_filter): [Pool!] + protocolFeesCollector: Bytes + snapshots(first: Int = 100, orderBy: BalancerSnapshot_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: BalancerSnapshot_filter): [BalancerSnapshot!] totalLiquidity: BigDecimal! + totalProtocolFee: BigDecimal totalSwapCount: BigInt! totalSwapFee: BigDecimal! totalSwapVolume: BigDecimal! @@ -179,6 +197,7 @@ type BalancerSnapshot { poolCount: Int! timestamp: Int! totalLiquidity: BigDecimal! + totalProtocolFee: BigDecimal totalSwapCount: BigInt! totalSwapFee: BigDecimal! totalSwapVolume: BigDecimal! @@ -222,6 +241,14 @@ input BalancerSnapshot_filter { totalLiquidity_lte: BigDecimal totalLiquidity_not: BigDecimal totalLiquidity_not_in: [BigDecimal!] + totalProtocolFee: BigDecimal + totalProtocolFee_gt: BigDecimal + totalProtocolFee_gte: BigDecimal + totalProtocolFee_in: [BigDecimal!] + totalProtocolFee_lt: BigDecimal + totalProtocolFee_lte: BigDecimal + totalProtocolFee_not: BigDecimal + totalProtocolFee_not_in: [BigDecimal!] totalSwapCount: BigInt totalSwapCount_gt: BigInt totalSwapCount_gte: BigInt @@ -274,13 +301,16 @@ enum BalancerSnapshot_orderBy { poolCount timestamp totalLiquidity + totalProtocolFee totalSwapCount totalSwapFee totalSwapVolume vault vault__id vault__poolCount + vault__protocolFeesCollector vault__totalLiquidity + vault__totalProtocolFee vault__totalSwapCount vault__totalSwapFee vault__totalSwapVolume @@ -308,6 +338,17 @@ input Balancer_filter { poolCount_not: Int poolCount_not_in: [Int!] pools_: Pool_filter + protocolFeesCollector: Bytes + protocolFeesCollector_contains: Bytes + protocolFeesCollector_gt: Bytes + protocolFeesCollector_gte: Bytes + protocolFeesCollector_in: [Bytes!] + protocolFeesCollector_lt: Bytes + protocolFeesCollector_lte: Bytes + protocolFeesCollector_not: Bytes + protocolFeesCollector_not_contains: Bytes + protocolFeesCollector_not_in: [Bytes!] + snapshots_: BalancerSnapshot_filter totalLiquidity: BigDecimal totalLiquidity_gt: BigDecimal totalLiquidity_gte: BigDecimal @@ -316,6 +357,14 @@ input Balancer_filter { totalLiquidity_lte: BigDecimal totalLiquidity_not: BigDecimal totalLiquidity_not_in: [BigDecimal!] + totalProtocolFee: BigDecimal + totalProtocolFee_gt: BigDecimal + totalProtocolFee_gte: BigDecimal + totalProtocolFee_in: [BigDecimal!] + totalProtocolFee_lt: BigDecimal + totalProtocolFee_lte: BigDecimal + totalProtocolFee_not: BigDecimal + totalProtocolFee_not_in: [BigDecimal!] totalSwapCount: BigInt totalSwapCount_gt: BigInt totalSwapCount_gte: BigInt @@ -346,7 +395,10 @@ enum Balancer_orderBy { id poolCount pools + protocolFeesCollector + snapshots totalLiquidity + totalProtocolFee totalSwapCount totalSwapFee totalSwapVolume @@ -368,6 +420,250 @@ input Block_height { scalar Bytes +type CircuitBreaker { + bptPrice: BigDecimal! + id: ID! + lowerBoundPercentage: BigDecimal! + pool: Pool! + token: PoolToken! + upperBoundPercentage: BigDecimal! +} + +input CircuitBreaker_filter { + """Filter for the block changed event.""" + _change_block: BlockChangedFilter + and: [CircuitBreaker_filter] + bptPrice: BigDecimal + bptPrice_gt: BigDecimal + bptPrice_gte: BigDecimal + bptPrice_in: [BigDecimal!] + bptPrice_lt: BigDecimal + bptPrice_lte: BigDecimal + bptPrice_not: BigDecimal + bptPrice_not_in: [BigDecimal!] + id: ID + id_gt: ID + id_gte: ID + id_in: [ID!] + id_lt: ID + id_lte: ID + id_not: ID + id_not_in: [ID!] + lowerBoundPercentage: BigDecimal + lowerBoundPercentage_gt: BigDecimal + lowerBoundPercentage_gte: BigDecimal + lowerBoundPercentage_in: [BigDecimal!] + lowerBoundPercentage_lt: BigDecimal + lowerBoundPercentage_lte: BigDecimal + lowerBoundPercentage_not: BigDecimal + lowerBoundPercentage_not_in: [BigDecimal!] + or: [CircuitBreaker_filter] + pool: String + pool_: Pool_filter + pool_contains: String + pool_contains_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_gt: String + pool_gte: String + pool_in: [String!] + pool_lt: String + pool_lte: String + pool_not: String + pool_not_contains: String + pool_not_contains_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_not_in: [String!] + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_starts_with: String + pool_starts_with_nocase: String + token: String + token_: PoolToken_filter + token_contains: String + token_contains_nocase: String + token_ends_with: String + token_ends_with_nocase: String + token_gt: String + token_gte: String + token_in: [String!] + token_lt: String + token_lte: String + token_not: String + token_not_contains: String + token_not_contains_nocase: String + token_not_ends_with: String + token_not_ends_with_nocase: String + token_not_in: [String!] + token_not_starts_with: String + token_not_starts_with_nocase: String + token_starts_with: String + token_starts_with_nocase: String + upperBoundPercentage: BigDecimal + upperBoundPercentage_gt: BigDecimal + upperBoundPercentage_gte: BigDecimal + upperBoundPercentage_in: [BigDecimal!] + upperBoundPercentage_lt: BigDecimal + upperBoundPercentage_lte: BigDecimal + upperBoundPercentage_not: BigDecimal + upperBoundPercentage_not_in: [BigDecimal!] +} + +enum CircuitBreaker_orderBy { + bptPrice + id + lowerBoundPercentage + pool + pool__address + pool__alpha + pool__amp + pool__baseToken + pool__beta + pool__c + pool__createTime + pool__dSq + pool__delta + pool__epsilon + pool__expiryTime + pool__factory + pool__holdersCount + pool__id + pool__isInRecoveryMode + pool__isPaused + pool__joinExitEnabled + pool__lambda + pool__lastJoinExitAmp + pool__lastPostJoinExitInvariant + pool__lowerTarget + pool__mainIndex + pool__managementAumFee + pool__managementFee + pool__mustAllowlistLPs + pool__name + pool__oracleEnabled + pool__owner + pool__poolType + pool__poolTypeVersion + pool__principalToken + pool__protocolAumFeeCache + pool__protocolId + pool__protocolSwapFeeCache + pool__protocolYieldFeeCache + pool__root3Alpha + pool__s + pool__sqrtAlpha + pool__sqrtBeta + pool__strategyType + pool__swapEnabled + pool__swapEnabledCurationSignal + pool__swapEnabledInternal + pool__swapFee + pool__swapsCount + pool__symbol + pool__tauAlphaX + pool__tauAlphaY + pool__tauBetaX + pool__tauBetaY + pool__totalAumFeeCollectedInBPT + pool__totalLiquidity + pool__totalLiquiditySansBPT + pool__totalProtocolFee + pool__totalProtocolFeePaidInBPT + pool__totalShares + pool__totalSwapFee + pool__totalSwapVolume + pool__totalWeight + pool__tx + pool__u + pool__unitSeconds + pool__upperTarget + pool__v + pool__w + pool__wrappedIndex + pool__z + token + token__address + token__assetManager + token__balance + token__cashBalance + token__decimals + token__id + token__index + token__isExemptFromYieldProtocolFee + token__managedBalance + token__name + token__oldPriceRate + token__paidProtocolFees + token__priceRate + token__symbol + token__weight + upperBoundPercentage +} + +type FXOracle { + decimals: Int + divisor: String + id: ID! + tokens: [Bytes!]! +} + +input FXOracle_filter { + """Filter for the block changed event.""" + _change_block: BlockChangedFilter + and: [FXOracle_filter] + decimals: Int + decimals_gt: Int + decimals_gte: Int + decimals_in: [Int!] + decimals_lt: Int + decimals_lte: Int + decimals_not: Int + decimals_not_in: [Int!] + divisor: String + divisor_contains: String + divisor_contains_nocase: String + divisor_ends_with: String + divisor_ends_with_nocase: String + divisor_gt: String + divisor_gte: String + divisor_in: [String!] + divisor_lt: String + divisor_lte: String + divisor_not: String + divisor_not_contains: String + divisor_not_contains_nocase: String + divisor_not_ends_with: String + divisor_not_ends_with_nocase: String + divisor_not_in: [String!] + divisor_not_starts_with: String + divisor_not_starts_with_nocase: String + divisor_starts_with: String + divisor_starts_with_nocase: String + id: ID + id_gt: ID + id_gte: ID + id_in: [ID!] + id_lt: ID + id_lte: ID + id_not: ID + id_not_in: [ID!] + or: [FXOracle_filter] + tokens: [Bytes!] + tokens_contains: [Bytes!] + tokens_contains_nocase: [Bytes!] + tokens_not: [Bytes!] + tokens_not_contains: [Bytes!] + tokens_not_contains_nocase: [Bytes!] +} + +enum FXOracle_orderBy { + decimals + divisor + id + tokens +} + type GradualWeightUpdate { endTimestamp: BigInt! endWeights: [BigInt!]! @@ -471,11 +767,15 @@ enum GradualWeightUpdate_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -492,6 +792,8 @@ enum GradualWeightUpdate_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -499,7 +801,11 @@ enum GradualWeightUpdate_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -517,6 +823,12 @@ enum GradualWeightUpdate_orderBy { startWeights } +""" +8 bytes signed integer + +""" +scalar Int8 + enum InvestType { Exit Join @@ -524,6 +836,7 @@ enum InvestType { type JoinExit { amounts: [BigDecimal!]! + block: BigInt id: ID! pool: Pool! sender: Bytes! @@ -544,6 +857,14 @@ input JoinExit_filter { amounts_not_contains: [BigDecimal!] amounts_not_contains_nocase: [BigDecimal!] and: [JoinExit_filter] + block: BigInt + block_gt: BigInt + block_gte: BigInt + block_in: [BigInt!] + block_lt: BigInt + block_lte: BigInt + block_not: BigInt + block_not_in: [BigInt!] id: ID id_gt: ID id_gte: ID @@ -639,6 +960,7 @@ input JoinExit_filter { enum JoinExit_orderBy { amounts + block id pool pool__address @@ -657,11 +979,15 @@ enum JoinExit_orderBy { pool__id pool__isInRecoveryMode pool__isPaused + pool__joinExitEnabled pool__lambda + pool__lastJoinExitAmp pool__lastPostJoinExitInvariant pool__lowerTarget pool__mainIndex + pool__managementAumFee pool__managementFee + pool__mustAllowlistLPs pool__name pool__oracleEnabled pool__owner @@ -678,6 +1004,8 @@ enum JoinExit_orderBy { pool__sqrtBeta pool__strategyType pool__swapEnabled + pool__swapEnabledCurationSignal + pool__swapEnabledInternal pool__swapFee pool__swapsCount pool__symbol @@ -685,7 +1013,11 @@ enum JoinExit_orderBy { pool__tauAlphaY pool__tauBetaX pool__tauBetaY + pool__totalAumFeeCollectedInBPT pool__totalLiquidity + pool__totalLiquiditySansBPT + pool__totalProtocolFee + pool__totalProtocolFeePaidInBPT pool__totalShares pool__totalSwapFee pool__totalSwapVolume @@ -809,11 +1141,15 @@ enum LatestPrice_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -830,6 +1166,8 @@ enum LatestPrice_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -837,7 +1175,11 @@ enum LatestPrice_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -943,6 +1285,7 @@ enum ManagementOperation_orderBy { poolTokenId__managedBalance poolTokenId__name poolTokenId__oldPriceRate + poolTokenId__paidProtocolFees poolTokenId__priceRate poolTokenId__symbol poolTokenId__weight @@ -966,9 +1309,11 @@ type Pool { address: Bytes! alpha: BigDecimal amp: BigInt + ampUpdates(first: Int = 100, orderBy: AmpUpdate_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: AmpUpdate_filter): [AmpUpdate!] baseToken: Bytes beta: BigDecimal c: BigDecimal + circuitBreakers(first: Int = 100, orderBy: CircuitBreaker_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: CircuitBreaker_filter): [CircuitBreaker!] createTime: Int! dSq: BigDecimal delta: BigDecimal @@ -980,11 +1325,17 @@ type Pool { id: ID! isInRecoveryMode: Boolean isPaused: Boolean + joinExitEnabled: Boolean + joinsExits(first: Int = 100, orderBy: JoinExit_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: JoinExit_filter): [JoinExit!] lambda: BigDecimal + lastJoinExitAmp: BigInt lastPostJoinExitInvariant: BigDecimal + latestAmpUpdate: AmpUpdate lowerTarget: BigDecimal mainIndex: Int + managementAumFee: BigDecimal managementFee: BigDecimal + mustAllowlistLPs: Boolean name: String oracleEnabled: Boolean! owner: Bytes @@ -1004,7 +1355,19 @@ type Pool { sqrtAlpha: BigDecimal sqrtBeta: BigDecimal strategyType: Int! + + """ + Indicates if a pool can be swapped against. Combines multiple sources, including offchain curation + """ swapEnabled: Boolean! + + """External indication from an offchain permissioned actor""" + swapEnabledCurationSignal: Boolean + + """ + The native swapEnabled boolean. internal to the pool. Only applies to Gyro, LBPs and InvestmentPools + """ + swapEnabledInternal: Boolean swapFee: BigDecimal! swaps(first: Int = 100, orderBy: Swap_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: Swap_filter): [Swap!] swapsCount: BigInt! @@ -1015,7 +1378,11 @@ type Pool { tauBetaY: BigDecimal tokens(first: Int = 100, orderBy: PoolToken_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: PoolToken_filter): [PoolToken!] tokensList: [Bytes!]! + totalAumFeeCollectedInBPT: BigDecimal totalLiquidity: BigDecimal! + totalLiquiditySansBPT: BigDecimal + totalProtocolFee: BigDecimal + totalProtocolFeePaidInBPT: BigDecimal totalShares: BigDecimal! totalSwapFee: BigDecimal! totalSwapVolume: BigDecimal! @@ -1092,11 +1459,15 @@ enum PoolContract_orderBy { pool__id pool__isInRecoveryMode pool__isPaused + pool__joinExitEnabled pool__lambda + pool__lastJoinExitAmp pool__lastPostJoinExitInvariant pool__lowerTarget pool__mainIndex + pool__managementAumFee pool__managementFee + pool__mustAllowlistLPs pool__name pool__oracleEnabled pool__owner @@ -1113,6 +1484,8 @@ enum PoolContract_orderBy { pool__sqrtBeta pool__strategyType pool__swapEnabled + pool__swapEnabledCurationSignal + pool__swapEnabledInternal pool__swapFee pool__swapsCount pool__symbol @@ -1120,7 +1493,11 @@ enum PoolContract_orderBy { pool__tauAlphaY pool__tauBetaX pool__tauBetaY + pool__totalAumFeeCollectedInBPT pool__totalLiquidity + pool__totalLiquiditySansBPT + pool__totalProtocolFee + pool__totalProtocolFeePaidInBPT pool__totalShares pool__totalSwapFee pool__totalSwapVolume @@ -1243,11 +1620,15 @@ enum PoolHistoricalLiquidity_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -1264,6 +1645,8 @@ enum PoolHistoricalLiquidity_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -1271,7 +1654,11 @@ enum PoolHistoricalLiquidity_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -1382,11 +1769,15 @@ enum PoolShare_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -1403,6 +1794,8 @@ enum PoolShare_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -1410,7 +1803,11 @@ enum PoolShare_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -1433,6 +1830,7 @@ type PoolSnapshot { id: ID! liquidity: BigDecimal! pool: Pool! + protocolFee: BigDecimal swapFees: BigDecimal! swapVolume: BigDecimal! swapsCount: BigInt! @@ -1496,6 +1894,14 @@ input PoolSnapshot_filter { pool_not_starts_with_nocase: String pool_starts_with: String pool_starts_with_nocase: String + protocolFee: BigDecimal + protocolFee_gt: BigDecimal + protocolFee_gte: BigDecimal + protocolFee_in: [BigDecimal!] + protocolFee_lt: BigDecimal + protocolFee_lte: BigDecimal + protocolFee_not: BigDecimal + protocolFee_not_in: [BigDecimal!] swapFees: BigDecimal swapFees_gt: BigDecimal swapFees_gte: BigDecimal @@ -1560,11 +1966,15 @@ enum PoolSnapshot_orderBy { pool__id pool__isInRecoveryMode pool__isPaused + pool__joinExitEnabled pool__lambda + pool__lastJoinExitAmp pool__lastPostJoinExitInvariant pool__lowerTarget pool__mainIndex + pool__managementAumFee pool__managementFee + pool__mustAllowlistLPs pool__name pool__oracleEnabled pool__owner @@ -1581,6 +1991,8 @@ enum PoolSnapshot_orderBy { pool__sqrtBeta pool__strategyType pool__swapEnabled + pool__swapEnabledCurationSignal + pool__swapEnabledInternal pool__swapFee pool__swapsCount pool__symbol @@ -1588,7 +2000,11 @@ enum PoolSnapshot_orderBy { pool__tauAlphaY pool__tauBetaX pool__tauBetaY + pool__totalAumFeeCollectedInBPT pool__totalLiquidity + pool__totalLiquiditySansBPT + pool__totalProtocolFee + pool__totalProtocolFeePaidInBPT pool__totalShares pool__totalSwapFee pool__totalSwapVolume @@ -1601,6 +2017,7 @@ enum PoolSnapshot_orderBy { pool__w pool__wrappedIndex pool__z + protocolFee swapFees swapVolume swapsCount @@ -1613,6 +2030,7 @@ type PoolToken { assetManager: Bytes! balance: BigDecimal! cashBalance: BigDecimal! + circuitBreaker: CircuitBreaker decimals: Int! id: ID! index: Int @@ -1621,6 +2039,7 @@ type PoolToken { managements(first: Int = 100, orderBy: ManagementOperation_orderBy, orderDirection: OrderDirection, skip: Int = 0, where: ManagementOperation_filter): [ManagementOperation!] name: String! oldPriceRate: BigDecimal + paidProtocolFees: BigDecimal poolId: Pool priceRate: BigDecimal! symbol: String! @@ -1678,6 +2097,27 @@ input PoolToken_filter { cashBalance_lte: BigDecimal cashBalance_not: BigDecimal cashBalance_not_in: [BigDecimal!] + circuitBreaker: String + circuitBreaker_: CircuitBreaker_filter + circuitBreaker_contains: String + circuitBreaker_contains_nocase: String + circuitBreaker_ends_with: String + circuitBreaker_ends_with_nocase: String + circuitBreaker_gt: String + circuitBreaker_gte: String + circuitBreaker_in: [String!] + circuitBreaker_lt: String + circuitBreaker_lte: String + circuitBreaker_not: String + circuitBreaker_not_contains: String + circuitBreaker_not_contains_nocase: String + circuitBreaker_not_ends_with: String + circuitBreaker_not_ends_with_nocase: String + circuitBreaker_not_in: [String!] + circuitBreaker_not_starts_with: String + circuitBreaker_not_starts_with_nocase: String + circuitBreaker_starts_with: String + circuitBreaker_starts_with_nocase: String decimals: Int decimals_gt: Int decimals_gte: Int @@ -1744,6 +2184,14 @@ input PoolToken_filter { oldPriceRate_not: BigDecimal oldPriceRate_not_in: [BigDecimal!] or: [PoolToken_filter] + paidProtocolFees: BigDecimal + paidProtocolFees_gt: BigDecimal + paidProtocolFees_gte: BigDecimal + paidProtocolFees_in: [BigDecimal!] + paidProtocolFees_lt: BigDecimal + paidProtocolFees_lte: BigDecimal + paidProtocolFees_not: BigDecimal + paidProtocolFees_not_in: [BigDecimal!] poolId: String poolId_: Pool_filter poolId_contains: String @@ -1829,6 +2277,11 @@ enum PoolToken_orderBy { assetManager balance cashBalance + circuitBreaker + circuitBreaker__bptPrice + circuitBreaker__id + circuitBreaker__lowerBoundPercentage + circuitBreaker__upperBoundPercentage decimals id index @@ -1837,6 +2290,7 @@ enum PoolToken_orderBy { managements name oldPriceRate + paidProtocolFees poolId poolId__address poolId__alpha @@ -1854,11 +2308,15 @@ enum PoolToken_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -1875,6 +2333,8 @@ enum PoolToken_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -1882,7 +2342,11 @@ enum PoolToken_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -1900,6 +2364,7 @@ enum PoolToken_orderBy { token token__address token__decimals + token__fxOracleDecimals token__id token__latestFXPrice token__latestUSDPrice @@ -1936,6 +2401,7 @@ input Pool_filter { alpha_not: BigDecimal alpha_not_in: [BigDecimal!] amp: BigInt + ampUpdates_: AmpUpdate_filter amp_gt: BigInt amp_gte: BigInt amp_in: [BigInt!] @@ -1970,6 +2436,7 @@ input Pool_filter { c_lte: BigDecimal c_not: BigDecimal c_not_in: [BigDecimal!] + circuitBreakers_: CircuitBreaker_filter createTime: Int createTime_gt: Int createTime_gte: Int @@ -2045,6 +2512,11 @@ input Pool_filter { isPaused_in: [Boolean!] isPaused_not: Boolean isPaused_not_in: [Boolean!] + joinExitEnabled: Boolean + joinExitEnabled_in: [Boolean!] + joinExitEnabled_not: Boolean + joinExitEnabled_not_in: [Boolean!] + joinsExits_: JoinExit_filter lambda: BigDecimal lambda_gt: BigDecimal lambda_gte: BigDecimal @@ -2053,6 +2525,14 @@ input Pool_filter { lambda_lte: BigDecimal lambda_not: BigDecimal lambda_not_in: [BigDecimal!] + lastJoinExitAmp: BigInt + lastJoinExitAmp_gt: BigInt + lastJoinExitAmp_gte: BigInt + lastJoinExitAmp_in: [BigInt!] + lastJoinExitAmp_lt: BigInt + lastJoinExitAmp_lte: BigInt + lastJoinExitAmp_not: BigInt + lastJoinExitAmp_not_in: [BigInt!] lastPostJoinExitInvariant: BigDecimal lastPostJoinExitInvariant_gt: BigDecimal lastPostJoinExitInvariant_gte: BigDecimal @@ -2061,6 +2541,27 @@ input Pool_filter { lastPostJoinExitInvariant_lte: BigDecimal lastPostJoinExitInvariant_not: BigDecimal lastPostJoinExitInvariant_not_in: [BigDecimal!] + latestAmpUpdate: String + latestAmpUpdate_: AmpUpdate_filter + latestAmpUpdate_contains: String + latestAmpUpdate_contains_nocase: String + latestAmpUpdate_ends_with: String + latestAmpUpdate_ends_with_nocase: String + latestAmpUpdate_gt: String + latestAmpUpdate_gte: String + latestAmpUpdate_in: [String!] + latestAmpUpdate_lt: String + latestAmpUpdate_lte: String + latestAmpUpdate_not: String + latestAmpUpdate_not_contains: String + latestAmpUpdate_not_contains_nocase: String + latestAmpUpdate_not_ends_with: String + latestAmpUpdate_not_ends_with_nocase: String + latestAmpUpdate_not_in: [String!] + latestAmpUpdate_not_starts_with: String + latestAmpUpdate_not_starts_with_nocase: String + latestAmpUpdate_starts_with: String + latestAmpUpdate_starts_with_nocase: String lowerTarget: BigDecimal lowerTarget_gt: BigDecimal lowerTarget_gte: BigDecimal @@ -2077,6 +2578,14 @@ input Pool_filter { mainIndex_lte: Int mainIndex_not: Int mainIndex_not_in: [Int!] + managementAumFee: BigDecimal + managementAumFee_gt: BigDecimal + managementAumFee_gte: BigDecimal + managementAumFee_in: [BigDecimal!] + managementAumFee_lt: BigDecimal + managementAumFee_lte: BigDecimal + managementAumFee_not: BigDecimal + managementAumFee_not_in: [BigDecimal!] managementFee: BigDecimal managementFee_gt: BigDecimal managementFee_gte: BigDecimal @@ -2085,6 +2594,10 @@ input Pool_filter { managementFee_lte: BigDecimal managementFee_not: BigDecimal managementFee_not_in: [BigDecimal!] + mustAllowlistLPs: Boolean + mustAllowlistLPs_in: [Boolean!] + mustAllowlistLPs_not: Boolean + mustAllowlistLPs_not_in: [Boolean!] name: String name_contains: String name_contains_nocase: String @@ -2255,6 +2768,14 @@ input Pool_filter { strategyType_not: Int strategyType_not_in: [Int!] swapEnabled: Boolean + swapEnabledCurationSignal: Boolean + swapEnabledCurationSignal_in: [Boolean!] + swapEnabledCurationSignal_not: Boolean + swapEnabledCurationSignal_not_in: [Boolean!] + swapEnabledInternal: Boolean + swapEnabledInternal_in: [Boolean!] + swapEnabledInternal_not: Boolean + swapEnabledInternal_not_in: [Boolean!] swapEnabled_in: [Boolean!] swapEnabled_not: Boolean swapEnabled_not_in: [Boolean!] @@ -2334,7 +2855,23 @@ input Pool_filter { tokensList_not_contains: [Bytes!] tokensList_not_contains_nocase: [Bytes!] tokens_: PoolToken_filter + totalAumFeeCollectedInBPT: BigDecimal + totalAumFeeCollectedInBPT_gt: BigDecimal + totalAumFeeCollectedInBPT_gte: BigDecimal + totalAumFeeCollectedInBPT_in: [BigDecimal!] + totalAumFeeCollectedInBPT_lt: BigDecimal + totalAumFeeCollectedInBPT_lte: BigDecimal + totalAumFeeCollectedInBPT_not: BigDecimal + totalAumFeeCollectedInBPT_not_in: [BigDecimal!] totalLiquidity: BigDecimal + totalLiquiditySansBPT: BigDecimal + totalLiquiditySansBPT_gt: BigDecimal + totalLiquiditySansBPT_gte: BigDecimal + totalLiquiditySansBPT_in: [BigDecimal!] + totalLiquiditySansBPT_lt: BigDecimal + totalLiquiditySansBPT_lte: BigDecimal + totalLiquiditySansBPT_not: BigDecimal + totalLiquiditySansBPT_not_in: [BigDecimal!] totalLiquidity_gt: BigDecimal totalLiquidity_gte: BigDecimal totalLiquidity_in: [BigDecimal!] @@ -2342,6 +2879,22 @@ input Pool_filter { totalLiquidity_lte: BigDecimal totalLiquidity_not: BigDecimal totalLiquidity_not_in: [BigDecimal!] + totalProtocolFee: BigDecimal + totalProtocolFeePaidInBPT: BigDecimal + totalProtocolFeePaidInBPT_gt: BigDecimal + totalProtocolFeePaidInBPT_gte: BigDecimal + totalProtocolFeePaidInBPT_in: [BigDecimal!] + totalProtocolFeePaidInBPT_lt: BigDecimal + totalProtocolFeePaidInBPT_lte: BigDecimal + totalProtocolFeePaidInBPT_not: BigDecimal + totalProtocolFeePaidInBPT_not_in: [BigDecimal!] + totalProtocolFee_gt: BigDecimal + totalProtocolFee_gte: BigDecimal + totalProtocolFee_in: [BigDecimal!] + totalProtocolFee_lt: BigDecimal + totalProtocolFee_lte: BigDecimal + totalProtocolFee_not: BigDecimal + totalProtocolFee_not_in: [BigDecimal!] totalShares: BigDecimal totalShares_gt: BigDecimal totalShares_gte: BigDecimal @@ -2468,9 +3021,11 @@ enum Pool_orderBy { address alpha amp + ampUpdates baseToken beta c + circuitBreakers createTime dSq delta @@ -2482,11 +3037,23 @@ enum Pool_orderBy { id isInRecoveryMode isPaused + joinExitEnabled + joinsExits lambda + lastJoinExitAmp lastPostJoinExitInvariant + latestAmpUpdate + latestAmpUpdate__endAmp + latestAmpUpdate__endTimestamp + latestAmpUpdate__id + latestAmpUpdate__scheduledTimestamp + latestAmpUpdate__startAmp + latestAmpUpdate__startTimestamp lowerTarget mainIndex + managementAumFee managementFee + mustAllowlistLPs name oracleEnabled owner @@ -2509,6 +3076,8 @@ enum Pool_orderBy { sqrtBeta strategyType swapEnabled + swapEnabledCurationSignal + swapEnabledInternal swapFee swaps swapsCount @@ -2519,7 +3088,11 @@ enum Pool_orderBy { tauBetaY tokens tokensList + totalAumFeeCollectedInBPT totalLiquidity + totalLiquiditySansBPT + totalProtocolFee + totalProtocolFeePaidInBPT totalShares totalSwapFee totalSwapVolume @@ -2532,7 +3105,9 @@ enum Pool_orderBy { vaultID vaultID__id vaultID__poolCount + vaultID__protocolFeesCollector vaultID__totalLiquidity + vaultID__totalProtocolFee vaultID__totalSwapCount vaultID__totalSwapFee vaultID__totalSwapVolume @@ -2675,11 +3250,15 @@ enum PriceRateProvider_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -2696,6 +3275,8 @@ enum PriceRateProvider_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -2703,7 +3284,11 @@ enum PriceRateProvider_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -2729,6 +3314,7 @@ enum PriceRateProvider_orderBy { token__managedBalance token__name token__oldPriceRate + token__paidProtocolFees token__priceRate token__symbol token__weight @@ -2866,6 +3452,62 @@ type Query { subgraphError: _SubgraphErrorPolicy_! = deny where: Balancer_filter ): [Balancer!]! + circuitBreaker( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): CircuitBreaker + circuitBreakers( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: CircuitBreaker_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: CircuitBreaker_filter + ): [CircuitBreaker!]! + fxoracle( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): FXOracle + fxoracles( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: FXOracle_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: FXOracle_filter + ): [FXOracle!]! gradualWeightUpdate( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -3543,6 +4185,62 @@ type Subscription { subgraphError: _SubgraphErrorPolicy_! = deny where: Balancer_filter ): [Balancer!]! + circuitBreaker( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): CircuitBreaker + circuitBreakers( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: CircuitBreaker_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: CircuitBreaker_filter + ): [CircuitBreaker!]! + fxoracle( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + id: ID! + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): FXOracle + fxoracles( + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + first: Int = 100 + orderBy: FXOracle_orderBy + orderDirection: OrderDirection + skip: Int = 0 + + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + where: FXOracle_filter + ): [FXOracle!]! gradualWeightUpdate( """ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. @@ -4134,6 +4832,7 @@ type Subscription { } type Swap { + block: BigInt caller: Bytes! id: ID! poolId: Pool! @@ -4256,11 +4955,15 @@ enum SwapFeeUpdate_orderBy { pool__id pool__isInRecoveryMode pool__isPaused + pool__joinExitEnabled pool__lambda + pool__lastJoinExitAmp pool__lastPostJoinExitInvariant pool__lowerTarget pool__mainIndex + pool__managementAumFee pool__managementFee + pool__mustAllowlistLPs pool__name pool__oracleEnabled pool__owner @@ -4277,6 +4980,8 @@ enum SwapFeeUpdate_orderBy { pool__sqrtBeta pool__strategyType pool__swapEnabled + pool__swapEnabledCurationSignal + pool__swapEnabledInternal pool__swapFee pool__swapsCount pool__symbol @@ -4284,7 +4989,11 @@ enum SwapFeeUpdate_orderBy { pool__tauAlphaY pool__tauBetaX pool__tauBetaY + pool__totalAumFeeCollectedInBPT pool__totalLiquidity + pool__totalLiquiditySansBPT + pool__totalProtocolFee + pool__totalProtocolFeePaidInBPT pool__totalShares pool__totalSwapFee pool__totalSwapVolume @@ -4306,6 +5015,14 @@ input Swap_filter { """Filter for the block changed event.""" _change_block: BlockChangedFilter and: [Swap_filter] + block: BigInt + block_gt: BigInt + block_gte: BigInt + block_in: [BigInt!] + block_lt: BigInt + block_lte: BigInt + block_not: BigInt + block_not_in: [BigInt!] caller: Bytes caller_contains: Bytes caller_gt: Bytes @@ -4472,6 +5189,7 @@ input Swap_filter { } enum Swap_orderBy { + block caller id poolId @@ -4491,11 +5209,15 @@ enum Swap_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -4512,6 +5234,8 @@ enum Swap_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -4519,7 +5243,11 @@ enum Swap_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -4545,9 +5273,16 @@ enum Swap_orderBy { valueUSD } +""" +A string representation of microseconds UNIX timestamp (16 digits) + +""" +scalar Timestamp + type Token { address: String! decimals: Int! + fxOracleDecimals: Int id: ID! latestFXPrice: BigDecimal latestPrice: LatestPrice @@ -4684,11 +5419,15 @@ enum TokenPrice_orderBy { poolId__id poolId__isInRecoveryMode poolId__isPaused + poolId__joinExitEnabled poolId__lambda + poolId__lastJoinExitAmp poolId__lastPostJoinExitInvariant poolId__lowerTarget poolId__mainIndex + poolId__managementAumFee poolId__managementFee + poolId__mustAllowlistLPs poolId__name poolId__oracleEnabled poolId__owner @@ -4705,6 +5444,8 @@ enum TokenPrice_orderBy { poolId__sqrtBeta poolId__strategyType poolId__swapEnabled + poolId__swapEnabledCurationSignal + poolId__swapEnabledInternal poolId__swapFee poolId__swapsCount poolId__symbol @@ -4712,7 +5453,11 @@ enum TokenPrice_orderBy { poolId__tauAlphaY poolId__tauBetaX poolId__tauBetaY + poolId__totalAumFeeCollectedInBPT poolId__totalLiquidity + poolId__totalLiquiditySansBPT + poolId__totalProtocolFee + poolId__totalProtocolFeePaidInBPT poolId__totalShares poolId__totalSwapFee poolId__totalSwapVolume @@ -4831,6 +5576,7 @@ enum TokenSnapshot_orderBy { token token__address token__decimals + token__fxOracleDecimals token__id token__latestFXPrice token__latestUSDPrice @@ -4881,6 +5627,14 @@ input Token_filter { decimals_lte: Int decimals_not: Int decimals_not_in: [Int!] + fxOracleDecimals: Int + fxOracleDecimals_gt: Int + fxOracleDecimals_gte: Int + fxOracleDecimals_in: [Int!] + fxOracleDecimals_lt: Int + fxOracleDecimals_lte: Int + fxOracleDecimals_not: Int + fxOracleDecimals_not_in: [Int!] id: ID id_gt: ID id_gte: ID @@ -5041,6 +5795,7 @@ input Token_filter { enum Token_orderBy { address decimals + fxOracleDecimals id latestFXPrice latestPrice @@ -5069,11 +5824,15 @@ enum Token_orderBy { pool__id pool__isInRecoveryMode pool__isPaused + pool__joinExitEnabled pool__lambda + pool__lastJoinExitAmp pool__lastPostJoinExitInvariant pool__lowerTarget pool__mainIndex + pool__managementAumFee pool__managementFee + pool__mustAllowlistLPs pool__name pool__oracleEnabled pool__owner @@ -5090,6 +5849,8 @@ enum Token_orderBy { pool__sqrtBeta pool__strategyType pool__swapEnabled + pool__swapEnabledCurationSignal + pool__swapEnabledInternal pool__swapFee pool__swapsCount pool__symbol @@ -5097,7 +5858,11 @@ enum Token_orderBy { pool__tauAlphaY pool__tauBetaX pool__tauBetaY + pool__totalAumFeeCollectedInBPT pool__totalLiquidity + pool__totalLiquiditySansBPT + pool__totalProtocolFee + pool__totalProtocolFeePaidInBPT pool__totalShares pool__totalSwapFee pool__totalSwapVolume @@ -5284,6 +6049,7 @@ enum TradePair_orderBy { token0 token0__address token0__decimals + token0__fxOracleDecimals token0__id token0__latestFXPrice token0__latestUSDPrice @@ -5298,6 +6064,7 @@ enum TradePair_orderBy { token1 token1__address token1__decimals + token1__fxOracleDecimals token1__id token1__latestFXPrice token1__latestUSDPrice @@ -5324,6 +6091,7 @@ type UserInternalBalance { balance: BigDecimal! id: ID! token: Bytes! + tokenInfo: Token userAddress: User } @@ -5349,6 +6117,27 @@ input UserInternalBalance_filter { id_not_in: [ID!] or: [UserInternalBalance_filter] token: Bytes + tokenInfo: String + tokenInfo_: Token_filter + tokenInfo_contains: String + tokenInfo_contains_nocase: String + tokenInfo_ends_with: String + tokenInfo_ends_with_nocase: String + tokenInfo_gt: String + tokenInfo_gte: String + tokenInfo_in: [String!] + tokenInfo_lt: String + tokenInfo_lte: String + tokenInfo_not: String + tokenInfo_not_contains: String + tokenInfo_not_contains_nocase: String + tokenInfo_not_ends_with: String + tokenInfo_not_ends_with_nocase: String + tokenInfo_not_in: [String!] + tokenInfo_not_starts_with: String + tokenInfo_not_starts_with_nocase: String + tokenInfo_starts_with: String + tokenInfo_starts_with_nocase: String token_contains: Bytes token_gt: Bytes token_gte: Bytes @@ -5385,6 +6174,21 @@ enum UserInternalBalance_orderBy { balance id token + tokenInfo + tokenInfo__address + tokenInfo__decimals + tokenInfo__fxOracleDecimals + tokenInfo__id + tokenInfo__latestFXPrice + tokenInfo__latestUSDPrice + tokenInfo__latestUSDPriceTimestamp + tokenInfo__name + tokenInfo__symbol + tokenInfo__totalBalanceNotional + tokenInfo__totalBalanceUSD + tokenInfo__totalSwapCount + tokenInfo__totalVolumeNotional + tokenInfo__totalVolumeUSD userAddress userAddress__id } @@ -5421,6 +6225,9 @@ type _Block_ { """The block number""" number: Int! + """The hash of the parent block""" + parentHash: Bytes + """Integer representation of the timestamp stored in blocks for the chain""" timestamp: Int } diff --git a/balancer-js/src/modules/subgraph/generated/balancer-subgraph-types.ts b/balancer-js/src/modules/subgraph/generated/balancer-subgraph-types.ts index 7787c788b..1249c1db8 100644 --- a/balancer-js/src/modules/subgraph/generated/balancer-subgraph-types.ts +++ b/balancer-js/src/modules/subgraph/generated/balancer-subgraph-types.ts @@ -16,8 +16,15 @@ export type Scalars = { BigDecimal: string; BigInt: string; Bytes: string; + Int8: any; + Timestamp: any; }; +export enum Aggregation_Interval { + Day = 'day', + Hour = 'hour' +} + export type AmpUpdate = { __typename?: 'AmpUpdate'; endAmp: Scalars['BigInt']; @@ -126,11 +133,15 @@ export enum AmpUpdate_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -147,6 +158,8 @@ export enum AmpUpdate_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -154,7 +167,11 @@ export enum AmpUpdate_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -177,7 +194,10 @@ export type Balancer = { id: Scalars['ID']; poolCount: Scalars['Int']; pools?: Maybe>; + protocolFeesCollector?: Maybe; + snapshots?: Maybe>; totalLiquidity: Scalars['BigDecimal']; + totalProtocolFee?: Maybe; totalSwapCount: Scalars['BigInt']; totalSwapFee: Scalars['BigDecimal']; totalSwapVolume: Scalars['BigDecimal']; @@ -192,12 +212,22 @@ export type BalancerPoolsArgs = { where?: InputMaybe; }; + +export type BalancerSnapshotsArgs = { + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; +}; + export type BalancerSnapshot = { __typename?: 'BalancerSnapshot'; id: Scalars['ID']; poolCount: Scalars['Int']; timestamp: Scalars['Int']; totalLiquidity: Scalars['BigDecimal']; + totalProtocolFee?: Maybe; totalSwapCount: Scalars['BigInt']; totalSwapFee: Scalars['BigDecimal']; totalSwapVolume: Scalars['BigDecimal']; @@ -241,6 +271,14 @@ export type BalancerSnapshot_Filter = { totalLiquidity_lte?: InputMaybe; totalLiquidity_not?: InputMaybe; totalLiquidity_not_in?: InputMaybe>; + totalProtocolFee?: InputMaybe; + totalProtocolFee_gt?: InputMaybe; + totalProtocolFee_gte?: InputMaybe; + totalProtocolFee_in?: InputMaybe>; + totalProtocolFee_lt?: InputMaybe; + totalProtocolFee_lte?: InputMaybe; + totalProtocolFee_not?: InputMaybe; + totalProtocolFee_not_in?: InputMaybe>; totalSwapCount?: InputMaybe; totalSwapCount_gt?: InputMaybe; totalSwapCount_gte?: InputMaybe; @@ -293,13 +331,16 @@ export enum BalancerSnapshot_OrderBy { PoolCount = 'poolCount', Timestamp = 'timestamp', TotalLiquidity = 'totalLiquidity', + TotalProtocolFee = 'totalProtocolFee', TotalSwapCount = 'totalSwapCount', TotalSwapFee = 'totalSwapFee', TotalSwapVolume = 'totalSwapVolume', Vault = 'vault', VaultId = 'vault__id', VaultPoolCount = 'vault__poolCount', + VaultProtocolFeesCollector = 'vault__protocolFeesCollector', VaultTotalLiquidity = 'vault__totalLiquidity', + VaultTotalProtocolFee = 'vault__totalProtocolFee', VaultTotalSwapCount = 'vault__totalSwapCount', VaultTotalSwapFee = 'vault__totalSwapFee', VaultTotalSwapVolume = 'vault__totalSwapVolume' @@ -327,6 +368,17 @@ export type Balancer_Filter = { poolCount_not?: InputMaybe; poolCount_not_in?: InputMaybe>; pools_?: InputMaybe; + protocolFeesCollector?: InputMaybe; + protocolFeesCollector_contains?: InputMaybe; + protocolFeesCollector_gt?: InputMaybe; + protocolFeesCollector_gte?: InputMaybe; + protocolFeesCollector_in?: InputMaybe>; + protocolFeesCollector_lt?: InputMaybe; + protocolFeesCollector_lte?: InputMaybe; + protocolFeesCollector_not?: InputMaybe; + protocolFeesCollector_not_contains?: InputMaybe; + protocolFeesCollector_not_in?: InputMaybe>; + snapshots_?: InputMaybe; totalLiquidity?: InputMaybe; totalLiquidity_gt?: InputMaybe; totalLiquidity_gte?: InputMaybe; @@ -335,6 +387,14 @@ export type Balancer_Filter = { totalLiquidity_lte?: InputMaybe; totalLiquidity_not?: InputMaybe; totalLiquidity_not_in?: InputMaybe>; + totalProtocolFee?: InputMaybe; + totalProtocolFee_gt?: InputMaybe; + totalProtocolFee_gte?: InputMaybe; + totalProtocolFee_in?: InputMaybe>; + totalProtocolFee_lt?: InputMaybe; + totalProtocolFee_lte?: InputMaybe; + totalProtocolFee_not?: InputMaybe; + totalProtocolFee_not_in?: InputMaybe>; totalSwapCount?: InputMaybe; totalSwapCount_gt?: InputMaybe; totalSwapCount_gte?: InputMaybe; @@ -365,7 +425,10 @@ export enum Balancer_OrderBy { Id = 'id', PoolCount = 'poolCount', Pools = 'pools', + ProtocolFeesCollector = 'protocolFeesCollector', + Snapshots = 'snapshots', TotalLiquidity = 'totalLiquidity', + TotalProtocolFee = 'totalProtocolFee', TotalSwapCount = 'totalSwapCount', TotalSwapFee = 'totalSwapFee', TotalSwapVolume = 'totalSwapVolume' @@ -381,6 +444,252 @@ export type Block_Height = { number_gte?: InputMaybe; }; +export type CircuitBreaker = { + __typename?: 'CircuitBreaker'; + bptPrice: Scalars['BigDecimal']; + id: Scalars['ID']; + lowerBoundPercentage: Scalars['BigDecimal']; + pool: Pool; + token: PoolToken; + upperBoundPercentage: Scalars['BigDecimal']; +}; + +export type CircuitBreaker_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + bptPrice?: InputMaybe; + bptPrice_gt?: InputMaybe; + bptPrice_gte?: InputMaybe; + bptPrice_in?: InputMaybe>; + bptPrice_lt?: InputMaybe; + bptPrice_lte?: InputMaybe; + bptPrice_not?: InputMaybe; + bptPrice_not_in?: InputMaybe>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + lowerBoundPercentage?: InputMaybe; + lowerBoundPercentage_gt?: InputMaybe; + lowerBoundPercentage_gte?: InputMaybe; + lowerBoundPercentage_in?: InputMaybe>; + lowerBoundPercentage_lt?: InputMaybe; + lowerBoundPercentage_lte?: InputMaybe; + lowerBoundPercentage_not?: InputMaybe; + lowerBoundPercentage_not_in?: InputMaybe>; + or?: InputMaybe>>; + pool?: InputMaybe; + pool_?: InputMaybe; + pool_contains?: InputMaybe; + pool_contains_nocase?: InputMaybe; + pool_ends_with?: InputMaybe; + pool_ends_with_nocase?: InputMaybe; + pool_gt?: InputMaybe; + pool_gte?: InputMaybe; + pool_in?: InputMaybe>; + pool_lt?: InputMaybe; + pool_lte?: InputMaybe; + pool_not?: InputMaybe; + pool_not_contains?: InputMaybe; + pool_not_contains_nocase?: InputMaybe; + pool_not_ends_with?: InputMaybe; + pool_not_ends_with_nocase?: InputMaybe; + pool_not_in?: InputMaybe>; + pool_not_starts_with?: InputMaybe; + pool_not_starts_with_nocase?: InputMaybe; + pool_starts_with?: InputMaybe; + pool_starts_with_nocase?: InputMaybe; + token?: InputMaybe; + token_?: InputMaybe; + token_contains?: InputMaybe; + token_contains_nocase?: InputMaybe; + token_ends_with?: InputMaybe; + token_ends_with_nocase?: InputMaybe; + token_gt?: InputMaybe; + token_gte?: InputMaybe; + token_in?: InputMaybe>; + token_lt?: InputMaybe; + token_lte?: InputMaybe; + token_not?: InputMaybe; + token_not_contains?: InputMaybe; + token_not_contains_nocase?: InputMaybe; + token_not_ends_with?: InputMaybe; + token_not_ends_with_nocase?: InputMaybe; + token_not_in?: InputMaybe>; + token_not_starts_with?: InputMaybe; + token_not_starts_with_nocase?: InputMaybe; + token_starts_with?: InputMaybe; + token_starts_with_nocase?: InputMaybe; + upperBoundPercentage?: InputMaybe; + upperBoundPercentage_gt?: InputMaybe; + upperBoundPercentage_gte?: InputMaybe; + upperBoundPercentage_in?: InputMaybe>; + upperBoundPercentage_lt?: InputMaybe; + upperBoundPercentage_lte?: InputMaybe; + upperBoundPercentage_not?: InputMaybe; + upperBoundPercentage_not_in?: InputMaybe>; +}; + +export enum CircuitBreaker_OrderBy { + BptPrice = 'bptPrice', + Id = 'id', + LowerBoundPercentage = 'lowerBoundPercentage', + Pool = 'pool', + PoolAddress = 'pool__address', + PoolAlpha = 'pool__alpha', + PoolAmp = 'pool__amp', + PoolBaseToken = 'pool__baseToken', + PoolBeta = 'pool__beta', + PoolC = 'pool__c', + PoolCreateTime = 'pool__createTime', + PoolDSq = 'pool__dSq', + PoolDelta = 'pool__delta', + PoolEpsilon = 'pool__epsilon', + PoolExpiryTime = 'pool__expiryTime', + PoolFactory = 'pool__factory', + PoolHoldersCount = 'pool__holdersCount', + PoolId = 'pool__id', + PoolIsInRecoveryMode = 'pool__isInRecoveryMode', + PoolIsPaused = 'pool__isPaused', + PoolJoinExitEnabled = 'pool__joinExitEnabled', + PoolLambda = 'pool__lambda', + PoolLastJoinExitAmp = 'pool__lastJoinExitAmp', + PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant', + PoolLowerTarget = 'pool__lowerTarget', + PoolMainIndex = 'pool__mainIndex', + PoolManagementAumFee = 'pool__managementAumFee', + PoolManagementFee = 'pool__managementFee', + PoolMustAllowlistLPs = 'pool__mustAllowlistLPs', + PoolName = 'pool__name', + PoolOracleEnabled = 'pool__oracleEnabled', + PoolOwner = 'pool__owner', + PoolPoolType = 'pool__poolType', + PoolPoolTypeVersion = 'pool__poolTypeVersion', + PoolPrincipalToken = 'pool__principalToken', + PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache', + PoolProtocolId = 'pool__protocolId', + PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache', + PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache', + PoolRoot3Alpha = 'pool__root3Alpha', + PoolS = 'pool__s', + PoolSqrtAlpha = 'pool__sqrtAlpha', + PoolSqrtBeta = 'pool__sqrtBeta', + PoolStrategyType = 'pool__strategyType', + PoolSwapEnabled = 'pool__swapEnabled', + PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal', + PoolSwapEnabledInternal = 'pool__swapEnabledInternal', + PoolSwapFee = 'pool__swapFee', + PoolSwapsCount = 'pool__swapsCount', + PoolSymbol = 'pool__symbol', + PoolTauAlphaX = 'pool__tauAlphaX', + PoolTauAlphaY = 'pool__tauAlphaY', + PoolTauBetaX = 'pool__tauBetaX', + PoolTauBetaY = 'pool__tauBetaY', + PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT', + PoolTotalLiquidity = 'pool__totalLiquidity', + PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT', + PoolTotalProtocolFee = 'pool__totalProtocolFee', + PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT', + PoolTotalShares = 'pool__totalShares', + PoolTotalSwapFee = 'pool__totalSwapFee', + PoolTotalSwapVolume = 'pool__totalSwapVolume', + PoolTotalWeight = 'pool__totalWeight', + PoolTx = 'pool__tx', + PoolU = 'pool__u', + PoolUnitSeconds = 'pool__unitSeconds', + PoolUpperTarget = 'pool__upperTarget', + PoolV = 'pool__v', + PoolW = 'pool__w', + PoolWrappedIndex = 'pool__wrappedIndex', + PoolZ = 'pool__z', + Token = 'token', + TokenAddress = 'token__address', + TokenAssetManager = 'token__assetManager', + TokenBalance = 'token__balance', + TokenCashBalance = 'token__cashBalance', + TokenDecimals = 'token__decimals', + TokenId = 'token__id', + TokenIndex = 'token__index', + TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee', + TokenManagedBalance = 'token__managedBalance', + TokenName = 'token__name', + TokenOldPriceRate = 'token__oldPriceRate', + TokenPaidProtocolFees = 'token__paidProtocolFees', + TokenPriceRate = 'token__priceRate', + TokenSymbol = 'token__symbol', + TokenWeight = 'token__weight', + UpperBoundPercentage = 'upperBoundPercentage' +} + +export type FxOracle = { + __typename?: 'FXOracle'; + decimals?: Maybe; + divisor?: Maybe; + id: Scalars['ID']; + tokens: Array; +}; + +export type FxOracle_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + decimals?: InputMaybe; + decimals_gt?: InputMaybe; + decimals_gte?: InputMaybe; + decimals_in?: InputMaybe>; + decimals_lt?: InputMaybe; + decimals_lte?: InputMaybe; + decimals_not?: InputMaybe; + decimals_not_in?: InputMaybe>; + divisor?: InputMaybe; + divisor_contains?: InputMaybe; + divisor_contains_nocase?: InputMaybe; + divisor_ends_with?: InputMaybe; + divisor_ends_with_nocase?: InputMaybe; + divisor_gt?: InputMaybe; + divisor_gte?: InputMaybe; + divisor_in?: InputMaybe>; + divisor_lt?: InputMaybe; + divisor_lte?: InputMaybe; + divisor_not?: InputMaybe; + divisor_not_contains?: InputMaybe; + divisor_not_contains_nocase?: InputMaybe; + divisor_not_ends_with?: InputMaybe; + divisor_not_ends_with_nocase?: InputMaybe; + divisor_not_in?: InputMaybe>; + divisor_not_starts_with?: InputMaybe; + divisor_not_starts_with_nocase?: InputMaybe; + divisor_starts_with?: InputMaybe; + divisor_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + tokens?: InputMaybe>; + tokens_contains?: InputMaybe>; + tokens_contains_nocase?: InputMaybe>; + tokens_not?: InputMaybe>; + tokens_not_contains?: InputMaybe>; + tokens_not_contains_nocase?: InputMaybe>; +}; + +export enum FxOracle_OrderBy { + Decimals = 'decimals', + Divisor = 'divisor', + Id = 'id', + Tokens = 'tokens' +} + export type GradualWeightUpdate = { __typename?: 'GradualWeightUpdate'; endTimestamp: Scalars['BigInt']; @@ -485,11 +794,15 @@ export enum GradualWeightUpdate_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -506,6 +819,8 @@ export enum GradualWeightUpdate_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -513,7 +828,11 @@ export enum GradualWeightUpdate_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -539,6 +858,7 @@ export enum InvestType { export type JoinExit = { __typename?: 'JoinExit'; amounts: Array; + block?: Maybe; id: Scalars['ID']; pool: Pool; sender: Scalars['Bytes']; @@ -559,6 +879,14 @@ export type JoinExit_Filter = { amounts_not_contains?: InputMaybe>; amounts_not_contains_nocase?: InputMaybe>; and?: InputMaybe>>; + block?: InputMaybe; + block_gt?: InputMaybe; + block_gte?: InputMaybe; + block_in?: InputMaybe>; + block_lt?: InputMaybe; + block_lte?: InputMaybe; + block_not?: InputMaybe; + block_not_in?: InputMaybe>; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -654,6 +982,7 @@ export type JoinExit_Filter = { export enum JoinExit_OrderBy { Amounts = 'amounts', + Block = 'block', Id = 'id', Pool = 'pool', PoolAddress = 'pool__address', @@ -672,11 +1001,15 @@ export enum JoinExit_OrderBy { PoolId = 'pool__id', PoolIsInRecoveryMode = 'pool__isInRecoveryMode', PoolIsPaused = 'pool__isPaused', + PoolJoinExitEnabled = 'pool__joinExitEnabled', PoolLambda = 'pool__lambda', + PoolLastJoinExitAmp = 'pool__lastJoinExitAmp', PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant', PoolLowerTarget = 'pool__lowerTarget', PoolMainIndex = 'pool__mainIndex', + PoolManagementAumFee = 'pool__managementAumFee', PoolManagementFee = 'pool__managementFee', + PoolMustAllowlistLPs = 'pool__mustAllowlistLPs', PoolName = 'pool__name', PoolOracleEnabled = 'pool__oracleEnabled', PoolOwner = 'pool__owner', @@ -693,6 +1026,8 @@ export enum JoinExit_OrderBy { PoolSqrtBeta = 'pool__sqrtBeta', PoolStrategyType = 'pool__strategyType', PoolSwapEnabled = 'pool__swapEnabled', + PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal', + PoolSwapEnabledInternal = 'pool__swapEnabledInternal', PoolSwapFee = 'pool__swapFee', PoolSwapsCount = 'pool__swapsCount', PoolSymbol = 'pool__symbol', @@ -700,7 +1035,11 @@ export enum JoinExit_OrderBy { PoolTauAlphaY = 'pool__tauAlphaY', PoolTauBetaX = 'pool__tauBetaX', PoolTauBetaY = 'pool__tauBetaY', + PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT', PoolTotalLiquidity = 'pool__totalLiquidity', + PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT', + PoolTotalProtocolFee = 'pool__totalProtocolFee', + PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT', PoolTotalShares = 'pool__totalShares', PoolTotalSwapFee = 'pool__totalSwapFee', PoolTotalSwapVolume = 'pool__totalSwapVolume', @@ -825,11 +1164,15 @@ export enum LatestPrice_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -846,6 +1189,8 @@ export enum LatestPrice_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -853,7 +1198,11 @@ export enum LatestPrice_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -960,6 +1309,7 @@ export enum ManagementOperation_OrderBy { PoolTokenIdManagedBalance = 'poolTokenId__managedBalance', PoolTokenIdName = 'poolTokenId__name', PoolTokenIdOldPriceRate = 'poolTokenId__oldPriceRate', + PoolTokenIdPaidProtocolFees = 'poolTokenId__paidProtocolFees', PoolTokenIdPriceRate = 'poolTokenId__priceRate', PoolTokenIdSymbol = 'poolTokenId__symbol', PoolTokenIdWeight = 'poolTokenId__weight', @@ -984,9 +1334,11 @@ export type Pool = { address: Scalars['Bytes']; alpha?: Maybe; amp?: Maybe; + ampUpdates?: Maybe>; baseToken?: Maybe; beta?: Maybe; c?: Maybe; + circuitBreakers?: Maybe>; createTime: Scalars['Int']; dSq?: Maybe; delta?: Maybe; @@ -998,11 +1350,17 @@ export type Pool = { id: Scalars['ID']; isInRecoveryMode?: Maybe; isPaused?: Maybe; + joinExitEnabled?: Maybe; + joinsExits?: Maybe>; lambda?: Maybe; + lastJoinExitAmp?: Maybe; lastPostJoinExitInvariant?: Maybe; + latestAmpUpdate?: Maybe; lowerTarget?: Maybe; mainIndex?: Maybe; + managementAumFee?: Maybe; managementFee?: Maybe; + mustAllowlistLPs?: Maybe; name?: Maybe; oracleEnabled: Scalars['Boolean']; owner?: Maybe; @@ -1022,7 +1380,12 @@ export type Pool = { sqrtAlpha?: Maybe; sqrtBeta?: Maybe; strategyType: Scalars['Int']; + /** Indicates if a pool can be swapped against. Combines multiple sources, including offchain curation */ swapEnabled: Scalars['Boolean']; + /** External indication from an offchain permissioned actor */ + swapEnabledCurationSignal?: Maybe; + /** The native swapEnabled boolean. internal to the pool. Only applies to Gyro, LBPs and InvestmentPools */ + swapEnabledInternal?: Maybe; swapFee: Scalars['BigDecimal']; swaps?: Maybe>; swapsCount: Scalars['BigInt']; @@ -1033,7 +1396,11 @@ export type Pool = { tauBetaY?: Maybe; tokens?: Maybe>; tokensList: Array; + totalAumFeeCollectedInBPT?: Maybe; totalLiquidity: Scalars['BigDecimal']; + totalLiquiditySansBPT?: Maybe; + totalProtocolFee?: Maybe; + totalProtocolFeePaidInBPT?: Maybe; totalShares: Scalars['BigDecimal']; totalSwapFee: Scalars['BigDecimal']; totalSwapVolume: Scalars['BigDecimal']; @@ -1051,6 +1418,24 @@ export type Pool = { }; +export type PoolAmpUpdatesArgs = { + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; +}; + + +export type PoolCircuitBreakersArgs = { + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; +}; + + export type PoolHistoricalValuesArgs = { first?: InputMaybe; orderBy?: InputMaybe; @@ -1060,6 +1445,15 @@ export type PoolHistoricalValuesArgs = { }; +export type PoolJoinsExitsArgs = { + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; +}; + + export type PoolPriceRateProvidersArgs = { first?: InputMaybe; orderBy?: InputMaybe; @@ -1174,11 +1568,15 @@ export enum PoolContract_OrderBy { PoolId = 'pool__id', PoolIsInRecoveryMode = 'pool__isInRecoveryMode', PoolIsPaused = 'pool__isPaused', + PoolJoinExitEnabled = 'pool__joinExitEnabled', PoolLambda = 'pool__lambda', + PoolLastJoinExitAmp = 'pool__lastJoinExitAmp', PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant', PoolLowerTarget = 'pool__lowerTarget', PoolMainIndex = 'pool__mainIndex', + PoolManagementAumFee = 'pool__managementAumFee', PoolManagementFee = 'pool__managementFee', + PoolMustAllowlistLPs = 'pool__mustAllowlistLPs', PoolName = 'pool__name', PoolOracleEnabled = 'pool__oracleEnabled', PoolOwner = 'pool__owner', @@ -1195,6 +1593,8 @@ export enum PoolContract_OrderBy { PoolSqrtBeta = 'pool__sqrtBeta', PoolStrategyType = 'pool__strategyType', PoolSwapEnabled = 'pool__swapEnabled', + PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal', + PoolSwapEnabledInternal = 'pool__swapEnabledInternal', PoolSwapFee = 'pool__swapFee', PoolSwapsCount = 'pool__swapsCount', PoolSymbol = 'pool__symbol', @@ -1202,7 +1602,11 @@ export enum PoolContract_OrderBy { PoolTauAlphaY = 'pool__tauAlphaY', PoolTauBetaX = 'pool__tauBetaX', PoolTauBetaY = 'pool__tauBetaY', + PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT', PoolTotalLiquidity = 'pool__totalLiquidity', + PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT', + PoolTotalProtocolFee = 'pool__totalProtocolFee', + PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT', PoolTotalShares = 'pool__totalShares', PoolTotalSwapFee = 'pool__totalSwapFee', PoolTotalSwapVolume = 'pool__totalSwapVolume', @@ -1326,11 +1730,15 @@ export enum PoolHistoricalLiquidity_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -1347,6 +1755,8 @@ export enum PoolHistoricalLiquidity_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -1354,7 +1764,11 @@ export enum PoolHistoricalLiquidity_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -1466,11 +1880,15 @@ export enum PoolShare_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -1487,6 +1905,8 @@ export enum PoolShare_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -1494,7 +1914,11 @@ export enum PoolShare_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -1518,6 +1942,7 @@ export type PoolSnapshot = { id: Scalars['ID']; liquidity: Scalars['BigDecimal']; pool: Pool; + protocolFee?: Maybe; swapFees: Scalars['BigDecimal']; swapVolume: Scalars['BigDecimal']; swapsCount: Scalars['BigInt']; @@ -1581,6 +2006,14 @@ export type PoolSnapshot_Filter = { pool_not_starts_with_nocase?: InputMaybe; pool_starts_with?: InputMaybe; pool_starts_with_nocase?: InputMaybe; + protocolFee?: InputMaybe; + protocolFee_gt?: InputMaybe; + protocolFee_gte?: InputMaybe; + protocolFee_in?: InputMaybe>; + protocolFee_lt?: InputMaybe; + protocolFee_lte?: InputMaybe; + protocolFee_not?: InputMaybe; + protocolFee_not_in?: InputMaybe>; swapFees?: InputMaybe; swapFees_gt?: InputMaybe; swapFees_gte?: InputMaybe; @@ -1645,11 +2078,15 @@ export enum PoolSnapshot_OrderBy { PoolId = 'pool__id', PoolIsInRecoveryMode = 'pool__isInRecoveryMode', PoolIsPaused = 'pool__isPaused', + PoolJoinExitEnabled = 'pool__joinExitEnabled', PoolLambda = 'pool__lambda', + PoolLastJoinExitAmp = 'pool__lastJoinExitAmp', PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant', PoolLowerTarget = 'pool__lowerTarget', PoolMainIndex = 'pool__mainIndex', + PoolManagementAumFee = 'pool__managementAumFee', PoolManagementFee = 'pool__managementFee', + PoolMustAllowlistLPs = 'pool__mustAllowlistLPs', PoolName = 'pool__name', PoolOracleEnabled = 'pool__oracleEnabled', PoolOwner = 'pool__owner', @@ -1666,6 +2103,8 @@ export enum PoolSnapshot_OrderBy { PoolSqrtBeta = 'pool__sqrtBeta', PoolStrategyType = 'pool__strategyType', PoolSwapEnabled = 'pool__swapEnabled', + PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal', + PoolSwapEnabledInternal = 'pool__swapEnabledInternal', PoolSwapFee = 'pool__swapFee', PoolSwapsCount = 'pool__swapsCount', PoolSymbol = 'pool__symbol', @@ -1673,7 +2112,11 @@ export enum PoolSnapshot_OrderBy { PoolTauAlphaY = 'pool__tauAlphaY', PoolTauBetaX = 'pool__tauBetaX', PoolTauBetaY = 'pool__tauBetaY', + PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT', PoolTotalLiquidity = 'pool__totalLiquidity', + PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT', + PoolTotalProtocolFee = 'pool__totalProtocolFee', + PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT', PoolTotalShares = 'pool__totalShares', PoolTotalSwapFee = 'pool__totalSwapFee', PoolTotalSwapVolume = 'pool__totalSwapVolume', @@ -1686,6 +2129,7 @@ export enum PoolSnapshot_OrderBy { PoolW = 'pool__w', PoolWrappedIndex = 'pool__wrappedIndex', PoolZ = 'pool__z', + ProtocolFee = 'protocolFee', SwapFees = 'swapFees', SwapVolume = 'swapVolume', SwapsCount = 'swapsCount', @@ -1699,6 +2143,7 @@ export type PoolToken = { assetManager: Scalars['Bytes']; balance: Scalars['BigDecimal']; cashBalance: Scalars['BigDecimal']; + circuitBreaker?: Maybe; decimals: Scalars['Int']; id: Scalars['ID']; index?: Maybe; @@ -1707,6 +2152,7 @@ export type PoolToken = { managements?: Maybe>; name: Scalars['String']; oldPriceRate?: Maybe; + paidProtocolFees?: Maybe; poolId?: Maybe; priceRate: Scalars['BigDecimal']; symbol: Scalars['String']; @@ -1773,6 +2219,27 @@ export type PoolToken_Filter = { cashBalance_lte?: InputMaybe; cashBalance_not?: InputMaybe; cashBalance_not_in?: InputMaybe>; + circuitBreaker?: InputMaybe; + circuitBreaker_?: InputMaybe; + circuitBreaker_contains?: InputMaybe; + circuitBreaker_contains_nocase?: InputMaybe; + circuitBreaker_ends_with?: InputMaybe; + circuitBreaker_ends_with_nocase?: InputMaybe; + circuitBreaker_gt?: InputMaybe; + circuitBreaker_gte?: InputMaybe; + circuitBreaker_in?: InputMaybe>; + circuitBreaker_lt?: InputMaybe; + circuitBreaker_lte?: InputMaybe; + circuitBreaker_not?: InputMaybe; + circuitBreaker_not_contains?: InputMaybe; + circuitBreaker_not_contains_nocase?: InputMaybe; + circuitBreaker_not_ends_with?: InputMaybe; + circuitBreaker_not_ends_with_nocase?: InputMaybe; + circuitBreaker_not_in?: InputMaybe>; + circuitBreaker_not_starts_with?: InputMaybe; + circuitBreaker_not_starts_with_nocase?: InputMaybe; + circuitBreaker_starts_with?: InputMaybe; + circuitBreaker_starts_with_nocase?: InputMaybe; decimals?: InputMaybe; decimals_gt?: InputMaybe; decimals_gte?: InputMaybe; @@ -1839,6 +2306,14 @@ export type PoolToken_Filter = { oldPriceRate_not?: InputMaybe; oldPriceRate_not_in?: InputMaybe>; or?: InputMaybe>>; + paidProtocolFees?: InputMaybe; + paidProtocolFees_gt?: InputMaybe; + paidProtocolFees_gte?: InputMaybe; + paidProtocolFees_in?: InputMaybe>; + paidProtocolFees_lt?: InputMaybe; + paidProtocolFees_lte?: InputMaybe; + paidProtocolFees_not?: InputMaybe; + paidProtocolFees_not_in?: InputMaybe>; poolId?: InputMaybe; poolId_?: InputMaybe; poolId_contains?: InputMaybe; @@ -1924,6 +2399,11 @@ export enum PoolToken_OrderBy { AssetManager = 'assetManager', Balance = 'balance', CashBalance = 'cashBalance', + CircuitBreaker = 'circuitBreaker', + CircuitBreakerBptPrice = 'circuitBreaker__bptPrice', + CircuitBreakerId = 'circuitBreaker__id', + CircuitBreakerLowerBoundPercentage = 'circuitBreaker__lowerBoundPercentage', + CircuitBreakerUpperBoundPercentage = 'circuitBreaker__upperBoundPercentage', Decimals = 'decimals', Id = 'id', Index = 'index', @@ -1932,6 +2412,7 @@ export enum PoolToken_OrderBy { Managements = 'managements', Name = 'name', OldPriceRate = 'oldPriceRate', + PaidProtocolFees = 'paidProtocolFees', PoolId = 'poolId', PoolIdAddress = 'poolId__address', PoolIdAlpha = 'poolId__alpha', @@ -1949,11 +2430,15 @@ export enum PoolToken_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -1970,6 +2455,8 @@ export enum PoolToken_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -1977,7 +2464,11 @@ export enum PoolToken_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -1995,6 +2486,7 @@ export enum PoolToken_OrderBy { Token = 'token', TokenAddress = 'token__address', TokenDecimals = 'token__decimals', + TokenFxOracleDecimals = 'token__fxOracleDecimals', TokenId = 'token__id', TokenLatestFxPrice = 'token__latestFXPrice', TokenLatestUsdPrice = 'token__latestUSDPrice', @@ -2031,6 +2523,7 @@ export type Pool_Filter = { alpha_not?: InputMaybe; alpha_not_in?: InputMaybe>; amp?: InputMaybe; + ampUpdates_?: InputMaybe; amp_gt?: InputMaybe; amp_gte?: InputMaybe; amp_in?: InputMaybe>; @@ -2065,6 +2558,7 @@ export type Pool_Filter = { c_lte?: InputMaybe; c_not?: InputMaybe; c_not_in?: InputMaybe>; + circuitBreakers_?: InputMaybe; createTime?: InputMaybe; createTime_gt?: InputMaybe; createTime_gte?: InputMaybe; @@ -2140,6 +2634,11 @@ export type Pool_Filter = { isPaused_in?: InputMaybe>; isPaused_not?: InputMaybe; isPaused_not_in?: InputMaybe>; + joinExitEnabled?: InputMaybe; + joinExitEnabled_in?: InputMaybe>; + joinExitEnabled_not?: InputMaybe; + joinExitEnabled_not_in?: InputMaybe>; + joinsExits_?: InputMaybe; lambda?: InputMaybe; lambda_gt?: InputMaybe; lambda_gte?: InputMaybe; @@ -2148,6 +2647,14 @@ export type Pool_Filter = { lambda_lte?: InputMaybe; lambda_not?: InputMaybe; lambda_not_in?: InputMaybe>; + lastJoinExitAmp?: InputMaybe; + lastJoinExitAmp_gt?: InputMaybe; + lastJoinExitAmp_gte?: InputMaybe; + lastJoinExitAmp_in?: InputMaybe>; + lastJoinExitAmp_lt?: InputMaybe; + lastJoinExitAmp_lte?: InputMaybe; + lastJoinExitAmp_not?: InputMaybe; + lastJoinExitAmp_not_in?: InputMaybe>; lastPostJoinExitInvariant?: InputMaybe; lastPostJoinExitInvariant_gt?: InputMaybe; lastPostJoinExitInvariant_gte?: InputMaybe; @@ -2156,6 +2663,27 @@ export type Pool_Filter = { lastPostJoinExitInvariant_lte?: InputMaybe; lastPostJoinExitInvariant_not?: InputMaybe; lastPostJoinExitInvariant_not_in?: InputMaybe>; + latestAmpUpdate?: InputMaybe; + latestAmpUpdate_?: InputMaybe; + latestAmpUpdate_contains?: InputMaybe; + latestAmpUpdate_contains_nocase?: InputMaybe; + latestAmpUpdate_ends_with?: InputMaybe; + latestAmpUpdate_ends_with_nocase?: InputMaybe; + latestAmpUpdate_gt?: InputMaybe; + latestAmpUpdate_gte?: InputMaybe; + latestAmpUpdate_in?: InputMaybe>; + latestAmpUpdate_lt?: InputMaybe; + latestAmpUpdate_lte?: InputMaybe; + latestAmpUpdate_not?: InputMaybe; + latestAmpUpdate_not_contains?: InputMaybe; + latestAmpUpdate_not_contains_nocase?: InputMaybe; + latestAmpUpdate_not_ends_with?: InputMaybe; + latestAmpUpdate_not_ends_with_nocase?: InputMaybe; + latestAmpUpdate_not_in?: InputMaybe>; + latestAmpUpdate_not_starts_with?: InputMaybe; + latestAmpUpdate_not_starts_with_nocase?: InputMaybe; + latestAmpUpdate_starts_with?: InputMaybe; + latestAmpUpdate_starts_with_nocase?: InputMaybe; lowerTarget?: InputMaybe; lowerTarget_gt?: InputMaybe; lowerTarget_gte?: InputMaybe; @@ -2172,6 +2700,14 @@ export type Pool_Filter = { mainIndex_lte?: InputMaybe; mainIndex_not?: InputMaybe; mainIndex_not_in?: InputMaybe>; + managementAumFee?: InputMaybe; + managementAumFee_gt?: InputMaybe; + managementAumFee_gte?: InputMaybe; + managementAumFee_in?: InputMaybe>; + managementAumFee_lt?: InputMaybe; + managementAumFee_lte?: InputMaybe; + managementAumFee_not?: InputMaybe; + managementAumFee_not_in?: InputMaybe>; managementFee?: InputMaybe; managementFee_gt?: InputMaybe; managementFee_gte?: InputMaybe; @@ -2180,6 +2716,10 @@ export type Pool_Filter = { managementFee_lte?: InputMaybe; managementFee_not?: InputMaybe; managementFee_not_in?: InputMaybe>; + mustAllowlistLPs?: InputMaybe; + mustAllowlistLPs_in?: InputMaybe>; + mustAllowlistLPs_not?: InputMaybe; + mustAllowlistLPs_not_in?: InputMaybe>; name?: InputMaybe; name_contains?: InputMaybe; name_contains_nocase?: InputMaybe; @@ -2350,6 +2890,14 @@ export type Pool_Filter = { strategyType_not?: InputMaybe; strategyType_not_in?: InputMaybe>; swapEnabled?: InputMaybe; + swapEnabledCurationSignal?: InputMaybe; + swapEnabledCurationSignal_in?: InputMaybe>; + swapEnabledCurationSignal_not?: InputMaybe; + swapEnabledCurationSignal_not_in?: InputMaybe>; + swapEnabledInternal?: InputMaybe; + swapEnabledInternal_in?: InputMaybe>; + swapEnabledInternal_not?: InputMaybe; + swapEnabledInternal_not_in?: InputMaybe>; swapEnabled_in?: InputMaybe>; swapEnabled_not?: InputMaybe; swapEnabled_not_in?: InputMaybe>; @@ -2429,7 +2977,23 @@ export type Pool_Filter = { tokensList_not_contains?: InputMaybe>; tokensList_not_contains_nocase?: InputMaybe>; tokens_?: InputMaybe; + totalAumFeeCollectedInBPT?: InputMaybe; + totalAumFeeCollectedInBPT_gt?: InputMaybe; + totalAumFeeCollectedInBPT_gte?: InputMaybe; + totalAumFeeCollectedInBPT_in?: InputMaybe>; + totalAumFeeCollectedInBPT_lt?: InputMaybe; + totalAumFeeCollectedInBPT_lte?: InputMaybe; + totalAumFeeCollectedInBPT_not?: InputMaybe; + totalAumFeeCollectedInBPT_not_in?: InputMaybe>; totalLiquidity?: InputMaybe; + totalLiquiditySansBPT?: InputMaybe; + totalLiquiditySansBPT_gt?: InputMaybe; + totalLiquiditySansBPT_gte?: InputMaybe; + totalLiquiditySansBPT_in?: InputMaybe>; + totalLiquiditySansBPT_lt?: InputMaybe; + totalLiquiditySansBPT_lte?: InputMaybe; + totalLiquiditySansBPT_not?: InputMaybe; + totalLiquiditySansBPT_not_in?: InputMaybe>; totalLiquidity_gt?: InputMaybe; totalLiquidity_gte?: InputMaybe; totalLiquidity_in?: InputMaybe>; @@ -2437,6 +3001,22 @@ export type Pool_Filter = { totalLiquidity_lte?: InputMaybe; totalLiquidity_not?: InputMaybe; totalLiquidity_not_in?: InputMaybe>; + totalProtocolFee?: InputMaybe; + totalProtocolFeePaidInBPT?: InputMaybe; + totalProtocolFeePaidInBPT_gt?: InputMaybe; + totalProtocolFeePaidInBPT_gte?: InputMaybe; + totalProtocolFeePaidInBPT_in?: InputMaybe>; + totalProtocolFeePaidInBPT_lt?: InputMaybe; + totalProtocolFeePaidInBPT_lte?: InputMaybe; + totalProtocolFeePaidInBPT_not?: InputMaybe; + totalProtocolFeePaidInBPT_not_in?: InputMaybe>; + totalProtocolFee_gt?: InputMaybe; + totalProtocolFee_gte?: InputMaybe; + totalProtocolFee_in?: InputMaybe>; + totalProtocolFee_lt?: InputMaybe; + totalProtocolFee_lte?: InputMaybe; + totalProtocolFee_not?: InputMaybe; + totalProtocolFee_not_in?: InputMaybe>; totalShares?: InputMaybe; totalShares_gt?: InputMaybe; totalShares_gte?: InputMaybe; @@ -2563,9 +3143,11 @@ export enum Pool_OrderBy { Address = 'address', Alpha = 'alpha', Amp = 'amp', + AmpUpdates = 'ampUpdates', BaseToken = 'baseToken', Beta = 'beta', C = 'c', + CircuitBreakers = 'circuitBreakers', CreateTime = 'createTime', DSq = 'dSq', Delta = 'delta', @@ -2577,11 +3159,23 @@ export enum Pool_OrderBy { Id = 'id', IsInRecoveryMode = 'isInRecoveryMode', IsPaused = 'isPaused', + JoinExitEnabled = 'joinExitEnabled', + JoinsExits = 'joinsExits', Lambda = 'lambda', + LastJoinExitAmp = 'lastJoinExitAmp', LastPostJoinExitInvariant = 'lastPostJoinExitInvariant', + LatestAmpUpdate = 'latestAmpUpdate', + LatestAmpUpdateEndAmp = 'latestAmpUpdate__endAmp', + LatestAmpUpdateEndTimestamp = 'latestAmpUpdate__endTimestamp', + LatestAmpUpdateId = 'latestAmpUpdate__id', + LatestAmpUpdateScheduledTimestamp = 'latestAmpUpdate__scheduledTimestamp', + LatestAmpUpdateStartAmp = 'latestAmpUpdate__startAmp', + LatestAmpUpdateStartTimestamp = 'latestAmpUpdate__startTimestamp', LowerTarget = 'lowerTarget', MainIndex = 'mainIndex', + ManagementAumFee = 'managementAumFee', ManagementFee = 'managementFee', + MustAllowlistLPs = 'mustAllowlistLPs', Name = 'name', OracleEnabled = 'oracleEnabled', Owner = 'owner', @@ -2604,6 +3198,8 @@ export enum Pool_OrderBy { SqrtBeta = 'sqrtBeta', StrategyType = 'strategyType', SwapEnabled = 'swapEnabled', + SwapEnabledCurationSignal = 'swapEnabledCurationSignal', + SwapEnabledInternal = 'swapEnabledInternal', SwapFee = 'swapFee', Swaps = 'swaps', SwapsCount = 'swapsCount', @@ -2614,7 +3210,11 @@ export enum Pool_OrderBy { TauBetaY = 'tauBetaY', Tokens = 'tokens', TokensList = 'tokensList', + TotalAumFeeCollectedInBpt = 'totalAumFeeCollectedInBPT', TotalLiquidity = 'totalLiquidity', + TotalLiquiditySansBpt = 'totalLiquiditySansBPT', + TotalProtocolFee = 'totalProtocolFee', + TotalProtocolFeePaidInBpt = 'totalProtocolFeePaidInBPT', TotalShares = 'totalShares', TotalSwapFee = 'totalSwapFee', TotalSwapVolume = 'totalSwapVolume', @@ -2627,7 +3227,9 @@ export enum Pool_OrderBy { VaultId = 'vaultID', VaultIdId = 'vaultID__id', VaultIdPoolCount = 'vaultID__poolCount', + VaultIdProtocolFeesCollector = 'vaultID__protocolFeesCollector', VaultIdTotalLiquidity = 'vaultID__totalLiquidity', + VaultIdTotalProtocolFee = 'vaultID__totalProtocolFee', VaultIdTotalSwapCount = 'vaultID__totalSwapCount', VaultIdTotalSwapFee = 'vaultID__totalSwapFee', VaultIdTotalSwapVolume = 'vaultID__totalSwapVolume', @@ -2771,11 +3373,15 @@ export enum PriceRateProvider_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -2792,6 +3398,8 @@ export enum PriceRateProvider_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -2799,7 +3407,11 @@ export enum PriceRateProvider_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -2825,6 +3437,7 @@ export enum PriceRateProvider_OrderBy { TokenManagedBalance = 'token__managedBalance', TokenName = 'token__name', TokenOldPriceRate = 'token__oldPriceRate', + TokenPaidProtocolFees = 'token__paidProtocolFees', TokenPriceRate = 'token__priceRate', TokenSymbol = 'token__symbol', TokenWeight = 'token__weight' @@ -2886,6 +3499,10 @@ export type Query = { balancerSnapshot?: Maybe; balancerSnapshots: Array; balancers: Array; + circuitBreaker?: Maybe; + circuitBreakers: Array; + fxoracle?: Maybe; + fxoracles: Array; gradualWeightUpdate?: Maybe; gradualWeightUpdates: Array; joinExit?: Maybe; @@ -2990,6 +3607,42 @@ export type QueryBalancersArgs = { }; +export type QueryCircuitBreakerArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryCircuitBreakersArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + +export type QueryFxoracleArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryFxoraclesArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type QueryGradualWeightUpdateArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -3377,6 +4030,10 @@ export type Subscription = { balancerSnapshot?: Maybe; balancerSnapshots: Array; balancers: Array; + circuitBreaker?: Maybe; + circuitBreakers: Array; + fxoracle?: Maybe; + fxoracles: Array; gradualWeightUpdate?: Maybe; gradualWeightUpdates: Array; joinExit?: Maybe; @@ -3481,6 +4138,42 @@ export type SubscriptionBalancersArgs = { }; +export type SubscriptionCircuitBreakerArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionCircuitBreakersArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + +export type SubscriptionFxoracleArgs = { + block?: InputMaybe; + id: Scalars['ID']; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionFxoraclesArgs = { + block?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + where?: InputMaybe; +}; + + export type SubscriptionGradualWeightUpdateArgs = { block?: InputMaybe; id: Scalars['ID']; @@ -3860,6 +4553,7 @@ export type SubscriptionUsersArgs = { export type Swap = { __typename?: 'Swap'; + block?: Maybe; caller: Scalars['Bytes']; id: Scalars['ID']; poolId: Pool; @@ -3983,11 +4677,15 @@ export enum SwapFeeUpdate_OrderBy { PoolId = 'pool__id', PoolIsInRecoveryMode = 'pool__isInRecoveryMode', PoolIsPaused = 'pool__isPaused', + PoolJoinExitEnabled = 'pool__joinExitEnabled', PoolLambda = 'pool__lambda', + PoolLastJoinExitAmp = 'pool__lastJoinExitAmp', PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant', PoolLowerTarget = 'pool__lowerTarget', PoolMainIndex = 'pool__mainIndex', + PoolManagementAumFee = 'pool__managementAumFee', PoolManagementFee = 'pool__managementFee', + PoolMustAllowlistLPs = 'pool__mustAllowlistLPs', PoolName = 'pool__name', PoolOracleEnabled = 'pool__oracleEnabled', PoolOwner = 'pool__owner', @@ -4004,6 +4702,8 @@ export enum SwapFeeUpdate_OrderBy { PoolSqrtBeta = 'pool__sqrtBeta', PoolStrategyType = 'pool__strategyType', PoolSwapEnabled = 'pool__swapEnabled', + PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal', + PoolSwapEnabledInternal = 'pool__swapEnabledInternal', PoolSwapFee = 'pool__swapFee', PoolSwapsCount = 'pool__swapsCount', PoolSymbol = 'pool__symbol', @@ -4011,7 +4711,11 @@ export enum SwapFeeUpdate_OrderBy { PoolTauAlphaY = 'pool__tauAlphaY', PoolTauBetaX = 'pool__tauBetaX', PoolTauBetaY = 'pool__tauBetaY', + PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT', PoolTotalLiquidity = 'pool__totalLiquidity', + PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT', + PoolTotalProtocolFee = 'pool__totalProtocolFee', + PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT', PoolTotalShares = 'pool__totalShares', PoolTotalSwapFee = 'pool__totalSwapFee', PoolTotalSwapVolume = 'pool__totalSwapVolume', @@ -4033,6 +4737,14 @@ export type Swap_Filter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; and?: InputMaybe>>; + block?: InputMaybe; + block_gt?: InputMaybe; + block_gte?: InputMaybe; + block_in?: InputMaybe>; + block_lt?: InputMaybe; + block_lte?: InputMaybe; + block_not?: InputMaybe; + block_not_in?: InputMaybe>; caller?: InputMaybe; caller_contains?: InputMaybe; caller_gt?: InputMaybe; @@ -4199,6 +4911,7 @@ export type Swap_Filter = { }; export enum Swap_OrderBy { + Block = 'block', Caller = 'caller', Id = 'id', PoolId = 'poolId', @@ -4218,11 +4931,15 @@ export enum Swap_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -4239,6 +4956,8 @@ export enum Swap_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -4246,7 +4965,11 @@ export enum Swap_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -4276,6 +4999,7 @@ export type Token = { __typename?: 'Token'; address: Scalars['String']; decimals: Scalars['Int']; + fxOracleDecimals?: Maybe; id: Scalars['ID']; latestFXPrice?: Maybe; latestPrice?: Maybe; @@ -4413,11 +5137,15 @@ export enum TokenPrice_OrderBy { PoolIdId = 'poolId__id', PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode', PoolIdIsPaused = 'poolId__isPaused', + PoolIdJoinExitEnabled = 'poolId__joinExitEnabled', PoolIdLambda = 'poolId__lambda', + PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp', PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant', PoolIdLowerTarget = 'poolId__lowerTarget', PoolIdMainIndex = 'poolId__mainIndex', + PoolIdManagementAumFee = 'poolId__managementAumFee', PoolIdManagementFee = 'poolId__managementFee', + PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs', PoolIdName = 'poolId__name', PoolIdOracleEnabled = 'poolId__oracleEnabled', PoolIdOwner = 'poolId__owner', @@ -4434,6 +5162,8 @@ export enum TokenPrice_OrderBy { PoolIdSqrtBeta = 'poolId__sqrtBeta', PoolIdStrategyType = 'poolId__strategyType', PoolIdSwapEnabled = 'poolId__swapEnabled', + PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal', + PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal', PoolIdSwapFee = 'poolId__swapFee', PoolIdSwapsCount = 'poolId__swapsCount', PoolIdSymbol = 'poolId__symbol', @@ -4441,7 +5171,11 @@ export enum TokenPrice_OrderBy { PoolIdTauAlphaY = 'poolId__tauAlphaY', PoolIdTauBetaX = 'poolId__tauBetaX', PoolIdTauBetaY = 'poolId__tauBetaY', + PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT', PoolIdTotalLiquidity = 'poolId__totalLiquidity', + PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT', + PoolIdTotalProtocolFee = 'poolId__totalProtocolFee', + PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT', PoolIdTotalShares = 'poolId__totalShares', PoolIdTotalSwapFee = 'poolId__totalSwapFee', PoolIdTotalSwapVolume = 'poolId__totalSwapVolume', @@ -4561,6 +5295,7 @@ export enum TokenSnapshot_OrderBy { Token = 'token', TokenAddress = 'token__address', TokenDecimals = 'token__decimals', + TokenFxOracleDecimals = 'token__fxOracleDecimals', TokenId = 'token__id', TokenLatestFxPrice = 'token__latestFXPrice', TokenLatestUsdPrice = 'token__latestUSDPrice', @@ -4611,6 +5346,14 @@ export type Token_Filter = { decimals_lte?: InputMaybe; decimals_not?: InputMaybe; decimals_not_in?: InputMaybe>; + fxOracleDecimals?: InputMaybe; + fxOracleDecimals_gt?: InputMaybe; + fxOracleDecimals_gte?: InputMaybe; + fxOracleDecimals_in?: InputMaybe>; + fxOracleDecimals_lt?: InputMaybe; + fxOracleDecimals_lte?: InputMaybe; + fxOracleDecimals_not?: InputMaybe; + fxOracleDecimals_not_in?: InputMaybe>; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -4771,6 +5514,7 @@ export type Token_Filter = { export enum Token_OrderBy { Address = 'address', Decimals = 'decimals', + FxOracleDecimals = 'fxOracleDecimals', Id = 'id', LatestFxPrice = 'latestFXPrice', LatestPrice = 'latestPrice', @@ -4799,11 +5543,15 @@ export enum Token_OrderBy { PoolId = 'pool__id', PoolIsInRecoveryMode = 'pool__isInRecoveryMode', PoolIsPaused = 'pool__isPaused', + PoolJoinExitEnabled = 'pool__joinExitEnabled', PoolLambda = 'pool__lambda', + PoolLastJoinExitAmp = 'pool__lastJoinExitAmp', PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant', PoolLowerTarget = 'pool__lowerTarget', PoolMainIndex = 'pool__mainIndex', + PoolManagementAumFee = 'pool__managementAumFee', PoolManagementFee = 'pool__managementFee', + PoolMustAllowlistLPs = 'pool__mustAllowlistLPs', PoolName = 'pool__name', PoolOracleEnabled = 'pool__oracleEnabled', PoolOwner = 'pool__owner', @@ -4820,6 +5568,8 @@ export enum Token_OrderBy { PoolSqrtBeta = 'pool__sqrtBeta', PoolStrategyType = 'pool__strategyType', PoolSwapEnabled = 'pool__swapEnabled', + PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal', + PoolSwapEnabledInternal = 'pool__swapEnabledInternal', PoolSwapFee = 'pool__swapFee', PoolSwapsCount = 'pool__swapsCount', PoolSymbol = 'pool__symbol', @@ -4827,7 +5577,11 @@ export enum Token_OrderBy { PoolTauAlphaY = 'pool__tauAlphaY', PoolTauBetaX = 'pool__tauBetaX', PoolTauBetaY = 'pool__tauBetaY', + PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT', PoolTotalLiquidity = 'pool__totalLiquidity', + PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT', + PoolTotalProtocolFee = 'pool__totalProtocolFee', + PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT', PoolTotalShares = 'pool__totalShares', PoolTotalSwapFee = 'pool__totalSwapFee', PoolTotalSwapVolume = 'pool__totalSwapVolume', @@ -5016,6 +5770,7 @@ export enum TradePair_OrderBy { Token0 = 'token0', Token0Address = 'token0__address', Token0Decimals = 'token0__decimals', + Token0FxOracleDecimals = 'token0__fxOracleDecimals', Token0Id = 'token0__id', Token0LatestFxPrice = 'token0__latestFXPrice', Token0LatestUsdPrice = 'token0__latestUSDPrice', @@ -5030,6 +5785,7 @@ export enum TradePair_OrderBy { Token1 = 'token1', Token1Address = 'token1__address', Token1Decimals = 'token1__decimals', + Token1FxOracleDecimals = 'token1__fxOracleDecimals', Token1Id = 'token1__id', Token1LatestFxPrice = 'token1__latestFXPrice', Token1LatestUsdPrice = 'token1__latestUSDPrice', @@ -5085,6 +5841,7 @@ export type UserInternalBalance = { balance: Scalars['BigDecimal']; id: Scalars['ID']; token: Scalars['Bytes']; + tokenInfo?: Maybe; userAddress?: Maybe; }; @@ -5110,6 +5867,27 @@ export type UserInternalBalance_Filter = { id_not_in?: InputMaybe>; or?: InputMaybe>>; token?: InputMaybe; + tokenInfo?: InputMaybe; + tokenInfo_?: InputMaybe; + tokenInfo_contains?: InputMaybe; + tokenInfo_contains_nocase?: InputMaybe; + tokenInfo_ends_with?: InputMaybe; + tokenInfo_ends_with_nocase?: InputMaybe; + tokenInfo_gt?: InputMaybe; + tokenInfo_gte?: InputMaybe; + tokenInfo_in?: InputMaybe>; + tokenInfo_lt?: InputMaybe; + tokenInfo_lte?: InputMaybe; + tokenInfo_not?: InputMaybe; + tokenInfo_not_contains?: InputMaybe; + tokenInfo_not_contains_nocase?: InputMaybe; + tokenInfo_not_ends_with?: InputMaybe; + tokenInfo_not_ends_with_nocase?: InputMaybe; + tokenInfo_not_in?: InputMaybe>; + tokenInfo_not_starts_with?: InputMaybe; + tokenInfo_not_starts_with_nocase?: InputMaybe; + tokenInfo_starts_with?: InputMaybe; + tokenInfo_starts_with_nocase?: InputMaybe; token_contains?: InputMaybe; token_gt?: InputMaybe; token_gte?: InputMaybe; @@ -5146,6 +5924,21 @@ export enum UserInternalBalance_OrderBy { Balance = 'balance', Id = 'id', Token = 'token', + TokenInfo = 'tokenInfo', + TokenInfoAddress = 'tokenInfo__address', + TokenInfoDecimals = 'tokenInfo__decimals', + TokenInfoFxOracleDecimals = 'tokenInfo__fxOracleDecimals', + TokenInfoId = 'tokenInfo__id', + TokenInfoLatestFxPrice = 'tokenInfo__latestFXPrice', + TokenInfoLatestUsdPrice = 'tokenInfo__latestUSDPrice', + TokenInfoLatestUsdPriceTimestamp = 'tokenInfo__latestUSDPriceTimestamp', + TokenInfoName = 'tokenInfo__name', + TokenInfoSymbol = 'tokenInfo__symbol', + TokenInfoTotalBalanceNotional = 'tokenInfo__totalBalanceNotional', + TokenInfoTotalBalanceUsd = 'tokenInfo__totalBalanceUSD', + TokenInfoTotalSwapCount = 'tokenInfo__totalSwapCount', + TokenInfoTotalVolumeNotional = 'tokenInfo__totalVolumeNotional', + TokenInfoTotalVolumeUsd = 'tokenInfo__totalVolumeUSD', UserAddress = 'userAddress', UserAddressId = 'userAddress__id' } @@ -5181,6 +5974,8 @@ export type _Block_ = { hash?: Maybe; /** The block number */ number: Scalars['Int']; + /** The hash of the parent block */ + parentHash?: Maybe; /** Integer representation of the timestamp stored in blocks for the chain */ timestamp?: Maybe; }; diff --git a/balancer-js/src/types.ts b/balancer-js/src/types.ts index ca0633bd2..ceebbc987 100644 --- a/balancer-js/src/types.ts +++ b/balancer-js/src/types.ts @@ -45,6 +45,7 @@ export interface BalancerSdkConfig { sor?: Partial; tenderly?: BalancerTenderlyConfig; enableLogging?: boolean; + coingecko?: CoingeckoConfig; } export interface BalancerTenderlyConfig { @@ -57,7 +58,7 @@ export interface BalancerTenderlyConfig { export interface BalancerSdkSorConfig { //use a built-in service or provide a custom implementation of a TokenPriceService //defaults to coingecko - tokenPriceService: 'coingecko' | 'subgraph' | TokenPriceService; + tokenPriceService: 'api' | 'coingecko' | 'subgraph' | TokenPriceService; //use a built-in service or provide a custom implementation of a PoolDataService //defaults to subgraph poolDataService: 'subgraph' | PoolDataService; @@ -119,6 +120,7 @@ export interface BalancerNetworkConfig { }; }; averageBlockTime?: number; // In seconds, used if blockNumberSubgraph not set + multicallBatchSize?: number; // Only zkEVM needs a smaller batch size of 128, defaults to 1024 pools: { wETHwstETH?: PoolReference; }; @@ -459,3 +461,9 @@ export interface GraphQLQuery { // eslint-disable-next-line @typescript-eslint/no-explicit-any attrs: any; } + +export type CoingeckoConfig = { + coingeckoApiKey: string; + tokensPerPriceRequest?: number; + isDemoApiKey?: boolean; +}; diff --git a/balancer-js/yarn.lock b/balancer-js/yarn.lock index afb0ee1af..d74837247 100644 --- a/balancer-js/yarn.lock +++ b/balancer-js/yarn.lock @@ -507,10 +507,10 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@balancer-labs/sor@^4.1.1-beta.16": - version "4.1.1-beta.16" - resolved "https://registry.yarnpkg.com/@balancer-labs/sor/-/sor-4.1.1-beta.16.tgz#bee2a863c751ca10320090b4831db26492b1959f" - integrity sha512-EKS7J78r5jKDsGqOs2gzIyhOqYyDAmrwp/nY2bSsfymNXSTr7g3YS418UJl1hSQMBEeN4N2MnH0neM1oJxHHoQ== +"@balancer-labs/sor@^4.1.1-beta.17": + version "4.1.1-beta.17" + resolved "https://registry.yarnpkg.com/@balancer-labs/sor/-/sor-4.1.1-beta.17.tgz#8c404a86174003cccf2bb87d49221cfdcf083246" + integrity sha512-JcX/HeppyoIs+Sa3Z/pdZhqMOBAGajOwVkBkFA8rehd1K2qaU/k/a3OkbIidXjs4lQI9sJE1WO8RauCLtuLQfg== dependencies: isomorphic-fetch "^2.2.1" @@ -3482,7 +3482,7 @@ ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@^5.0.0: +ethers@^5: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -6250,9 +6250,9 @@ webidl-conversions@^3.0.0: integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-fetch@>=0.10.0: - version "3.6.17" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" - integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-fetch@^3.4.1: version "3.6.2" diff --git a/funding.json b/funding.json new file mode 100644 index 000000000..7c588d1ca --- /dev/null +++ b/funding.json @@ -0,0 +1,5 @@ +{ + "opRetro": { + "projectId": "0x1c33980ce1d1290b5300719114dbe2cade0b820cb2b45321b715fd53d7abc8d2" + } +}